Назад | Перейти на главную страницу

Как изменить прокси-сервер поддомена на другой компьютер в моей локальной сети под OS X Server?

Визуализируйте этот результат:

  1. site1.example.com -> мой единственный общедоступный IP -> перенаправление портов 80 и 443 в LAN 192.168.1.10 Mac работает Сервер OS X 4.1 в OS X 10.10 Yosemite
  2. site2.example.com -> мой единственный общедоступный IP -> LAN 192.168.1.10 -> обратный прокси? ->: 80 и: 443 в локальной сети 192.168.1.15

Это в сети, где у меня нет возможности добавить еще один общедоступный IP-адрес.

# 1 уже работает нормально.

# 2 это сложная часть, в основном потому, что я бегу Сервер OS X на № 1, и настройка прокси не кажется относительно простой Apache one, например:

<VirtualHost *:80 *:443>
     ServerName site2.example.com

     ProxyRequests off
     ProxyPass / http://192.168.1.15/
     ProxyPassReverse / http://192.168.1.15/
</VirtualHost>

То есть OS X Server имеет файлы конфигурации Apache в странных местах, и я понимаю, что ему нравится перезаписывать их новыми изменениями, внесенными в графический интерфейс, поэтому я пытаюсь найти «правильный» способ сделать это на Сервер OS X.

Мой друг предположил, что есть способ сделать это с помощью OS X Server webappctl команду и написание соответствующего webapp.plistхотя Работа с веб-приложениями раздел документации OS X Server почти не содержит подробностей. Глядя на man страниц, которые предлагает Apple, и их пример файла .plist, мне кажется, что их идея «веб-приложения» действительно хочет быть прикрепленным к каталогу (например, site1.example.com/webapp), а не как субдомен (как в # 2, выше). Может, я просто еще не разобрался с форматированием .plist?

Каков «правильный» способ сделать это на OS X Server?

Первоначально этот вопрос был задан о Mac OS X Server 4.1, но поскольку номера версий программного обеспечения изменились, и я только что получил эту работу, этот ответ написан для macOS Server 5.2. Сервер 5, по-видимому, немного меняет каждый служба на сервере теперь находится за одним главным обратным прокси, поэтому эти инструкции не будут работать с сервером 4.1.

Файлы конфигурации

Создайте файл конфигурации веб-приложения на компьютере с macOS Server в /Library/Server/Web/Config/apache2/httpd_site2webapp.conf, указывая на IP-адрес site2 сервер.

ProxyPreserveHost On
ProxyPassReverse / http://192.168.1.15:80/
ProxyPass / http://192.168.1.15:80/
ServerName site2.example.com

Затем в /Library/Server/Web/Config/apache2/webapps/com.example.site2webapp.plistдобавьте следующее, указав расположение .conf файл выше:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist -->

<plist version="1.0">
    <dict>
        <key>includeFiles</key>
            <array> <!-- Include files are activated in virtual host when webapp is started -->
                <string>/Library/Server/Web/Config/apache2/httpd_site2webapp.conf</string>
            </array>
        <key>name</key>
            <string>com.example.site2webapp</string>
        <key>displayName</key> <!-- Name shown in Server app -->
            <string>site2WebApp</string>
        <key>installationIndicatorFilePath</key> <!-- The presence of this file indicates web app is installed -->
            <string>/Library/Server/Web/Config/apache2/httpd_site2webapp.conf</string>
        <key>sslPolicy</key><!-- Determines webapp SSL behavior -->
            <integer>0</integer> <!-- 0: default, UseSSLWhenEnabled -->
                                 <!-- 1: UseSSLAlways -->
                                 <!-- 2: UseSSLOnlyWhenCertificateIsTrustable -->
                                 <!-- 3: UseSSLNever -->
                                 <!-- 4: UseSSLAndNonSSL -->
    </dict>
</plist>

Если вам также нужен SSL, также укажите следующее в /Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf. Конфигурация отличается тем, что трафик LAN между серверами по умолчанию не будет зашифрован (эта конфигурация по существу указывает серверу не проверять наличие действительного сертификата), но трафик WAN будет зашифрован. Я считаю, что вы можете установить самозаверяющий сертификат на site2 server для зашифрованного локального трафика, но эта конфигурация по-прежнему будет включать обратный прокси без необходимости иметь соответствующие сертификаты. (Я допускаю, что, вероятно, есть более правильный способ защитить локальный трафик, но у меня это сработало.)

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPreserveHost On
ProxyPassReverse / http://192.168.1.15:80/
ProxyPass / http://192.168.1.15:80/
ServerName site2.example.com

И соответствующий список веб-приложений SSL, /Library/Server/Web/Config/apache2/webapps/com.example.site2SSLwebapp.plist, почти то же, что и выше:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist -->

<plist version="1.0">
    <dict>
        <key>includeFiles</key>
            <array> <!-- Include files are activated in virtual host when webapp is started -->
                <string>/Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf</string>
            </array>
        <key>name</key>
            <string>com.example.site2SSLwebapp</string>
        <key>displayName</key> <!-- Name shown in Server app -->
            <string>site2SSLWebApp</string>
        <key>installationIndicatorFilePath</key> <!-- The presence of this file indicates web app is installed -->
            <string>/Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf</string>
        <key>sslPolicy</key><!-- Determines webapp SSL behavior -->
            <integer>0</integer> <!-- 0: default, UseSSLWhenEnabled -->
                                 <!-- 1: UseSSLAlways -->
                                 <!-- 2: UseSSLOnlyWhenCertificateIsTrustable -->
                                 <!-- 3: UseSSLNever -->
                                 <!-- 4: UseSSLAndNonSSL -->
    </dict>
</plist>

Для каждого из этих четырех файлов требуются разрешения владельца: root и group: wheel, 644:

$ sudo chown -R root:wheel /path/to/file
$ sudo chmod -R 644 /path/to/file

Настройка Server.app

Добавить веб-приложение на веб-сайты

  • в Сайты на вкладке интерфейса Server.app щелкните значок + под списком веб-сайтов, чтобы добавить новый сайт
  • Войти site2.example.com для доменного имени
  • Оставьте все остальное по умолчанию
  • Нажмите Изменить дополнительные настройки…
  • В разделе «Сделать эти веб-приложения доступными на этом веб-сайте» установите флажок «Включить» для site2WebApp
  • Нажмите хорошо
  • Нажмите Создайте

SSL

Если вам нужен SSL в WAN, установите сертификат на сервере, который охватывает новый домен. я использовал Давайте зашифровать для создания единого сертификата, подходящего как для моих site1 и site2 домены.

  • в Сертификаты на вкладке Server.app щелкните значок + внизу окна, затем Импортировать удостоверение сертификата…
  • Перетащите .pem файлы, которые вы получили от Let's Encrypt (или любые другие файлы сертификатов, которые у вас есть), и нажмите Импортировать
  • в Сайты на вкладке создайте новый сайт почти так же, как и раньше, за исключением изменения порта на 443 и в разделе SSL-сертификат выберите сертификат, который вы только что импортировали.
  • Под Изменить дополнительные настройки…вместо этого установите флажок Включить для site2SSLWebApp

Мой ответ выше адаптирован из инструкций, найденных на https://www.precursor.ca/precursor/resources/rais/landing/ReverseProxyTutorial.html. Предупреждение: по этой ссылке загружается zip-файл с PDF-файлом и образцами файлов конфигурации веб-приложения Server. В их zip-архиве также содержатся исторические инструкции по выполнению этого с помощью Server 4.1.

Я думаю, ваш друг может что-то понять с webappctl дорожка. Но начнем с Apache: при использовании OS X Server Apache извлекает свою конфигурацию из /Library/Server/Web/Config/apache2. Этот каталог содержит файл ReadMe.txt, в котором частично говорится:

места/

Этот каталог содержит файл для каждого включенного виртуального хоста, настроенного для службы веб-сайтов серверным приложением. Его содержимое читается Apache благодаря нескольким директивам «Include» в httpd_server_app.conf.

...

Эти файлы изменяются резидентной частью серверного приложения и webappctl (8). Администраторы могут вносить изменения непосредственно в этот файл и в пользовательские файлы виртуального хоста, но настоятельно рекомендуется, чтобы администратор помещал изменения в отдельные файлы «Включить» и использовал механизм webapp.plist (8) вместе с командой webappctl (8) - Line инструмент для управления ими. См. Инструкции по редактированию вверху этих файлов.

ОК, кажется разумным. Заглянув внутрь этого каталога конфигурации Apache, можно найти sites подкаталог, а также webapps. Последний содержит несколько списков, описывающих веб-службы OS X Server, плюс один с именем com.example.mywebapp.plist. Вверху этого файла есть несколько интересных моментов:

  • В includeFiles key, который выглядит как массив путей для настраиваемого включения .conf файлы, которые хочет веб-приложение
  • В proxies ключ, который соответствует Apache ProxyPass/ProxyPassReverse директивы для другого приложения

Хотя я сам это не тестировал, я мог бы предложить попробовать самостоятельно добавить plist в этот каталог, используя ту же схему именования обратного DNS: скопировать com.example.mywebapp.plist к com.example.site2.plist. Когда у вас есть собственная копия, вы можете вырезать большую часть ненужных битов, а затем настроить proxies значение, чтобы ссылаться на ваш собственный URL, а не на пример пути, который у них есть.

Если это не сработает, вы можете применить молоток немного большего размера и создать включаемый .conf файл, в котором есть ваши простые директивы Apache из вопроса в нем, поместив его в каталог конфигурации Apache сервера. Как только это будет сделано, отбросьте proxies ключ из вашего списка веб-приложений и вместо этого используйте includeFiles ключ, чтобы втянуть это .conf файл.

В любом случае, как только будет создан список веб-приложений, используйте webappctl (как root), чтобы запустить вновь созданное приложение:

$ sudo webappctl start com.example.site2

Это должно быть либо успешным (возврат кода выхода 0), либо, надеюсь, ошибкой с некоторой информацией, с которой вы можете уточнить список веб-приложений. (Опять же, все это непроверено, и это всего лишь отправная точка.)

Если вы все же закончите использовать включенный пользовательский .conf файл, на который вы ссылаетесь из списка веб-приложений, также неплохо сохранить где-нибудь резервную копию этого файла, чтобы будущие обновления OS X или Server.app не стирали его. Пока серверный Apache ReadMe.txt прямо не говорит, что они воля стирать пользовательские конфигурации, это не говорит о том, что они не будет, либо. Береженого Бог бережет.

Удачи!