Вопрос или проблема
У меня есть прокси-сервер Nginx с модулем headers-more-nginx, который передает запросы на Exchange Server 2019. В настоящее время Outlook 2019 застревает в цикле, запрашивая учетные данные каждый раз, когда я пытаюсь подключиться к своему серверу – он запрашивает пароль, принимает его и запрашивает снова. Эта проблема повторяется на других устройствах.
Последний Outlook из Microsoft Store работает нормально.
Кроме того, если вместо Nginx используется Netscaler, все работает нормально, так что я предполагаю, что Nginx неправильно настроен, но сейчас я не могу получить доступ к конфигурации Netscaler.
Как мне изменить конфигурацию Nginx, чтобы она работала правильно?
Текущая конфигурация nginx:
http {
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;
ssl_trusted_certificate /etc/ssl/certs/mydomain.crt;
ssl_session_timeout 5m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;" always;
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_uri;
}
}
}
upstream exchange {
ip_hash;
server exchangeip1:443;
server exchangeip2:443;
}
Ответ или решение
Конфигурация Nginx в качестве прокси-сервера для Exchange Server 2019 может быть сложной задачей, особенно когда возникают проблемы с аутентификацией, такие как зацикливание запроса пароля в Outlook 2019. Ниже приведены рекомендации по устранению этой проблемы и корректировке конфигурации Nginx для обеспечения правильной работы с Exchange Server.
1. Анализ текущей конфигурации
Ваш текущий конфигурационный файл Nginx выглядит следующим образом:
http {
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;
ssl_trusted_certificate /etc/ssl/certs/mydomain.crt;
ssl_session_timeout 5m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;" always;
location / {
...
proxy_pass https://exchange$request_uri;
}
}
}
upstream exchange {
ip_hash;
server exchangeip1:443;
server exchangeip2:443;
}
Несмотря на то, что конфигурация выглядит в целом корректной, есть несколько аспектов, которые могут вызвать проблемы с аутентификацией.
2. Рекомендации по обновлению конфигурации
2.1. Параметры аутентификации
Измените настройки заголовков, касающихся аутентификации, чтобы они не вызывали конфликтов. Попробуйте удалить или закомментировать строки, связанные с заголовками авторизации, так как Exchange может неправильно обрабатывать их двойную установку. Измените блок location
следующим образом:
location / {
proxy_pass https://exchange$request_uri;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_read_timeout 3600;
proxy_pass_header Date;
proxy_pass_header Server;
# Убедитесь, что следующие строки либо отклонены, либо настроены корректно
# more_set_input_headers 'Authorization: $http_authorization';
# more_set_headers -s 401 'WWW-Authenticate: Basic realm="mail.mydomain.com"';
}
2.2. SSL и HTTP/2
Убедитесь, что SSL настроен правильно и используется протокол HTTP/2, если это возможно. Добавьте возможность использования HTTP/2 в строки слушания. Пример:
listen 443 ssl http2;
2.3. Проверка совместимости
Убедитесь, что на стороне Exchange сервера также правильно настроена аутентификация и необходимые протоколы. Для поддержки Outlook 2019, используйте аутентификацию NTLM или Kerberos, если это возможно. Это может вызвать меньше проблем с аутентификацией по сравнению с базовой аутентификацией.
3. Проверка конфигурации и отладка
-
Логи Nginx: Проверьте логи ошибок и доступа Nginx для выявления проблем с проксированием и аутентификацией. Используйте команду:
tail -f /var/log/nginx/error.log
-
Отладка: Включите более подробный уровень логирования, добавив следующие строки в конфигурацию:
error_log /var/log/nginx/error.log debug;
-
Тестирование: После внесения изменений перезапустите Nginx:
sudo systemctl restart nginx
4. Дополнительные рекомендации
- Убедитесь, что все ваши клиенты Outlook обновлены до последней версии.
- Проверьте, нет ли ограничений на стороне Exchange Server, которые могут повлиять на сессию аутентификации.
- Рассмотрите возможность использования внешних инструментов для мониторинга и диагностики, например, Fiddler или Wireshark, чтобы отследить сетевой трафик между клиентами и сервером.
Заключение
Корректная настройка Nginx в качестве прокси-сервера для Exchange Server 2019 требует тщательного подхода к конфигурации заголовков и аутентификации. Следуя приведенным рекомендациям и обновляя конфигурацию по мере необходимости, вы сможете устранить проблемы с аутентификацией и обеспечить стабильную работу Outlook с вашим сервером.