Итак, немного предыстории. Я нахожусь в процессе перемещения веб-сайта со старых серверов с Apache на новые серверы Ubuntu с прокси NGINX на Apache. Будет переходный период, когда кодовая база веб-сайта будет работать как на старых, так и на новых серверах.
На сайте имеются поисковые URL-адреса с фильтрами, которые разделены косой чертой и часто являются необязательными, например:
www.example.com/search/deals/q1/q2/q3/q4/q5/q6/
что соответствует следующему правилу перезаписи apache.conf:
RewriteRule ^/search/deals/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/ /results.php?q1=$1&q2=$2&q3=$3&q4=$4&q5=$5&q6=$6 [L,QSA]
Нередко встречаются URL-адреса, подобные приведенным ниже.
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///
На новом сервере я настроил NGINX следующим образом: на двух сайтах включен файл сервера Apache по умолчанию и файл example.com
/etc/nginx/sites-enabled/apache -> ../sites-available/apache
/etc/nginx/sites-enabled/example.com -> ../sites-available/example.com
Apache выглядит так (реальный IP заменен на 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 выглядит так
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;
}
}
После внесения любых изменений я перезапустил NGINX через
service nginx restart
Когда я загружаю страницу, например www.example.com/search/deals/q1/q2////q6/, я получаю сообщение «Файл не найден». Затем я смотрю на журнал Apache с уровнем журнала 3 и получаю следующее:
[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/
Что указывает на то, что все множественные слеши были удалены через прокси в какой-то момент. Но мне нужно, чтобы URL оставался нетронутым, чтобы правило Apache могло правильно маршрутизировать параметры.
Я просмотрел другие ответы с похожими заголовками, и ни один из них не решает мою проблему, например: при работе с пассажиром используйте двойную косую черту
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
...
Если у кого-то есть предложения или кто-то может указать мне правильное направление, это было бы здорово!
заранее спасибо