Nginx proxy_pass solo funciona parcialmente
Tengo la siguiente configuración
Servidor maestro: llámalohttps://master.com
Servidor esclavo: llámalohttps://slave.com
Ambos ejecutan Nginx en Ubuntu 16.04
En el servidor maestro, he creado el siguiente bloque de configuración en mi/etc/nginx/sites-available/default
archivo
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
mas tardemaster.com
y puedo hacer lo siguiente
https://master.com/test
y ver la salida deslave.com\index.php
.Navegar haciahttps://master.com/test/test.txt
y ver el texto en el archivoslave.com\test.txt
Navegar haciahttps://master/com/test/test.jpg
y ver la imagen en el archivoslave.com\test.jpg
.Sin embargo, no puedo hacer nada de lo siguiente
Navegar haciahttps://master.com/test/test.php
que en lugar de mostrarme la salida dehttps://slave.com/test.php
me muestra un mensaje de error 404Navegar haciahttps://master.com/test/adminer/adminer.php
que en lugar de mostrarme la pantalla de inicio de sesión para la instancia de Adminer en el esclavo,https://slave.com/adminer/adminer.php
me muestra la pantalla de inicio de sesión para la instancia de Adminer enmaster.com
es decirhttps://master.com/adminer/adminer.php
Esto es claramente porque me falta algo en mi configuración de Nginx enmaster.com
. Sin embargo, no puedo ver qué podría ser eso.
En aras de la integridad, aquí está mi configuración en ambos servidores:
Ubuntu - 16.04.3Nginx - 1.10.3PHP - 7.0.22
Debería explicar por qué^~
es obligatorio ya que esto no está claro en mi pregunta original. Tengo otra configuración de bloque para manejar scripts PHP enmaster.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;
}
Debido a la forma en que Nginx procesa estas directivas, este bloque tiene prioridad cuando se trata de manejar.php
archivos ymaster.com
termina buscando localmente.php
guiones que están realmente enslave.com
. La única forma de evitar esto es usar^~