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

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

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

  1. Логи Nginx: Проверьте логи ошибок и доступа Nginx для выявления проблем с проксированием и аутентификацией. Используйте команду:

    tail -f /var/log/nginx/error.log
  2. Отладка: Включите более подробный уровень логирования, добавив следующие строки в конфигурацию:

    error_log /var/log/nginx/error.log debug;
  3. Тестирование: После внесения изменений перезапустите Nginx:

    sudo systemctl restart nginx

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

  • Убедитесь, что все ваши клиенты Outlook обновлены до последней версии.
  • Проверьте, нет ли ограничений на стороне Exchange Server, которые могут повлиять на сессию аутентификации.
  • Рассмотрите возможность использования внешних инструментов для мониторинга и диагностики, например, Fiddler или Wireshark, чтобы отследить сетевой трафик между клиентами и сервером.

Заключение

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

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

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