Когда я вызываю сервер NGINX, он должен обслуживать php-файлы, хранящиеся на удаленном PHP-сервере. В настоящее время я получаю 404 Not Found - nginx/1.10.3 (Ubuntu)
. Если я меняю root /srv/www/site
на , root /var/www/html
то он успешно обслуживает index.html
NGINX, так что запрос на самом деле вообще не попадает на PHP-сервер.
- PHP-СЕРВЕР: 192.168.99.31 (
PHP 7.1.15
) - СЕРВЕР NGINX: 192.168.99.32 (
nginx version: nginx/1.10.3 (Ubuntu)
)
PHP-сервер доступен с сервера NGINX через порт, 9000
как показано ниже, поэтому я не думаю, что здесь есть какие-либо проблемы, связанные с подключением.
vagrant@nginx:~$ nc -zv 192.168.99.31 9000
Connection to 192.168.99.31 9000 port [tcp/*] succeeded!
PHP
vagrant@php:~$ cat /etc/php/7.1/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = 9000
listen.allowed_clients = 192.168.99.32
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
-
vagrant@php:~$ dpkg --list | grep php
ii php-common 1:60+ubuntu16.04.1+deb.sury.org+1
ii php7.1 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-cgi 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-cli 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-common 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-fpm 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-json 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-mbstring 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-mcrypt 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-mysql 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-opcache 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-readline 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
ii php7.1-zip 7.1.15-1+ubuntu16.04.1+deb.sury.org+2
-
vagrant@php:~$ cat /srv/www/site/index.php
<?php
echo 'Hello from PHP host'.PHP_EOL;
NGINX
vagrant@nginx:~$ cat /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /srv/www/site;
index index.php index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 192.168.99.31:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
error_log /var/log/nginx/site_error.log;
access_log /var/log/nginx/site_access.log;
}
-
vagrant@nginx:~$ cat /etc/nginx/snippets/fastcgi-php.conf
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $fastcgi_script_name =404;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
-
vagrant@nginx:~$ cat /etc/nginx/fastcgi.conf
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
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 DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
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;
fastcgi_param REDIRECT_STATUS 200;
решение1
СОРТИРОВАНО
Итак, все дело в изменении try_files $uri $uri/ =404;
на try_files $uri $uri/ /index.php?$query_string;
. См. очищенную версию ниже.
ubuntu@nginx:~$ cat /etc/nginx/sites-available/default
server {
listen 80;
listen [::]:80;
root /srv/www/site;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_pass 192.168.99.31:9000;
}
# Deny access to .htaccess files
location ~ /\.ht {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_log /var/log/nginx/site_error.log;
access_log /var/log/nginx/site_access.log;
}
решение2
У вас есть заявление:
try_files $fastcgi_script_name =404;
Который проверяет наличие файла налокальная машина. Поскольку вы пытаетесь выполнить PHP-скрипты на какой-то другой машине, оператор, try_files
вероятно, вызывает ответ 404.
Либо удалите try_files
оператор и положитесь на то, что удаленная машина проверит наличие файлов скриптов и обработает их.неконтролируемые запросыэксплуатируйте правильно.
Или выполните зеркальную установку на обоих серверах.
Видетьэтот документдля большего.