Перейти к содержанию
  • записи
    4
  • комментариев
    68
  • просмотров
    3 440

Настройка NGINX в режиме PHP-FPM для работы OpenCart


mpn2005

9 869 просмотров

Веб сервер nginx позволяет работать в разных режимах, как с использованием интерпретатора php, так и без.
Для работы OpenCart лучше выбирать оптимальный режим работы php-fpm. Многих данный режим пугает тем, что в данном случае
файл htaccess напрочь игнорируется и все необходимые настройки нужно вносить в конфиг nginx.
Но в этом нет ничего сверх сложного. Конфигурационный файл - это обычный текстовый файл на сервере, который 
подчиняется определённым правилам. И по данному поводу можно найти много готовых описаний и инструкций.


Данная статья не претендует на уникальность, а просто представляет краткую выжимку по настройкам, учитывая особенности 
работы с движком OpenCart и сборками на его основе.

 

Для удобства будут приводится примеры настройки с использованием панели ISPmanager.
Основные настройки будут касаться секции location, и зависимость описания от используемой панели будет минимальной.

 

Для начала переведём nginx в режим работы php-fpm. Для этого в панели сделаем следующие настройки разделе WWW-домены для 
нужного сайта:

1. Выбираем в списке нужный сайт, если их несколько, и жмём кнопку "Изменить".
2. Находим настройки PHP и настраиваем следующим образом:
diy003_001.png

Обратите внимание, что версия php у вас может отличаться. При необходимости, можно эту версию изменить на нужную, но этот вопрос выходит за рамки данной статьи.

После сохранения настроек будет работать почти всё, что и раньше. Если в настройках OpenCart отключены ЧПУ ссылки, то всё будет работать, как
и работало до переключения режима работы.
Теперь можно приступать к непосредственной настройке самого конфигурационного файла nginx для текущего сайта.
Для этого в списке www доменов находим нужный нам и нажимаем справа на иконку с тремя точками. В выпадающем меню выбираем
пункт "Конфиг":

Спойлер

diy003_002.png

 

Вот примерный конфигурационный файл, который будет создан у вас по умолчанию:

Спойлер
server {
    server_name test.ru www.test.ru;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/test.ru/*.conf;
    access_log /var/www/httpd-logs/test.ru.access.log;
    error_log /var/www/httpd-logs/test.ru.error.log notice;
    ssi on;
    set $root_path /var/www/myoc/data/www/test.ru;
    root $root_path;
    location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
            expires 365d;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@test.ru";
        fastcgi_pass unix:/var/www/php-fpm/myoc.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    listen 8.8.8.8:80;
}
server {
    server_name test.ru www.test.ru;
    ssl_certificate "/var/www/httpd-cert/myoc/test.ru.crt";
    ssl_certificate_key "/var/www/httpd-cert/myoc/test.ru.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    add_header Strict-Transport-Security "max-age=31536000;";
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/test.ru/*.conf;
    access_log /var/www/httpd-logs/test.ru.access.log;
    error_log /var/www/httpd-logs/test.ru.error.log notice;
    ssi on;
    set $root_path /var/www/myoc/data/www/test.ru;
    root $root_path;
    listen 8.8.8.8:443 ssl http2;
    location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
            expires 365d;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@test.ru";
        fastcgi_pass unix:/var/www/php-fpm/myoc.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}


В конфигурации у вас будет две секции server, если у вас включено защищённое соединение SSL (и оно должно быть обязательно включено).
Если у вас включен принудительный редирект с http на https, то можно редактировать только секцию server для https.
Определить её легко: в самом начале есть параметр с указанием сертификата ssl_certificate. Также в этой секции указан параметр listen с указанием порта 443:
 

listen 8.8.8.8:443 ssl

Но лучше делать настройки сразу в двух секциях server, чтобы не допустить механической ошибки.
На данный момент нас интересует вот эта часть конфигурационного файла:

location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
        try_files /does_not_exists @php;
    }
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        expires 365d;
    }
}


Все дальнейшие изменения мы будем вносить внутри этой секции "location /".

В первую очередь нам не хватает вот такой директивы:

if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
}


Данное условие очень простое: если сервер не может найти файл по указанному в запросе пути, то запрос будет переписан на вызов index.php, а в параметр _route_ будет передан запрашиваемый путь. Именно это и позволит корректно отрабатывать всем ЧПУ ссылкам движка.
Это правило является аналогом записи в файле htaccess:

RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]


На этом можно было бы и закончить, но стоит внести ещё некоторые изменения для улучшения безопасности.

Рассмотрим более внимательно вот эту секцию:

location ~ [^/]\.ph(p\d*|tml)$ {


Тут отбираются все все подходящие динамические файлы с типами .php (в том числе с числами в окончании) и .phtml
Но у движка OpenCart в штатном режиме есть всего две точки входа для вызова php файлов через web окружение - это index.php и admin/index.php
Есть ещё install/index.php, но она используется только при установке движка.
Учитывая данные обстоятельства, логично запретить прямое выполнение всех остальных php скриптов через web окружение, кроме указанных администратором.
Сделать это можно следующим образом:

location ~ ^/(index|admin/index|install/index)\.php {
    try_files /does_not_exists @php;
}


В скобках через разделитель "|" указываем все php скрипты, которые можно выполнять. После завершения установки можно будет сократить это список 
до такого: (index|admin/index)

ВНИМАНИЕ!!! Очень важный момент! После того, как убрали вызов интерпретатора php для всех файлов, кроме указанных, при попытке запроса любого другого php файла он будет отдан как обычный текстовый файл.
И при запросе https://test.ru/config.php любой желающий сможет получить содержимое вашего конфигурационного файла, где содержится доступ к БД.
Поэтому нам обязательно нужно запретить доступ для всех остальных файлов с расширением php. Ну и заодно к другим типам файлов, которые не
стоит отдавать по запросу извне. Сделать это можно простым правилом:

location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
    deny all;
}


В скобках через разделитель "|" указываем все расширения файлов, которые мы хотим запретить.
Но у нас есть несколько важных файлов, которые пока попали под запрет, например: robots.txt и sitemap.xml. Этот вопрос мы решим чуть позже.
А сейчас ещё немного запретов. Запретим открывать файлы, которые начинаются с точки, а также все файлы в папке system:

location ~ /\. {
    deny all;
}
location ~ ^/system/ {
    deny all;
}


Этих запретов вполне достаточно, чтобы сделать невозможным выполнение каких-либо несанкционированных скриптов. А также просмотр логов, текстовых и xml файлов.

 

Теперь нам необходимо открыть доступ к файлу robots.txt, для этого нам нужно такое правило:

location = /robots.txt {
    allow all;
}

 

Также пропишем разрешение на открытие sitemap.xml и rewrite правило:

location = /sitemap.xml {
    allow all;
    rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
}


Если вы используете сторонний модуль сайтмапа, то нужно указать соответствующий route для данного модуля.
Если у вас несколько файлов sitemap или вы используете фиды для выгрузки данных, то просто пропишите для них права по аналогии.

В итоге мы должны получить вот такую секцию location:

Спойлер
location / {
    if (!-e $request_filename){
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location ~ ^/(index|admin/index)\.php {
        try_files /does_not_exists @php;
    }

    location = /sitemap.xml {
        allow all;
        rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
    }
    location = /robots.txt {
        allow all;
    }

    location ~ /\. {
        deny all;
    }
    location ~ ^/system/ {
        deny all;
    }
    location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
        deny all;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|webp|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        expires 365d;
    }
}


Этих настроек достаточно для корректной работы движка OpenCart. И при этом данная конфигурация является безопасной с точки зрения выполнения 
несанкционированных скриптов php через web окружение.

После всех настроек обязательно проверьте правильность работы, сделав запросы по указанному чек-листу (test.ru замените на адрес вашего сайта):

https://test.ru/config.php
https://test.ru/admin/config.php
https://test.ru/admin/1.php
https://test.ru/admin/1.txt
https://test.ru/admin/1.log
https://test.ru/admin/1.xml
https://test.ru/system/modification.xml


Для всех этих ссылок вы должны получить ошибку "403 Forbidden", вне зависимости от того, есть файл по указанному пути на сервере, или нет.

Также проверяем белый список:

https://test.ru/robots.txt
https://test.ru/sitemap.xml


Эти файлы не должны вызывать ошибок и вы должны корректно получать их содержимое.
Дополнительно стоит проверить все ваши дополнительные сайтмапы или фиды, если вы их добавляли.

 

Ещё раз повторюсь, что данная настройка является базовой, с небольшими правилами для улучшения безопасности.
Но даже уже при такой настройке вы в среднем получите выигрыш 100-200ms для параметра TTFB, по сравнению с остальными режимами работы.

49 Комментариев


Рекомендуемые комментарии



6 минут назад, zondar сказал:

Только один файл с данным именем нашелся на сервере. Адрес /www/server/nginx/conf/

Вот тут в конфигурации нет алиаса @php на который можно ссылаться.

Поэтому для вашего варианта конфига не надо добавлять вот это правило

    location ~ ^/(index|admin/index)\.php {
        try_files /does_not_exists @php;
    }

 

Вам достаточно заменить это правило на это:

    location ~ ^/(index|admin/index)\.php {
        allow all;
    }

Чтобы разрешить доступ к нужным php файлам, т.к. ниже в конфиге идёт запрет для всех php файлов.

Ссылка на комментарий
В 01.02.2023 в 15:27, mpn2005 сказал:

Вам достаточно заменить это правило на это:

    location ~ ^/(index|admin/index)\.php {
        allow all;
    }

Чтобы разрешить доступ к нужным php файлам, т.к. ниже в конфиге идёт запрет для всех php файлов.

Спасибо за помощь, но сайт не открывается, а скачивается файл config.php из корневой папки. Причем каждый раз под разнами именами файлов.

Ссылка на комментарий
1 минуту назад, zondar сказал:

Спасибо за помощь, но сайт не открывается, а скачивается файл config.php из корневой папки. Причем каждый раз под разнами именами файлов.

Значит что-то нахимичили.

А что получается на стоковм конфиге панели без внесения изменений?

В первую очередь он должен работать. А дальше уже можно всё остальное настраивать.

Ссылка на комментарий

Пока убрал все правила, оставил только

	location / {
    if (!-e $request_filename){
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
 }

После очистки кеша браузера сайт открывается и seo url категорий работают.

А стоит добавить это правило:

    location ~ ^/(index|admin/index)\.php {
        allow all;
    }

То скачивается файл config.php

Изменено пользователем zondar
Ссылка на комментарий
13 минут назад, zondar сказал:

После очистки кеша браузера сайт открывается и seo url категорий работают.

Это самый минимум из необходимых правок.

Ссылка на комментарий
13 минут назад, zondar сказал:

А стоит добавить это правило:

Тогда не добавляйте его.

Тут надо всё аккуратно добавлять ещё и учитывать уже имеющиеся правки.

Слишком конфиг отличается от стокового в ISPmanager.

Ссылка на комментарий

Стал добавлять правила по очереди. Данное правило поставил самым первым вверху.

    location ~ ^/(index|admin/index)\.php {
        allow all;
    }

Затем правило

location / {
    if (!-e $request_filename){
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

Сайт продолжил работать как надо с seo url.

Таким методом добавил остальные правила пока сайт не выдал ошибку 403. Это случилось при вставке правила

        location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
        deny all;
    }

 

В данный момент рабочий конфиг выглядет так:

    location ~ ^/(index|admin/index)\.php {
        allow all;
    }
    	location / {
    if (!-e $request_filename){
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
        location = /sitemap.xml {
        allow all;
        rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
    }
        location = /robots.txt {
        allow all;
    }
    location ~ /\. {
        deny all;
    }
        location ~ ^/system/ {
        deny all;
    }
  location ~* ^.+\.(jpg|jpeg|gif|png|svg|webp|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        expires 365d;
    }
}

 

Изменено пользователем zondar
Ссылка на комментарий
6 часов назад, zondar сказал:

В данный момент рабочий конфиг выглядет так:

Все правила лучше вносить в общую секцию "location /"

Чтобы не получить приключений, там где не надо.

 

Так же в эту секцию стоит внести и конфиг для php, который подключается.

И при этом надо не сделать конфликтов для панели, когда там редактируются параметры, панель тоже меняет конфиг частями.

Ссылка на комментарий
В 17.04.2024 в 05:29, Arbete сказал:

Нет редиректа с www на без.

Это не является необходимостью для настройки.

Кому-то наоборот будет нужна версия с www.
В статье описаны базовые настройки.

Ссылка на комментарий

Добрый день! Настроил вроде все как надо, а запрет запуска файлов не срабатывает, store.ru/1.php открывается как и другие файлы:

Ubuntu 22 и fastpanel стоит

server {
    server_name store.ru;
    listen ххх.57.ххх.173:443 ssl  http2 ;

    ssl_certificate "/var/www/httpd-cert/store.ru_2024-06-02-14-33_09.crt";
    ssl_certificate_key "/var/www/httpd-cert/store.ru_2024-06-02-14-33_09.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 1;

    set $root_path /var/www/fastuser/data/www/store.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;

        if (!-e $request_filename){
            rewrite ^/(.+)$ /index.php?_route_=$1 last;
        }
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/store.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
     }

     
    location ~ ^/(index|admin/index|install/index)\.php {
        try_files /does_not_exists @php;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
        deny all;
    }

    location ~ /\. {
        deny all;
    }

    location ~ ^/system/ {
        deny all;
    }

    location = /robots.txt {
        allow all;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/store.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/fastuser/store.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;


    error_log /var/www/fastuser/data/logs/store.ru-frontend.error.log;
    access_log /var/www/fastuser/data/logs/store.ru-frontend.access.log;
}

подскажите, пожалуйста, что не так?

Изменено пользователем steve07
Ссылка на комментарий
В 03.06.2024 в 15:19, steve07 сказал:

подскажите, пожалуйста, что не так?

 

Скорее всего, Вам нужно так написать, если хотите, чтобы не открывался store.ru/1.php

location ~ ^/(index|admin/index|install/index|1)\.php {
        try_files /does_not_exists @php;
    }

 

Ссылка на комментарий
В 03.06.2024 в 17:26, specialforce22 сказал:

 

Скорее всего, Вам нужно так написать, если хотите, чтобы не открывался store.ru/1.php

location ~ ^/(index|admin/index|install/index|1)\.php {
        try_files /does_not_exists @php;
    }

 

дык это наоборот разрешение

Ссылка на комментарий
В 03.06.2024 в 16:19, steve07 сказал:

Добрый день! Настроил вроде все как надо, а запрет запуска файлов не срабатывает, store.ru/1.php открывается как и другие файлы:

Все запреты и разрешения лучше писать в секцию 

location / {

Чтобы не получить лишних приключений на других секциях конфига.

Ссылка на комментарий

Вот так примерно должна выглядеть секция /
 

    location / {
        index index.php index.html;

        if (!-e $request_filename){
            rewrite ^/(.+)$ /index.php?_route_=$1 last;
        }

        location ~ ^/(index|admin/index|install/index)\.php {
            try_files /does_not_exists @php;
        }

        location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
            deny all;
        }

        location ~ /\. {
            deny all;
        }

        location ~ ^/system/ {
            deny all;
        }

        location = /robots.txt {
            allow all;
        }
    }

 

Ссылка на комментарий

Ребята, кто-нибудь поясните пожалуйста что означает вот это правило 

  location ~ /\. {
            deny all;
        }

Методом тыка мне показалось, что это правило не дает правильно работать модулю Simple Login Security для защиты админки. 

А еще вот это правило выдает на главной странице сайта 403 Forbidden, т.е. сайт вообще не открывается....

 location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
            deny all;
        }

Подскажите пожалуйста почему так? Может добавить что то надо или вообще удалить это правило?

И при переходе например по адресу site.ru/admin/config.php - у меня белый экран.... а должно быть 403 Forbidden.  

Может нужно эти правила как то в разные секции прописывать? 

Изменено пользователем YuraN
Ссылка на комментарий

Еще небольшой вопрос по данной теме. У нас в сборке два модуля карты сайта - для Google и другой модуль для Yandex. Нужно их оба включить или выбрать какой то один? Вроде как гугловский сайтмап яндекс не принимает... А если включить оба - то как их разместить в разных location в конфиге Nginx?

Ведь в Location прописывается в конфиге так

	 location = /sitemap.xml {
        allow all;
        rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last    
    }    

 

А как оформить тогда карту сайта для Яндекса?

Или включить только для яндекса? Просто модулей этих два.... помогите определиться пожалуйста.

Ссылка на комментарий
On 7/24/2024 at 8:26 PM, YuraN said:

А если включить оба - то как их разместить в разных location в конфиге Nginx?

варианты

 

1. один локейшн для y_sitemap.xml, второй - для g_sitemap.xml. С разными реврайтами на url соответствующих модулей. А уже в личных кабинетах поисковиков указать нужные ссылки (они же не обязательно должны называться именно sitemap.xml)

 

2. не использовать реврайты. в личных кабинетах поисковиков сразу указывать https://mysite.ru/index.php?route=extension/feed/google_sitemap

 

3. не использовать реврайты. вместо них следует предварительно генерировать сайтмапы и сохранять их в статические готовые к употреблению файлы, используя тот же планировщик заданий на хостинге\сервере (cron). в личных кабинетах поисковиков ссылаться на эти готовые файлы. это самый популярный и беспроблемный способ. из очевидных плюсов - готовые файлы не создают нагрузки на сервер, сколько их не запрашивай; вы контролируете время создания этих файлов

Изменено пользователем 100napb
Ссылка на комментарий
В 24.07.2024 в 19:25, 100napb сказал:

один локейшн для y_sitemap.xml, второй - для g_sitemap.xml.

Вот спасибо добрый человек 🤝 А чуть выше я вопрос задавал не сможете подсказать? Что то с конфигурацией Nginx никак не получается все до ума довести....

Ссылка на комментарий
On 7/25/2024 at 12:47 AM, YuraN said:

.

 

location = /g_sitemap.xml { allow all; rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last; }
location = /y_sitemap.xml { allow all; rewrite ^/(.*)$ /index.php?route=extension/feed/yandex_sitemap last; } 

 

таким образом, при запросе вида https://mysite.run/g_sitemap.xml будет реврайт на модуль карты сайта гугла, который динамически будет генерировать карту на каждый запрос;

а при запросе https://mysite.run/y_sitemap.xml то же самое, но модуль карты яндекса.

 

пробуйте. вроде просто всё и должно получиться без проблем.

Ссылка на комментарий
On 7/17/2024 at 3:37 PM, YuraN said:

location ~ /\. { deny all; }

это ограничение доступа к директориям, которые начинаются с точки. всякие там /.git/ и подобные

 

On 7/17/2024 at 3:37 PM, YuraN said:

location ~* \.(php|log|tpl|txt|twig|xml|ini)$ { deny all; }

а это ограничение доступа к любым файлам с указанными расширениями. обратите внимание на то, что присутстуют php, txt и xml-файлы. то есть, без дополнительных локейшенов, в которых бы Вы определяли иные правила обработки этих файлов, доступа к ним не будет. собственно, потому у вас 403.

 

что бы это решить

а) для обрабки запросов к пхп-файлам в корне сайта или внутри папок /admin и /install Вам выше предложили добавить как минимум вот это

 

On 6/3/2024 at 10:26 PM, mpn2005 said:
        if (!-e $request_filename){
            rewrite ^/(.+)$ /index.php?_route_=$1 last;
        }

        location ~ ^/(index|admin/index|install/index)\.php {
            try_files /does_not_exists @php;
        }

 + еще где-то ниже, как мы видим из инструкции try_files /does_not_exists @php должен быть location @php { .. }, в котором бы собственно указывалось как nginx будет запросы к пхп проксировать: на какой порт или сокет. вместо @php локейшн можно называть как угодно. часто можно увидеть всякие @fallback.

короче, типа такого хотя б

    location @php {
        fastcgi_pass unix:/var/run/сокет_на_котором_слушает_пхп.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

 

б) снять ограничение конкретно для robots.txt. и про сайтмапы.xml про которые выше писали не забыть, иначе при попытке их запросить то же 403 будет

On 6/3/2024 at 10:26 PM, mpn2005 said:
        location = /robots.txt {
            allow all;
        }

 

Изменено пользователем 100napb
Ссылка на комментарий

Гость
Добавить комментарий...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...