Quando eu chamo o servidor NGINX, ele deve servir arquivos php armazenados em um servidor PHP remoto. Atualmente eu consigo 404 Not Found - nginx/1.10.3 (Ubuntu)
. Se eu mudar root /srv/www/site
para root /var/www/html
então, ele será veiculado com sucesso index.html
no NGINX, de modo que a solicitação nunca chegará ao servidor PHP.
- SERVIDOR PHP: 192.168.99.31 (
PHP 7.1.15
) - SERVIDOR NGINX: 192.168.99.32 (
nginx version: nginx/1.10.3 (Ubuntu)
)
O servidor PHP pode ser acessado a partir do servidor NGINX pela porta, 9000
conforme visto abaixo, então não acho que haja nenhum problema relacionado à conexão aqui.
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;
Responder1
CLASSIFICADO
Então é tudo uma questão de mudar try_files $uri $uri/ =404;
para try_files $uri $uri/ /index.php?$query_string;
. Veja a versão limpa abaixo.
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;
}
Responder2
Você tem a declaração:
try_files $fastcgi_script_name =404;
Que testa a existência do arquivo nomáquina local. Como você está tentando executar scripts PHP em alguma outra máquina, a try_files
instrução provavelmente está forçando a resposta 404.
Exclua a try_files
instrução e confie na máquina remota para verificar a existência de arquivos de script e lidar com osolicitações não controladasexplorar corretamente.
Ou espelhe a instalação em ambos os servidores.
Veresse documentopara mais.