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