Reverse Proxy для Lync 2013 / SfB на Nginx 1.8
Ранее я уже писал, как можно создать Lync Reverse Proxy с помощью Apache. Сегодня мы рассмотрим более интересный и, вероятно, правильный вариант. Нам для этого потребуется сервер или ВМ с ОС Linux Centos 6.7 (можно другой дистрибутив, но настройки могут незначительно отличаться) с двумя сетевыми интерфейсами - внешним и внутренним.
Итак, приступим.
1. Добавим репозирорий Nginx:
# yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
2. Выполним установку Nginx:
# yum install nginx
3. Удалим дефолтные конфиги:
# rm -f cd /etc/nginx/conf.d/*
4. Создадим новый конфиг:
# vim /etc/nginx/conf.d/lync.conf
### Задаем внутренние имена для серверов
# Lyncdiscover
upstream lyncdiscover_backend {
server lyncdiscoverinternal.lin.local:8080;
keepalive 180;
}
# Lync Frontend Pool
upstream lync_backend {
server lync-frontend.lin.local:4443;
keepalive 180;
}
# Office Web Apps
upstream wac_backend {
server WAC.lin.local:443;
keepalive 180;
}
# Lync Frontend Pool Proxy
server {
# Внешний IP и порт, которые слушаем
listen 104.40.211.35:443;
# Имена, которые слушаем
server_name meet.lin.by dialin.lin.by lync.lin.by;
ssl on;
# Запрещаем использование устаревших протоколов
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_session_cache shared:SSL:10m;
ssl_prefer_server_ciphers on;
# Указываем путь к сертификату и ключу
ssl_certificate /etc/httpd/ssl/cert.crt;
ssl_certificate_key /etc/httpd/ssl/private.key;
# Лог
error_log /var/log/lync_revprx_error_log warn;
# Рутовая папка сайта (надо создать)
root /var/www/webext.atservers.net;
# Настройки проксирования
location / {
# Версия прокси 1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_read_timeout 3600;
proxy_read_timeout 3600;
# Настройки буферов
proxy_buffering on;
proxy_buffers 128 4k;
# Настройка заголовков
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_pass https://lync_backend;
proxy_redirect default;
}
}
# Lyncdiscover Proxy
server {
listen 104.40.211.35:80;
# Проксировать все подключения для 80 порта
server_name "";
location / {
root /var/www/webext.atservers.net;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://lyncdiscover_backend;
}
}
# Office Web Apps Proxy
server {
listen 104.40.211.35:443;
server_name webapp.lin.by;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_session_cache shared:SSL:10m;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/httpd/ssl/cert.crt;
ssl_certificate_key /etc/httpd/ssl/private.key;
error_log /var/log/lync_revprx_error_log warn;
root /var/www/webext.atservers.net;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering on;
proxy_buffers 128 4k;
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_pass https://wac_backend;
proxy_redirect default;
}
}
Чтобы завершить редактирование в vim необходимо нажать ESC, затем :wq
5. Создадим корневую папку для сайта:
# mkdir /var/www/webext.atservers.net
6. Положить сертификат и ключ (например, с помощью cpssh или ftp):
/etc/httpd/ssl/cert.crt
/etc/httpd/ssl/private.key
Можно так же создать файлы с помощью vim и через буфер обмена добавить в них данные их сертификата и ключа, как мы создавали конфиг в п.4
7. Установить права на файл ключа:
# chmod 600 /etc/httpd/ssl/private.key
8. Добавить в файл /etc/hosts записи:
# vim /etc/hosts
10.1.0.100 lyncdiscoverinternal.lin.local lync-frontend.lin.local
10.1.0.101 wac.lin.local
10.1.0.100 и 10.1.0.101 - локальные IP серверов Frontend и WAC
9. Перезапускаем nginx:
# /etc/init.d/nginx restart
10. Проверяем подключение. Если все настроено корректно, Lync клиент подключится.
Вот и все, данные настройки можно выполнить минут за 15. Если что-то не получается, напишите вопрос в комментариях - попробую помочь.
Все работает. Жаль только у меня купленный и установленный Lync в организации так и не решились ввести в эксплуатацию по полной. стоит себе и мы им пользуемся для нужд техотдела когда надо что то показать или поремонтировать на производствах ))
ОтветитьУдалитьАртем, спасибо за статью.
ОтветитьУдалитьНе удавалось настроить reverse proxy - ios упорно не дружил.
Через nginx взлетел моментально. Дополнительно пришлось отключить SELinux:
vim /etc/selinux/config
SELINUX=disabled
Применил Вашу конфигурацию, для своей организации, nginx поднялся без проблем, и все вроде бы работает, но при попытке проти тест на lync connectivity analyzer выдается ошибка
ОтветитьУдалитьThe credentials were not authorized by the server. Please verify your login credentials and try again.
Не знаю куда копать и что делать, подскажите пожалуйста.
А вы отключили selinux (как в посте выше)? И после этого надо выполнить рестарт машины.
УдалитьУ меня не получилось с nginx и конфигурацией выше.
УдалитьАвторизация на WebTicket не работает - 401я ошибка. Пришлось сделать на haproxy - тогда все заработало.
В логах nginx при попытке входа через мобильное приложение:
[18/Nov/2020:12:34:23 +0300] "GET /?sipuri=sip:user1@company.com HTTP/1.1" 200 1090 "-" "AndroidLync"
[18/Nov/2020:12:34:24 +0300] "GET /Autodiscover/AutodiscoverService.svc/root/user?originalDomain=company.com HTTP/1.1" 401 1293 "-" "AndroidLync"
[18/Nov/2020:12:34:25 +0300] "POST /WebTicket/WebTicketService.svc/mex HTTP/1.1" 200 19461 "-" "AndroidLync"
[18/Nov/2020:12:34:26 +0300] "POST /WebTicket/WebTicketService.svc HTTP/1.1" 401 1293 "-" "AndroidLync"
[18/Nov/2020:12:34:26 +0300] "POST /WebTicket/WebTicketService.svc HTTP/1.1" 401 1293 "-" "AndroidLync"
[18/Nov/2020:12:34:26 +0300] "POST /WebTicket/WebTicketService.svc HTTP/1.1" 401 1293 "-" "AndroidLync"
Возможно, с приложением что-то не так.
Чтобы решить такую проблему использовал модуль - https://github.com/gabihodoroaga/nginx-ntlm-module
Удалить