Пропустить навигацию.
Главная

Замена 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, у старого индейца есть еще порох в пороховницах.