Então, um pouco de fundo. Eu estou no processo de mover o site de servidores antigos com o Apache para novos servidores Ubuntu com proxy NGINX para o Apache. Haverá um período de transição no qual a base de código do site será executada em servidores antigos e novos.
O site tem URLs de pesquisa com filtros separados por barras e geralmente são opcionais, por exemplo
www.example.com/search/deals/q1/q2/q3/q4/q5/q6 /
que mapeia para a seguinte regra de reescrita do apache.conf:
RewriteRule ^/search/deals/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/ /results.php?q1=$1&q2=$2&q3=$3&q4=$4&q5=$5&q6=$6 [L,QSA]
Não é incomum ter URLs como abaixo
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///
No novo servidor eu configurei o NGINX da seguinte forma: dois sites ativados um arquivo apache do servidor padrão e um arquivo example.com
/etc/nginx/sites-enabled/apache -> ../sites-available/apache
/etc/nginx/sites-enabled/example.com -> ../sites-available/example.com
o apache se parece com isso (IP real substituído 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;
}
}
example.com parece tão
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;
}
}
Depois de fazer qualquer alteração, reiniciei o NGINX via
service nginx restart
Quando eu carregar uma página, por exemplo www.example.com/search/deals/q1/q2////q6/ Eu recebo 'arquivo não encontrado' e, em seguida, olhar para o log do Apache com nível de log definido como 3 eu recebo abaixo:
[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/
Que indica que todas as barras múltiplas foram removidas através do proxy em algum momento. Mas preciso que a URL permaneça intacta, de modo que a regra do Apache possa rotear os parâmetros corretamente.
Analisei outras respostas com títulos semelhantes e nenhuma delas resolveu meu problema, por exemplo: mantenha barras duplas ao trabalhar com passageiros
...
Se alguém tem alguma sugestão ou pode me apontar na direção certa que seria ótimo?
Obrigado antecipadamente
Tags proxy nginx apache-2.4