Рубріки: HighloadТеория

Ошибка Nginx FastCGI sent in stderr “Primary script unknown”

Игорь Грегорченко

Ошибка FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream в Nginx возникает при использовании модуля php-fpm.

Она говорит о том, что веб-сервер не может найти указанный в файле конфигурации nginx.conf скрипт:

server {

listen 80;
server_name xxx.xxx.xxx.xxx;
root var/www/;
access_log /var/log/nginx_access.log;
error_log /var/log/nginx_error.log;
location ~ .*.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

}

$document_root говорит о том, что скрипт лежит в корневом каталоге

Главная рекомендация — проверьте все пути и убедитесь, что все нужные файлы существуют и лежат на своих местах.

Если вы не можете разобраться, в каком каталоге Nginx ищет нужный скрипт, то поможет консоль:

tcpdump port 9000 -A | strings
fastcgi_pass по умолчанию установлен на 9000 порт

Вывод покажет всю нужную информацию, в том числе путь к скрипту.

Защита файлов

Учтите, что нужно дополнительно настроить веб-сервер, чтобы он мог выдержать атаки злоумышленников и огромное количество запросов к несуществующим файлам, которые сами по себе способны положить сайт.

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

location /admin.php {
deny all;
}

Запрещает доступ к файлу admin.php

Но в Nginx есть и более изящный способ защиты от запросов к несуществующим файлам:

location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}

Если запрашиваемого файла заданного формата не существует, то выводит страницу 404

А для защиты от флуда можно использовать директиву limit_req:

location ~ .*.php$ {
limit_req zone=flood;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

Директив limit_req может быть несколько

Limit_req также можно размещать в секциях http и server:

http {
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

server {
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
}

}

Ограничивает количество подключений с одного ip и количество запросов в секунду

При использовании модуля FastCGI можно ограничить доступ к файлам из интернета, возвращая страницу ошибки при запросе:

server {
listen 80;
server_name xxx.xxx.xxx.xxx;
root var/www/;
access_log /var/log/nginx_access.log;
error_log /var/log/nginx_error.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}

fastcgi_intercept_errors on;
location ~ .*.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

}
# Все ошибки перенаправляются на error_page

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

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023