Drupal 8 php-fpm

Главные вкладки

Аватар пользователя Olegars Olegars 20 августа 2016 в 21:41

Всем привет
Может кто сталкивался...
Настроил php-fpm, d7 работает отлично, а вот d8 местами не работает, например при установке, когда начинает заполнять базу, выскакивает "File not found. "
нашел упоминание о такой проблеме, но не понятно как решать

Not a 404 error. But file not found in small words in the top left of the browser. This error means that PHP FastCGI is running correctly but it’s paths are wrong.

I managed this because I’d set the chroot in my php pool and PHP FastCGI was navigating to the root, once nginx had already sent it to the root,. This mean the full path to my page that php was searching for looked something like : /var/www/mysite/var/www/mysite/mypage.

Looking into your nginx and PHP logs, you should be able to find some evidence of this.

Run through the section on setting up PHP-FPM above, make sure you’ve got all the variables set as I go through.

ссылка на источник
в логе
2016/08/20 17:40:55 [error] 15866#15866: *1851 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 128.68.134.160, server: сайт.ru, request: "GET /install.php?q=/core/install.php&langcode=ru&profile=standard&id=1&op=start HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "сайт.ru", referrer: "http://сайт.ru/core/install.php?q=/core/install.php&langcode=ru&profile=standard"

Комментарии

Аватар пользователя tlito tlito 20 августа 2016 в 22:28

сайт.ru/core/install.php?q=/core/install.php&langcode=ru&profile=standard - это похоже на ошибку обозначенную здесь https://pantheon.io/blog/update-your-nginx-config-drupal-8

nginx d8

правильный конфиг хоста nginx для drupal 8 на официальном сайте https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/

Аватар пользователя tlito tlito 20 августа 2016 в 23:01

возможно, сервер обращается к скрипту по неправильному адресу.
в настройках хоста должен быть правильный путь к скриптам, используя переменный fastcgi_params

вот вам листинг, здесь вы можете поправить только первую строчку fastcgi_pass unix:/var/run/php5-fpm.sock;
в этом файле устанавливаются переменные SCRIPT_NAME, QUERY_STRING, они потом используются в конфиге хоста (ниже)

Листинг файла /etc/nginx/fastcgi_params
fastcgi_pass    unix:/var/run/php5-fpm.sock;
fastcgi_index   index.php;
 
fastcgi_split_path_info       ^(.+\.php)(/.+)$;
 
fastcgi_param   PATH_INFO            $fastcgi_path_info;
 
fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;
 
fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param DOCUMENT_URI        $document_uri;
fastcgi_param  SERVER_PROTOCOL     $server_protocol;
 
fastcgi_param    SCRIPT_URI          $scheme://$host$request_uri;
 
fastcgi_param  GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param    SERVER_SOFTWARE     nginx;
 
fastcgi_param    REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;
 
fastcgi_param   Host                    $host;
fastcgi_param   HTTP_X_REAL_IP          $remote_addr;
fastcgi_param   HTTP_X_FORWARDED_FOR  $remote_addr;
 
fastcgi_param   Range                   "";
fastcgi_param   Request-Range           "";
 
fastcgi_buffer_size                     128k;
fastcgi_buffers                         4       256k;
fastcgi_busy_buffers_size               256k;
fastcgi_temp_file_write_size            256k;
 
fastcgi_connect_timeout                 600;
fastcgi_send_timeout                    600;
fastcgi_read_timeout                    600;

Пример конфигурационного файла хоста Nginx для сайта на Drupal 8
В файле обработка php не обозначена явно: подключается файл fastcgi_params, который содержит настройки для работы php-скриптов. Корневая папка сайта /var/www/site.ru/www

server {
    server_name www.site.ru .site.ru;
    root /var/www/site.ru/www;
 
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
 
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
 
    # Very rarely should these ever be accessed outside of your lan
    location ~* \.(txt|log)$ {
        allow 192.168.0.0/16;
        deny all;
    }
 
    location ~ \..*/.*\.php$ {
        return 403;
    }
 
    location ~ ^/sites/.*/private/ {
        return 403;
    }
 
    location ~ (^|/)\. {
        return 403;
    }
 
    location / {
        try_files $uri /index.php?$query_string; # For Drupal >= 7
    }
 
    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }
 
    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 
        include             /etc/nginx/fastcgi_params;
 
        fastcgi_param       SCRIPT_FILENAME     /var/www/site.ru/www$fastcgi_script_name;
        fastcgi_param       DOCUMENT_ROOT       /var/www/site.ru/www;
 
        fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/site.ru/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/site.ru/tmp/sessions;
    }
 
    # Fighting with Styles? This little gem is amazing.
    location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
        try_files $uri @rewrite;
    }
 
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}
Аватар пользователя Olegars Olegars 20 августа 2016 в 23:30

все, пошел, премного благодарю
добавил это

fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/site.ru/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/site.ru/tmp/sessions;

и fastcgi_params полностью вставил ваш

Аватар пользователя Olegars Olegars 21 августа 2016 в 15:15

Всем привет
бнаружилась еще одна проблема, вот из за этого блока не устанавливаются модули

location ~ \..*/.*\.php$ {
    return 403;
    }
Произошла ошибка.
Перейдите на страницу ошибки

An AJAX HTTP error occurred.
HTTP Result Code: 403
Debugging information follows.
Path: /core/authorize.php/core/authorize.php?batch=1&id=13&op=do_nojs&op=do
StatusText: Forbidden
ResponseText:
403 Forbidden
403 Forbidden

nginx

без него устанавливаются, как решить?

Аватар пользователя Olegars Olegars 21 августа 2016 в 16:37

Это не ядро, это виртуал хост.
Поясню, php-fpm работает на отдельно взятом виртуалхосте, остальные nginx+apache

server {
                server_name comp.ru www.comp.ru;
                listen 89.108.116.000;
                disable_symlinks if_not_owner from=$root_path;
                set $root_path /var/www/comp/data/www/comp.ru;
                gzip    on;
                gzip_min_length 1100;
                gzip_disable    "msie6";  
                gzip_proxied    any;
                gzip_comp_level 4;
                gzip_types              *;
                gzip_vary               off;
location = /favicon.ico {
       log_not_found off;
       access_log off;
      }
location = /robots.txt {
      allow all;
      log_not_found off;
     access_log off;
    }
location ~* \.(txt|log)$ {
    allow 192.168.0.0/16;
    deny all;
    }
location ~ \..*/.*\.php$ {
    return 403;
    }
location ~ ^/sites/.*/private/ {
     return 403;
    }
location ~* ^/.well-known/ {
    allow all;
    }
location ~ (^|/)\. {
        return 403;
    }

location ~* ^/.well-known/ {
    allow all;
    }

location / {
        try_files $uri /index.php?$query_string; # For Drupal >= 7
        }

location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
        }
location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
        }

location ~ \.php$|^/update.php  {
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME     /index.php;
    fastcgi_param HTTP_PROXY "";

    fastcgi_pass localhost:9001;
    include fastcgi_params;
    }

location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
        try_files $uri @rewrite;
        }
 
location ~* ^.+\.(?:css|js|ttf|woff|eof|svg|ico)$ {
    root $root_path;
    access_log off;
    log_not_found off;
    expires max;
    }

Аватар пользователя Olegars Olegars 21 августа 2016 в 22:24

я имел в виду непосредственно сам сайт с его файлами
чета не догоняю
файлы сайта находятся в корневой папке виртуалхоста, что значит вынести в директории пользователей?
Он и так в директории пользователя
И заодно, мультисайтинг тоже не работает толком, только непосредственный ввод названия файла работает, типа
сайт/подсайт/index.php
может есть рецептик

Аватар пользователя Studio VIZA Studio VIZA 21 августа 2016 в 22:37

Миша видимо против работы в директории рута, как я понял.

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

Аватар пользователя Olegars Olegars 22 августа 2016 в 0:11

да нет, конечно не от рута, пользователь обычный, коих на сервере штук 15, у него директория своя /var/www/comp/data/www/comp.ru, виртуал хост, скрипты работают от имени этого пользователя, все по феншую
вот этот блок

location ~ (^|/)\. {
        return 403;
    }

закрывает доступ всем кудато(я тут не понимаю) в том числе и сюда /core/authorize.php/core/authorize.php?batch=1&id=13&op=do_nojs&op=do
а установщику нужно туда....
видимо надо как то хитро это описать, типа как update - на сколько я понял с ним тоже проблема похожая была
location ~ \.php$|^/update.php

Аватар пользователя Olegars Olegars 22 августа 2016 в 0:27

то-есть, получается что во время установки модуля, какой то скрипт из вне лезет в эту папку, а nginx не пускает его туда, потому что доступ к этой папке снаружи запрещен

Аватар пользователя Mihail.space Mihail.space 22 августа 2016 в 0:43

я себе так делал
в папке юзера папка domains
в ней папки html для самих файлов друпала
и logs для логов
конфиг

server {
listen 80;
server_name test.ru;
access_log /home/master/domains/test.ru/logs/access.log;
error_log /home/master/domains/test.ru/logs/error.log;
root /home/master/domains/test.ru/html;
location / {
try_files $uri @drupal;
}
location ~ \.php$|^/update.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location @drupal {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 600;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
 }
}

пул
/etc/php/7.0/fpm/pool.d/test.ru.conf

[test.ru]
user = master
group = www-data
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 1500
security.limit_extensions = .php
php_admin_value[error_log] = /home/master/domains/test.ru/logs/fpm-php.www.error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 256M
php_admin_value[open_basedir] = "/home/master:."/etc/init.d/nginx restart
php_admin_value[upload_tmp_dir] = "/home/master/tmp"
php_admin_value[session.save_path] = "/home/master/tmp"

но у меня через tcp настроено
в дефолтном пуле
/etc/php/7.0/fpm/pool.d/www.conf
listen = /run/php/php7.0-fpm.sock изменил на listen = 127.0.0.1:9000

одно неудобство- на каждый сайт пул надо писать
по нарастающей
listen = 127.0.0.1:9002
listen = 127.0.0.1:9003
listen = 127.0.0.1:9004
и т.д.
И все работает нормально и семерка и восьмерка
хотя последний раз восьмерка запросила пакет
php7.0-xml
Правда все это относится к php 7, но с php 5 все тож самое, только пути к php-fpm чуть другие.

Аватар пользователя Mihail.space Mihail.space 22 августа 2016 в 1:16

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

Аватар пользователя Mihail.space Mihail.space 22 августа 2016 в 1:31

попробуйте расположить этот локейшн выше или ниже.
оф. конфиг то выложен, а как они весь сервер в целом настраивали там не написано.
посмотрите видео от создателя nginx
https://www.youtube.com/watch?v=fcG-7k20oG8

Аватар пользователя Olegars Olegars 22 августа 2016 в 1:46

странно, /core/authorize.php не скрытая папка, и файл не скрытый, а

location ~ \..*/.*\.php$ {
    return 403;
    }

(исправил, не тот блок указывал, этот правильный)
туда его не пускает