Визуализируйте этот результат:
site1.example.com
-> мой единственный общедоступный IP -> перенаправление портов 80 и 443 в LAN 192.168.1.10
Mac работает Сервер OS X 4.1 в OS X 10.10 Yosemitesite2.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
site2.example.com
для доменного имениЕсли вам нужен SSL в WAN, установите сертификат на сервере, который охватывает новый домен. я использовал Давайте зашифровать для создания единого сертификата, подходящего как для моих site1
и site2
домены.
.pem
файлы, которые вы получили от Let's Encrypt (или любые другие файлы сертификатов, которые у вас есть), и нажмите Импортировать443
и в разделе SSL-сертификат выберите сертификат, который вы только что импортировали.Мой ответ выше адаптирован из инструкций, найденных на 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
прямо не говорит, что они воля стирать пользовательские конфигурации, это не говорит о том, что они не будет, либо. Береженого Бог бережет.
Удачи!