Всем привет
Может кто сталкивался...
Настроил php-fpm, d7 работает отлично, а вот d8 местами не работает, например при установке, когда начинает заполнять базу, выскакивает "File not found. "
нашел упоминание о такой проблеме, но не понятно как решать
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"
Комментарии
сайт.ru/core/install.php?q=/core/install.php&langcode=ru&profile=standard - это похоже на ошибку обозначенную здесь https://pantheon.io/blog/update-your-nginx-config-drupal-8
правильный конфиг хоста nginx для drupal 8 на официальном сайте https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
по ним и делал, конфиг как раз оттуда целиком и есть
возможно, сервер обращается к скрипту по неправильному адресу.
в настройках хоста должен быть правильный путь к скриптам, используя переменный fastcgi_params
вот вам листинг, здесь вы можете поправить только первую строчку fastcgi_pass unix:/var/run/php5-fpm.sock;
в этом файле устанавливаются переменные SCRIPT_NAME, QUERY_STRING, они потом используются в конфиге хоста (ниже)
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_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;
}
}
ой, кажется, где-то лишний раз задаётся script_name
все, пошел, премного благодарю
добавил это
fastcgi_param PHP_ADMIN_VALUE session.save_path=/var/www/site.ru/tmp/sessions;
и fastcgi_params полностью вставил ваш
Всем привет
бнаружилась еще одна проблема, вот из за этого блока не устанавливаются модули
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
без него устанавливаются, как решить?
Отучайтесь размещать сайты в ядре, выносите их в директории пользователей.
Это не ядро, это виртуал хост.
Поясню, php-fpm работает на отдельно взятом виртуалхосте, остальные nginx+apache
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;
}
я имел в виду непосредственно сам сайт с его файлами
я имел в виду непосредственно сам сайт с его файлами
чета не догоняю
файлы сайта находятся в корневой папке виртуалхоста, что значит вынести в директории пользователей?
Он и так в директории пользователя
И заодно, мультисайтинг тоже не работает толком, только непосредственный ввод названия файла работает, типа
сайт/подсайт/index.php
может есть рецептик
Миша видимо против работы в директории рута, как я понял.
Да, должен быть юзер хоть один, если речь не о локали, и все работы по сайту должны производиться из-под юзера.
да нет, конечно не от рута, пользователь обычный, коих на сервере штук 15, у него директория своя /var/www/comp/data/www/comp.ru, виртуал хост, скрипты работают от имени этого пользователя, все по феншую
вот этот блок
return 403;
}
закрывает доступ всем кудато(я тут не понимаю) в том числе и сюда
/core/authorize.php/core/authorize.php?batch=1&id=13&op=do_nojs&op=do
а установщику нужно туда....
видимо надо как то хитро это описать, типа как update - на сколько я понял с ним тоже проблема похожая была
location ~ \.php$|^/update.php
то-есть, получается что во время установки модуля, какой то скрипт из вне лезет в эту папку, а nginx не пускает его туда, потому что доступ к этой папке снаружи запрещен
я себе так делал
в папке юзера папка domains
в ней папки html для самих файлов друпала
и logs для логов
конфиг
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
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 чуть другие.
ну правильно, оно и будет работать, ведь
return 403;
}
у вас нету.....
а тут есть nginx для drupal 8 на официальном сайте
видимо для безопасности
этот локейшн нужен для запрета доступа к скрытым папкам, если используются система контроля версий.
у меня они вынесены за пределы сайта и внешнего доступа к ним итак нет.
то есть можно убрать этот блок?
и что за скрытые папки?
попробуйте расположить этот локейшн выше или ниже.
оф. конфиг то выложен, а как они весь сервер в целом настраивали там не написано.
посмотрите видео от создателя nginx
https://www.youtube.com/watch?v=fcG-7k20oG8
директории или файлы, которые начинаются с точки, типа .composer
странно, /core/authorize.php не скрытая папка, и файл не скрытый, а
return 403;
}
(исправил, не тот блок указывал, этот правильный)
туда его не пускает
да, опустил, работает, только может он теперь вообще не выполняет задуманной функции....
я вел разговор об этом локейшене
location ~ (^|/)\. {
return 403;
}
извиняюсь, уже путаться начал