Первая публикация и новичок во всем этом - мне посоветовали попробовать здесь, через переполнение стека, и прочитали несколько разных вещей, связанных, но просто не могу понять это. После большого количества проб и ошибок и поиска мои блоки местоположения в настоящее время выглядят так - глобальный PHP был удален и включен в мои блоки местоположения.
Первый работает нормально, второй после нескольких изменений теперь не показывает 403 Forbidden или 404 not found, но показывает общую строку «File not found».
www.mydomain.com - обслуживать файл index.php из / var / www / html / test
www.mydomain.com/test - должен обслуживать файл из index.php из / var / www / html / test2 но это не удается со следующей ошибкой.
Мой журнал ошибок Nginx при посещении показывает следующее:
2018/02/26 19:13:47 [error] 25229#25229: *185968 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: X.X.X.X, server: domain.co.uk, request: "GET /test/ HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "domain.co.uk"
Я изучал здесь различные фрагменты, посвященные различным параметрам fastcgi_param SCRIPT_FILENAME, но я не могу заставить ни один из них работать. Любые предложения будут действительно признательны, так как я потратил часы, пытаясь заставить это работать, и мне удалось добиться некоторого прогресса, но озадаченный тем, что, как я предполагаю, будет последней задачей в выполнении этой работы.
Я уже удалил try_files из псевдонима, поскольку мне сказали, что это не очень хорошо работает (до этого 403), и добавил $ request_filename в мой fastcgi_param bu, который не остановил эту ошибку.
location ~ ^((?!\/test).)*$ {
include /etc/nginx/mime.types;
root /var/www/html/test;
index index.php index.html index.htm;
location ~ \.php$ {
root /var/www/html/test;
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ ^/test(.*)$ {
include /etc/nginx/mime.types;
alias /var/www/html/test2/;
index index.php index.html index.htm;
location ~ \.php$ {
alias /var/www/html/test2/;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename;
include fastcgi_params;
}
}
Пользователь, который порекомендовал мне попробовать, посоветовал
Move the root /var/www/html/test; outside the first location block. nginx pitfalls Replace alias with root in second block. according to nginx docs remove the second alias in second block. it was redundant anyway remove $request_filename; from fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename; same error on serverfault
Я сделал это, однако это был почти шаг назад, что привело к ошибке 404 nginx при посещении / test / с их предложенными изменениями, что сделало это похожим на их пример:
server {
root /var/www/html/test;
location ~ ^((?!\/test).)*$ {
include /etc/nginx/mime.types;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ ^/test(.*)$ {
include /etc/nginx/mime.types;
root /var/www/html/test2/;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Я также счастлив поработать (я доверяю их больше, чем своим собственным), чтобы попытаться решить эту проблему, если у кого-то есть какие-либо знания, которые помогут мне в этом.
Джемаль на Stackoverflow решил эту проблему для меня!
server {
root /var/www/html/test;
location /test {
include /etc/nginx/mime.types;
root /var/www/html/test2/;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location / {
include /etc/nginx/mime.types;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Проблема с 404 сводилась к тому, что файлы для первого местоположения были в / var / www / html / test2, но с местоположением / test, которое получает префикс, поэтому каталог должен быть / var / www / html / test2 на конце веб-сервера. .