Вопрос или проблема
У меня есть прокси-сервер Nginx (с модулем headers-more-nginx), который передает запросы на сервер Exchange 2019. В настоящее время ни Outlook OWA, ни Outlook Desktop 2016 не работают, он зависает при попытке подключиться к почтовому серверу через этот прокси. В случае OWA подключение истекает по времени. Но по какой-то причине последний Outlook из Microsoft Store работает с ним без проблем. Автонастройка работает нормально, и Outlook не сообщает о каких-либо проблемах, кроме подключения к этому серверу, но интернет-соединение достаточно хорошее, так что это не должно быть проблемой.
Кроме того, если это Netscaler вместо Nginx, все работает нормально, так что я предполагаю, что Nginx неправильно настроен, но в данный момент я не могу получить доступ к конфигурации Netscaler.
Как мне изменить конфигурацию Nginx, чтобы она работала правильно?
Текущая конфигурация nginx:
stream { # поток для включения ssl passthrough, попытался использовать обычный http с ssl тоже
server {
listen 80;
listen 443; # снова, без ssl для разрешения passthrough
#http2 on;
server_name mail.mydomain.com;
#ssl_certificate /etc/ssl/certs/mydomain.crt;
#ssl_certificate_key /etc/ssl/certs/mydomain.key;
#ssl_trusted_certificate /etc/ssl/certs/mydomain.crt;
#ssl_session_timeout 5m;
#add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;" всегда;
location / {
proxy_pass_request_headers on;
keepalive_timeout 3h;
tcp_nodelay on;
client_max_body_size 3G;
#proxy_buffering off; # попробовал и включить, и отключить
#proxy_request_buffering off;
proxy_read_timeout 3600;
proxy_pass_header Date;
proxy_pass_header Server;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_set_header Connection "Keep-Alive";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
more_set_input_headers 'Authorization: $http_authorization';
# Я пробовал использовать домен Nginx, а также домен сервера Exchange, без успеха
more_set_headers -s 401 'WWW-Authenticate: Basic realm="mail.mydomain.com"';
proxy_pass https://exchange$request_url;
}
}
}
upstream exchange {
ip_hash;
server exchangeip1:443;
server exchangeip2:443;
}
Ответ или решение
Для правильной настройки open source Nginx в качестве прокси-сервера для Microsoft Exchange 2019 необходимо учесть несколько критических аспектов, чтобы обеспечить корректное функционирование веб-интерфейса Outlook Web App (OWA) и настольного клиента Outlook 2016. Рассмотрим, какие изменения необходимо внести в текущую конфигурацию Nginx с учетом предоставленной информации и специфики проекта.
Анализ текущей конфигурации
Ваша текущая конфигурация выглядит адекватной на первый взгляд, но есть несколько моментов, которые требуют корректировки:
-
Параметры SSL: Включение ssl-трафика требует корректной настройки HTTPS, включая сертификаты. Если вы хотите, чтобы ваш Nginx правильно проксировал запросы к Exchange, необходимо убрать строки с комментированием под
listen 80
иlisten 443
, и активировать SSL. -
Проблема с методами аутентификации: Поскольку Outlook Desktop и OWA зависят от различных заголовков и методов аутентификации, важно корректно проксировать заголовки
Authorization
. -
Маршрутизация запросов: Убедитесь, что запросы к Exchange обрабатываются корректно, учитывая, что через Netscaler это работало.
Рекомендованная конфигурация Nginx
Вот как могла бы выглядеть улучшенная конфигурация:
stream {
server {
listen 80;
listen 443 ssl;
server_name mail.mydomain.com;
ssl_certificate /etc/ssl/certs/mydomain.crt;
ssl_certificate_key /etc/ssl/certs/mydomain.key;
location / {
proxy_pass https://exchange;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "Keep-Alive";
proxy_http_version 1.1;
# Важно! Убедитесь, что вы проксируете заголовок авторизации
proxy_set_header Authorization $http_authorization;
more_set_input_headers 'Authorization: $http_authorization';
# Тайм-ауты
proxy_read_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
}
}
}
upstream exchange {
ip_hash;
server exchangeip1:443;
server exchangeip2:443;
}
Объяснение изменений
-
SSL Настройка: Теперь мы не оставили ssl-комментарии. Это обеспечит корректный SSL-пасстур через Nginx.
-
Ключевые заголовки: Мы строгим образом проксируем заголовок
Authorization
, который необходим для аутентификации к Exchange. -
Тайм-ауты: Увеличение тайм-аутов до 600 секунд обеспечит стабильное соединение, особенно важное для потоковых запросов от Outlook.
Дополнительные рекомендации
- Проверьте наличие шифров TLS в конфигурации Nginx, чтобы убедиться, что они совместимы с требованиями Exchange.
- Постоянно следите за логами Nginx и Exchange для выявления потенциальных проблем. Логи могут предоставить ценную информацию о том, какие запросы проходят нормально, а какие — нет.
- Убедитесь, что ваши DNS-записи корректно настроены и что ваш Nginx может достать Exchange по указанным IP-адресам.
Заключительные мысли
Следуя вышеуказанным рекомендациям и внося корректировки в конфигурацию Nginx, вы сможете обеспечить правильную прокси-обработку запросов к Exchange 2019. Обязательно тестируйте соединения после внесения изменений, чтобы убедиться в их успешном функционировании.