Как правильно настроить открытый Nginx в качестве прокси для Exchange 2019?

Вопрос или проблема

У меня есть прокси-сервер 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 с учетом предоставленной информации и специфики проекта.

Анализ текущей конфигурации

Ваша текущая конфигурация выглядит адекватной на первый взгляд, но есть несколько моментов, которые требуют корректировки:

  1. Параметры SSL: Включение ssl-трафика требует корректной настройки HTTPS, включая сертификаты. Если вы хотите, чтобы ваш Nginx правильно проксировал запросы к Exchange, необходимо убрать строки с комментированием под listen 80 и listen 443, и активировать SSL.

  2. Проблема с методами аутентификации: Поскольку Outlook Desktop и OWA зависят от различных заголовков и методов аутентификации, важно корректно проксировать заголовки Authorization.

  3. Маршрутизация запросов: Убедитесь, что запросы к 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;
}

Объяснение изменений

  1. SSL Настройка: Теперь мы не оставили ssl-комментарии. Это обеспечит корректный SSL-пасстур через Nginx.

  2. Ключевые заголовки: Мы строгим образом проксируем заголовок Authorization, который необходим для аутентификации к Exchange.

  3. Тайм-ауты: Увеличение тайм-аутов до 600 секунд обеспечит стабильное соединение, особенно важное для потоковых запросов от Outlook.

Дополнительные рекомендации

  • Проверьте наличие шифров TLS в конфигурации Nginx, чтобы убедиться, что они совместимы с требованиями Exchange.
  • Постоянно следите за логами Nginx и Exchange для выявления потенциальных проблем. Логи могут предоставить ценную информацию о том, какие запросы проходят нормально, а какие — нет.
  • Убедитесь, что ваши DNS-записи корректно настроены и что ваш Nginx может достать Exchange по указанным IP-адресам.

Заключительные мысли

Следуя вышеуказанным рекомендациям и внося корректировки в конфигурацию Nginx, вы сможете обеспечить правильную прокси-обработку запросов к Exchange 2019. Обязательно тестируйте соединения после внесения изменений, чтобы убедиться в их успешном функционировании.

Оцените материал
Добавить комментарий

Капча загружается...