当我调用 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)
)
如下所示,可以通过端口从 NGINX 服务器访问 PHP 服务器,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;
}