Вопрос или проблема
Я использую веб-сайт на IIS и также использую другое программное обеспечение, которое осуществляет потоковую передачу медиа по порту 1935 на том же сервере. Программное обеспечение для потоковой передачи также способно поставлять контент через порт 443. Я назначил ему SSL-сертификат, но оно не может привязаться к порту 443 на IP-адресе, который оно использует, так как этот порт занят IIS.
Я не могу использовать команду ‘netsh’, чтобы явно привязать IP-адрес, который используется веб-сайтом, потому что мне также нужна привязка IP-адреса приложения потоковой передачи в IIS, чтобы контент мог поставляться через порт 80.
Существует ли способ остановить прослушивание IIS порта 443 для определенного IP-адреса, при этом все еще позволяя ему прослушивать порт 80 для того же IP-адреса?
Вы можете настроить это в привязках для вашего сайта:
- Откройте IIS Manager.
- В панели Connections разверните узел Sites в дереве и затем нажмите, чтобы выбрать сайт, для которого вы хотите изменить привязку.
- В панели Actions нажмите Bindings.
- В диалоговом окне Site Bindings выберите привязку к IP-адресу, которую вам нужно освободить, и удалите ее. Или выберите привязку 443 порта с
*
в поле IP-адреса и отредактируйте его, чтобы отключить привязку к IP-адресу, который вы хотите освободить. - После редактирования закройте, нажав Ok
Поскольку я поклонник PowerShell, вот команда PowerShell, которую вы можете использовать, чтобы увидеть, что использует порт 443 в IIS
Get-WebBinding | Where-Object { $_.Port -eq 443 }
Затем вы можете удалить эту привязку или переназначить на другой порт.
Get-WebBinding | Where-Object { $_.Port -eq 443 } | ForEach-Object { Remove-WebBinding -Binding $_ }
Ответ или решение
Когда вы управляете несколькими приложениями на одном IIS-сервере и пытаетесь разделять использование портов, таких как 443 (по умолчанию используемый для SSL), возникает необходимость в конфигурации для предотвращения конфликта ресурсов. В данной задаче мы столкнулись с такой проблемой, когда интернет-сайт используется одним приложением в IIS, а другое приложение для потокового вещания через порт 1935 также нацеленo на порт 443 для доставки контента по протоколу SSL. Но поскольку IIS уже занимает порт 443 для IP-адреса, на котором развернут сайт, второе приложение не может его использовать. Мы рассмотрим, как можно разрешить эту ситуацию на сервере под управлением Windows Server, сохраняя при этом параллельную работу приложений.
Понимание теории
В многозадачных средах сервера, когда несколько приложений делят одни и те же ресурсы, конфликты портов становятся обыденностью. Наиболее распространенной причиной такого конфликта является тот факт, что IIS по умолчанию автоматически использует порт 443 на всех IP-адресах, связанных с сервером, для HTTPS-трафика. Для того, чтобы предоставить возможность другому приложению использовать тот же порт на другом IP-адресе, необходимо изменить конфигурацию IIS, чтобы он слушал запросы только на конкретных IP-адресах или соединениях, освобождая нужный нам IP для потоковых приложений.
Практический пример
Расмотрим процедуру изменения привязок в IIS для освобождения IP-адреса на порту 443:
-
Открытие IIS Manager: Запустите "IIS Manager" на вашем сервере.
-
Выбор сайта в панели "Connections": Расширьте узел "Sites" и выберите ваш сайт.
-
Редактирование привязок: В правой панели под "Actions" нажмите на "Bindings".
-
Удаление или редактирование привязки: В диалоговом окне "Site Bindings" найдите привязку, связанную с портом 443 и IP-адресом, который вы хотите освободить. Если привязка была настроена на использование всех IP (запись с "*"), ее можно отредактировать для использования конкретного IP-адреса, что позволит освободить остальные IP.
-
Подтверждение: Нажмите "Ok", чтобы сохранить изменения.
Применение и дополнительные возможности
После того как мы освободили порт 443 для нужного IP-адреса на IIS, можем теперь назначить сертификат и настроить потоковое приложение на использование его. Это позволит вам обрабатывать SSL-трафик отдельных приложений независимо, минимизируя конфликты.
Если вы предпочитаете автоматизировать процессы с помощью PowerShell, управлять привязками также возможно с использованием соответствующих командлетов:
# Получение списка всех привязок с использованием порта 443
Get-WebBinding | Where-Object { $_.Port -eq 443 }
# Удаление определенной привязки для освобождения порта
Get-WebBinding | Where-Object { $_.Port -eq 443 } | ForEach-Object { Remove-WebBinding -Binding $_ }
Эти команды позволяют вам просмотреть текущие привязки, а затем выбрать и удалить необходимые из них. Это даёт возможность эффективно управлять сервером для администраторов, предпочитающих командную строку.
Заключение
Работа с сервером IIS требует четкого понимания его структуры и возможностей конфигурации. В данном сценарии мы обсудили, как можно настроить IIS для корректной работы с несколькими приложениями, используя различные привязки IP/портов. Подобный подход помогает снизить количество проблем, связанных с доступом приложений к одним и тем же системным ресурсам, и обеспечивает более стабильное и безопасное окружение для всех сервисов.