Замена cookies domain при проксировании nginx
На днях перед моим воспаленным сознанием в полный рост встала проблема, кратко описанная в заголовке. В рассылке nginx встречались похожие вопросы, но ответом была либо тишина, либо предложение использовать perl, чего делать не хотелось-бы. Помощь пришла, откуда не ждали...
Итак, опишу проблему чуть подробнее:
Есть server1, на котором находится sub.domain.ru. Доступа к нему нет, движок менять и информацию переносить не хочется, а имя второго уровня хочется. На server2 добавляем в nginx domain2.ru и проксируем запросы на sub.domain.ru. Почти все работает, только отданные куки не отдаются при запросе domain2.ru, ибо привязаны к .domain.ru...
Несколько дней небольшой коллективный мозг пытался решить проблему силами nginx, пока мой взгляд не упал на документацию старого индейца apache, у которого есть замечательный модуль mod_proxy, в котором есть не менее замечательная директива ProxyPassReverseCookiePath
, предназначенная для замены того самого domain в Cookies.
Конфигурация для nginx:
server { listen 123.45.67.89:80; server_name domain2.ru www.domain2.ru; access_log /var/log/nginx/domain2.access.log; # Нужно для сбора статистики location / { proxy_pass http://backend; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js)$ { proxy_pass http://sub.domain.ru/; proxy_set_header Host sub.domain.ru.ru; expires 1h; } # Сюда сваливается вывод webalizer location /stat/ { root /var/www/domain2.ru; charset utf8; } }
Конфигурация Apache
<VirtualHost 127.0.0.1:8080> ServerAdmin webmaster@localhost ServerName domain2.ru ServerAlias www.domain2.ru ProxyRequests Off ProxyVia Off <Proxy *> Order deny,allow Deny from all Allow from all </Proxy> ProxyPass / http://sub.domain.ru/ ProxyPassReverse / http://sub.domain.ru/ ProxyPassReverseCookieDomain .domain.ru domain2.ru </VirtualHost>
Может решение и не самое удачное, зато оно работает, а я отдыхаю (:
PS Зря все забывают про apache, у старого индейца есть еще порох в пороховницах.
- Блог пользователя NeO
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии