Добрый день.
Возникла необходимость сделать следующее: есть два сайта site.ru, service.ru, оба на одном сервере). нужно сделать редирект (без изменения url в браузере) такого вида:
site.ru/param1/value1/param2/value2... -> service.ru/site?url=param1/value1/param2/value2&site_id=1
На apache это решается довольно просто (.htaccess для site.ru):
RewriteRule ^(.*)$ http://service.ru/site?url=$1&site_id=1 [P]
# И для статики
RewriteRule ^img/(.*\.(eot|font.css|otf|ttc|ttf|woff|js|png|jpg|jpeg|gif))$ http://service.ru/static/1/img/$1 [P]
Но проблема в том, что service.ru и остальные сайты крутятся на nginx, настроенным на 80 порт.
Директива rewrite, как я понял, работает только с изменением url. С проксированием толком не смог разобраться.
Развернуть apache как фронтенд для nginx'a (как бы страшно это не звучало), как я понимаю возможно только на 8080, или какой-нибудь другой, не 80 порт. Поскольку на 80 уже nginx и убрать его оттуда нет возможности... только если переводить на apache все остальные сайты, чего бы хотелось избежать...
UPD Убив пол дня, получилось только довольно костыльное решение:
site.ru:80 (Nginx)server {
listen 80;
server_name site.ru www.site.ru;
access_log /var/log/nginx/test1.access.log;
error_log /var/log/nginx/test1.error.log;
location / {
proxy_pass http://site.ru:8080;
}
}
site.ru:8080 (Apache)AddDefaultCharset utf-8
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ http://service.ru/site?url=$1&site_id=1 [P]
# И для статики
RewriteRule ^img/(.*\.(eot|font.css|otf|ttc|ttf|woff|js|png|jpg|jpeg|gif))$ http://service.ru/static/1/img/$1 [P]
То есть следующая цепочка: site.ru (nginx) -> site.ru:8080 (apache) -> service.ru (nginx).
Вроде работает, но боюсь представить, как это скажется на производительности :)