NGINX サーバーを呼び出すと、リモート PHP サーバーに保存されている PHP ファイルを提供する必要があります。現在は が返されます。に404 Not Found - nginx/1.10.3 (Ubuntu)
変更すると、NGINX から正常に提供されるため、リクエストは実際には PHP サーバーにまったく到達しません。root /srv/www/site
root /var/www/html
index.html
- 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
、リモートマシンにスクリプトファイルの存在を確認して処理させるか、制御されていないリクエスト正しく活用してください。
または、両方のサーバー間でインストールをミラーリングします。
見るこのドキュメント多くのための。