Mantenha várias barras e todas as barras de treling ao usar o proxinx nginx para o apache

1

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

link

link

link

link

...

Se alguém tem alguma sugestão ou pode me apontar na direção certa que seria ótimo?

Obrigado antecipadamente

    
por mrjamesmyers 08.10.2015 / 00:07

0 respostas