Nginx proxy_pass funciona apenas parcialmente
Eu tenho a seguinte configuração
Servidor mestre - chame-ohttps://master.com
Servidor escravo - chame-ohttps://slave.com
Ambos executam o Nginx no Ubuntu 16.04
No servidor mestre, criei o seguinte bloco de configuração no meu/etc/nginx/sites-available/default
Arquivo
location /test
{
rewrite ^/test(.*) /$1 break;
proxy_pass https://slave.com;
proxy_read_timeout 240;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
A service nginx reload
mais tardemaster.com
e eu posso fazer o seguinte
https://master.com/test
e veja a saída deslave.com\index.php
.Navegue atéhttps://master.com/test/test.txt
e veja o texto no arquivoslave.com\test.txt
Navegue atéhttps://master/com/test/test.jpg
e veja a imagem no arquivoslave.com\test.jpg
.No entanto, não posso executar nenhuma das seguintes ações
Navegue atéhttps://master.com/test/test.php
que em vez de me mostrar a saída dehttps://slave.com/test.php
mostra uma mensagem de erro 404Navegue atéhttps://master.com/test/adminer/adminer.php
que, em vez de me mostrar a tela de login da instância do Adminer no escravo,https://slave.com/adminer/adminer.php
mostra a tela de login para a instância do Adminer emmaster.com
isto éhttps://master.com/adminer/adminer.php
Isto é claramente porque estou faltando algo na minha configuração do Nginx nomaster.com
. No entanto, não consigo ver o que isso pode ser.
No interesse da integridade, eis a minha configuração nos dois servidores:
Ubuntu - 16.04.3Nginx - 1.10.3PHP - 7.0.22
Eu deveria explicar por que o^~
é necessário, pois isso não está claro na minha pergunta original. Eu tenho outra configuração de bloco para lidar com scripts PHP emmaster.com
.
location ~ \.php$
{
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Devido à maneira como o Nginx processa essas diretivas, esse bloco tem prioridade quando se trata de manipulação.php
arquivos emaster.com
acaba procurando localmente.php
scripts que estão realmente emslave.com
. A única maneira de evitar isso é usar^~