nginx+exchange

Igor Sysoev is at rambler-co.ru
Thu Jul 9 11:18:58 MSD 2009


On Wed, Jul 08, 2009 at 05:59:14PM -0500, Igor Muratov wrote:

> Народ, у кого-нибудь есть успешный опыт проксирования Exchange через 
> nginx? Есть задача прикрыть почтовый сервер ексчейндж, который стоит в 
> локальной сети, с помощью nginx. С протоколами POP3/IMAP/SMTP вроде 
> разобрался, а вот OWA через https ну никак не хочет работать. Аутлук 
> спрашивает логин/пароль, висит и потом отваливается. В логах получаю
> 
> 10.16.18.16 - - [08/Jul/2009:17:41:07 -0500] "-" 400 0 "-" "-"
> 
> Настраивал вот по этому документу: http://planetit.ws/pdf/article-22.pdf
> Пробовал еще просто браузером пройти. Там же веб-морда имеется. Бейсик 
> авторизация запрашивается дважды. Первая непонятно откуда берется 
> поскольку в конфиге ничего я не прописывал. Что бы ни вводил - не 
> пропускает. Тогда просто жму отмену и попадаю на вторую авторизацию. Вот 
> она уже пропускает на веб-морду эксчейнджа если правильно ввести логин и 
> пароль.
> Забавно, но этот эффект зависит от браузера. Он проявляется в IE и FF но 
> отсутствует в Опере.
> 
> Посмотрите пожалуйста, может у кого есть какие-то идеи на этот счет
> 
> http {
>    server {
>        listen              443;
>        server_name         nginx.example.org
> 
>        # Redirect from / to /exchange by default
>        rewrite             ^/$ https://nginx.example.org/exchange 
> permanent;
> 
>        # Enable SSL
>        ssl                 on;
>        ssl_certificate     /etc/nginx/ssl/nginx.example.org.pem;
>        ssl_certificate_key /etc/nginx/ssl/nginx.example.org.pem;
> #        ssl_client_certificate  /etc/nginx/ssl/example_CA.pem;
> #        ssl_verify_client   on;
>        ssl_session_timeout 5m;
> 
>        # Set global proxy settings
>        proxy_read_timeout  360;
> 
>        proxy_pass_header   Date;
>        proxy_set_header    Server internal.exchange.name;
>        proxy_set_header    Host $host;
>        proxy_set_header    X-Real-IP $remote_addr;
>        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
>        location /exchange {
>            proxy_pass https://192.168.1.201/exchange;
>        }
>        location /exchweb {
>            proxy_pass https://192.168.1.201/exchweb;
>        }
>        location /public {
>            proxy_pass https://192.168.1.201/public;
>        }
>        location /Microsoft-Server-ActiveSync {
>            proxy_pass https://192.168.1.201/Microsoft-Server-ActiveSync;
>        }
> 
>        error_log  /var/log/nginx/exchange-error.log;
>        access_log  /var/log/nginx/exchange-access.log;
>    }
> }
> 
> Спасибо за любые подсказки.

Вместо

        # Redirect from / to /exchange by default
        rewrite     ^/$ https://nginx.example.org/exchange permanent;

нужно

        location = / {
             rewrite  ^ https://nginx.example.org/exchange permanent;
        }

Вместо

        location /exchange {
            proxy_pass https://192.168.1.201/exchange;
        }

и подобных достаточно

        location /exchange {
            proxy_pass https://192.168.1.201;
        }

Но проблема не в этом. Нужно поставить
error_log  /path/to/log  info;
и посмотреть, что пишется для ответа 400.

Возможно, вместо

        proxy_set_header    Server internal.exchange.name;
        proxy_set_header    Host $host;

нужно

        proxy_set_header    Host internal.exchange.name;

и во все проксированные location'ы, возможно, нужно добавить

        proxy_redirect  https://internal.exchange.name/  /;


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list