Un poco de historia. Estoy en el proceso de trasladar un sitio web de servidores antiguos con Apache a nuevos servidores Ubuntu con proxy NGINX a Apache. Habrá un período de transición en el que el código base del sitio web se ejecutará tanto en servidores nuevos como antiguos.
El sitio web tiene URL de búsqueda con filtros separados por barras y, a menudo, son opcionales, por ejemplo.
www.ejemplo.com/search/deals/q1/q2/q3/q4/q5/q6/
que se asigna a la siguiente regla de reescritura de apache.conf:
RewriteRule ^/search/deals/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/ /results.php?q1=$1&q2=$2&q3=$3&q4=$4&q5=$5&q6=$6 [L,QSA]
No es inusual tener URL como las siguientes
www.example.com/search/deals/q1////q5/q6/
www.example.com/search/deals/q1/q2/q3///q6/
www.example.com/search/deals/q1/q2/q3/q4///
En el nuevo servidor he configurado NGINX así: dos sitios habilitaron un archivo apache del servidor predeterminado y un archivo example.com
/etc/nginx/sites-enabled/apache -> ../sites-available/apache
/etc/nginx/sites-enabled/example.com -> ../sites-available/example.com
Apache se ve así (IP real reemplazada por 10.10.10.10):
server {
listen 10.10.10.10:80 default_server;
merge_slashes off; #have tried with/without
location / {
proxy_redirect off; #have tried with/without
port_in_redirect off; #have tried with/without
proxy_pass http://10.10.10.10:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ejemplo.com se ve así
server {
listen 10.10.10.10:80 ;
server_name example.com www.example.com;
root /var/www/live/example.com/frontend/htdocs;
merge_slashes off;
location / {
fastcgi_pass unix:/var/run/php5-fpm.sock; #have tried with/without
include fastcgi_params; #have tried with/without
proxy_redirect off; #have tried with/without
port_in_redirect off; #have tried with/without
proxy_pass http://10.10.10.10:8080 ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#have tried with/without
proxy_set_header X-Accel-Internal /internal-nginx-static-location; #have tried with/without
access_log off;
}
}
Después de realizar cualquier cambio, reinicié NGINX a través de
service nginx restart
Cuando cargo una página, por ejemplo, www.example.com/search/deals/q1/q2////q6/ aparece "archivo no encontrado" y luego miro el registro de Apache con el nivel de registro establecido en 3 y aparece a continuación:
[Wed Oct 07 22:52:10.178436 2015] [rewrite:trace1] [pid 4186:tid 123456789] mod_rewrite.c(468): [client 10.10.10.10:33468] 10.10.10.10 - - [www.example.com/sid#sddsaddsa][rid#sddsaddsa/subreq] pass through /search/deals/q1/q2/q5/
Lo que indica que todas las barras diagonales se han eliminado a través del proxy en algún momento. Pero necesito que la URL permanezca intacta para que la regla de Apache pueda enrutar los parámetros correctamente.
He mirado otras respuestas con títulos similares y ninguna resuelve mi problema, por ejemplo: mantenga barras dobles cuando trabaje con un pasajero
https://stackoverflow.com/questions/4320774/nginx-how-to-keep-double-slashes-in-urls
https://stackoverflow.com/questions/14832780/nginx-merge-slashes-redirect
https://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-url
https://stackoverflow.com/questions/5834025/how-to-preserve-request-url-with-nginx-proxy-pass
...
Si alguien tiene alguna sugerencia o puede indicarme la dirección correcta, sería genial.
gracias de antemano