@Nodlik

Как сделать редирект на Nginx без смены url в браузере?

Добрый день.

Возникла необходимость сделать следующее: есть два сайта 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).
Вроде работает, но боюсь представить, как это скажется на производительности :)
  • Вопрос задан
  • 4150 просмотров
Пригласить эксперта
Ответы на вопрос 1
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
proxy_pass http://service.ru;
proxy_set_header Host service.ru;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы