FastCGI (Nginx + PHP-FPM) Есть решение

Перевел сервер на Fastcgi Nginx PHP-FPM версия php-7.2, взял настройки из инструкции: https://developers.webasyst.ru/docs/installation/tips/nginx-fastcgi/

Все нужные параметры изменил под свои, но выдает просто белую страницу с кодом 200, без каких либо ошибок,

Если в location /index.php убраю / и пишу так: location index.php, то открывается только главная страница, на любые разделы сайта ошибка 404

Полный конфиг для сайта:

server {
    listen      11.11.xx.xx:80;
    server_name domain.ru;
    root        /home/admin/web/domain.ru/public_html;
    index index.php;
    access_log  /var/log/nginx/domains/domain.ru.log combined;
    access_log  /var/log/nginx/domains/domain.ru.bytes bytes;
    error_log   /var/log/nginx/domains/domain.ru.error.log error;

    try_files $uri $uri/ /index.php?$query_string;

    location /index.php {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
    }

    location /api.php {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    
    location ~ /(oauth.php|link.php|payments.php) {
        try_files $uri $uri/ /index.php?$query_string;
    }    

    location ^~ /wa-data/protected/ {
        internal;
    }
    
    location ~ /wa-content {
        allow all;
    }

    location ^~ /(wa-apps|wa-plugins|wa-system|wa-widgets)/.*/(lib|locale|templates)/ {
        deny all;
    }

    location ~* ^/wa-(cache|config|installer|log|system)/ {
        return 403;
    }

    location ~* ^/wa-data/public/contacts/photos/[0-9]+/ {
         root /var/www/fw/;
         access_log off;
         expires  30d;
         error_page   404  =  @contacts_thumb;
    }

    location @contacts_thumb {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param  SCRIPT_NAME  /wa-data/public/contacts/photos/thumb.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wa-data/public/contacts/photos/thumb.php;
    }
  
    # photos app
    location ~* ^/wa-data/public/photos/[0-9]+/ {
        access_log   off;
        expires      30d;
        error_page   404  =  @photos_thumb;
    }

    location @photos_thumb {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param  SCRIPT_NAME  /wa-data/public/photos/thumb.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wa-data/public/photos/thumb.php;
    }
    # end photos app
    
    # shop app
    location ~* ^/wa-data/public/shop/products/[0-9]+/ {
        access_log   off;
        expires      30d;
        error_page   404  =  @shop_thumb;
    }
    location @shop_thumb {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param  SCRIPT_NAME  /wa-data/public/shop/products/thumb.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wa-data/public/shop/products/thumb.php;
    }
    
    location ~* ^/wa-data/public/shop/promos/[0-9]+ {
        access_log   off;
        expires      30d;
        error_page   404  =  @shop_promo;
    }
    location @shop_promo {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param  SCRIPT_NAME  /wa-data/public/shop/promos/thumb.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/wa-data/public/shop/promos/thumb.php;
    }
    # end shop app
    
    # mailer app
    location ~* ^/wa-data/public/mailer/files/[0-9]+/ {
        access_log   off;
        error_page   404  =  @mailer_file;
    }
    location @mailer_file {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9003;
        fastcgi_param  SCRIPT_NAME  /wa-data/public/mailer/files/file.php;
        fastcgi_param  SCRIPT_FILENAME $document_root/wa-data/public/mailer/files/file.php;
    }
    # end mailer app

    location ~* ^.+\.(jpg|jpeg|gif|png|js|css)$ {
        access_log   off;
        expires      30d;
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   /home/admin/web/domain.ru/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   /home/admin/web/domain.ru/stats/;
        include /home/admin/conf/web/domain.ru.auth*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     /home/admin/conf/web/nginx.domain.ru.conf*;
}

Так же поставил тестовый сайт на Drupal, взял предлагаемый ими конфиг и все сразу заработало как из коробки

Что не так с предлагаемым официально конфигом или может я что то не так делаю?

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

2 ответа

  • 2
    Михаил Ушенин Webasyst 22 апреля 2019 18:05 # Решение

    Проверьте, есть ли у вас в файле /etc/nginx/fastcgi_params следующие строки:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;

    Если нет, то их нужно добавить.

    https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

    Эти строки есть в файле /etc/nginx/fastcgi_params в операционных системах Debian & Ubuntu. Возможно, не во всех дистрибутивах так и у вас они отсутствуют.

    • +1
      Игорь Игорь 4 июня 2019 12:34 #

      Спасибо большое!

      Все верно, указанных директив в файле fastcgi_params не хватало, CentOS 7, добавил недостающее и все заработало со стандартным конфигом из вашей документации, а до этого работало через универсальный конфиг.

      Думаю стоит в документации сделать пометку и написать об этом.

  • 1

    Здравствуйте, Игорь. 

    Есть рабочий конфиг, правда работал под 5 версию.

     Можете написать на почту - joker@tjo.biz.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите