Укажите домен для веб-приложения, работающего на OS X Server (например, Kitura, perfect, steam server)
Используя приложение сервера OS X, я могу указать несколько доменов на разные сайты. Все домены могут использовать порт 80 одновременно, и OS X решит, какой веб-сайт использовать.
Когда я запускаю свой сервер kitura (я полагаю, то же самое происходит с Vapor и Perfect), я должен запустить его на свободном порту (например, 8080). если я начну его на 80, это создаст конфликт с веб-сайтами и, вероятно, не будет отвечать на мои звонки.
Как правильно настроить Kitura, чтобы порт 80 использовался вместе с другими службами?
Я запускаю сервер kitura, используя следующее:
do {
let controller = try Controller()
Log.info("Server will be started on '\(controller.url)'.")
Kitura.addHTTPServer(onPort: controller.port, with: controller.router)
// Start Kitura-Starter server
Kitura.run()
} catch let error {
Log.error(error.localizedDescription)
Log.error("Oops... something went wrong. Server did not start!")
}
И я получаю следующее в журнале:
[2017-06-27T17:57:30.635+03:00] [VERBOSE] [Router.swift:68 init(mergeParameters:)] Router initialized
[2017-06-27T17:57:36.817+03:00] [INFO] [main.swift:37 KiteSpotterServer] Server will be started on 'http://localhost:8080'.
[2017-06-27T17:57:37.588+03:00] [VERBOSE] [Kitura.swift:72 run()] Starting Kitura framework...
[2017-06-27T17:57:38.457+03:00] [VERBOSE] [Kitura.swift:82 start()] Starting an HTTP Server on port 8080...
[2017-06-27T17:57:39.190+03:00] [INFO] [HTTPServer.swift:117 listen(on:)] Listening on port 8080
2 ответа
Самый распространенный и, вероятно, самый простой способ сделать ваше приложение доступным через порт 80 в OS X (или macOS), это настроить обратный прокси-сервер.
Это решение применимо к любому веб-приложению, а не только к Kitura.
Приложение OS X Server поставляется с сервером Apache, который можно настроить для работы в качестве обратного прокси-сервера. Обратный прокси-сервер Apache может прослушивать порт 80 для определенного домена, затем перенаправлять все запросы на внутренний порт 8080, который прослушивает ваше приложение, и наоборот.
Как сделать это правильно:
Шаг 1: В /Library/Server/Web/config/apache2/webapps
создайте файл plist с именем my.application.plist
(например). Этот список описывает так называемое веб-приложение, которое можно активировать в приложении сервера OS X.
Пример веб-приложения 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">
<!-- Allow to include a custom Apache configuration file from Server app -->
<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_webapp_myapp.conf</string>
</array>
<key>name</key>
<string>com.atlassian.webapp.myapp</string>
<key>displayName</key> <!-- Name shown in Server app -->
<string>Reverse proxy for myapp</string>
<key>installationIndicatorFilePath</key> <!-- The presence of this file indicates web app is installed -->
<string>/Library/Server/Web/Config/apache2/httpd_webapp_myapp.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>
В приведенном выше примере заменить myapp
по имени вашего приложения.
Шаг 2: Далее, в /Library/Server/Web/Config/apache2
, создайте файл с именем, которое вы выбрали в файле plist (httpd_webapp_myapp.conf
в моем примере). Этот файл настроит обратный прокси.
Пример файла конфигурации прокси:
# As described at http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
# Service proxy for myapp installation
ProxyRequests Off
ProxyVia Off
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://myapp.mydomain:8080/
ProxyPassReverse / http://myapp.mydomain:8080/
В приведенном выше примере заменить myapp.mydomain
доменом, под которым вы хотите добраться до своего приложения (и 8080
по порту приложения, если он другой).
Важно: оба эти файла должны быть созданы / отредактированы с использованием sudo nano
и они должны принадлежать пользователю root.
Шаг 3: В приложении OS X Server перейдите на Веб-сайты, выберите домен, который вы хотите использовать (дважды щелкните или щелкните символ редактирования), затем нажмите " Изменить дополнительные параметры". Если все прошло хорошо, ваше вновь созданное веб-приложение появится в разделе Сделать эти веб-приложения доступными на этом веб-сайте. Установите флажок вашего веб-приложения, затем сохраните.
Обычно нет необходимости перезагружать веб-сервер (приложение "Сервер" сделает это за вас).
Шаг 4. Проверьте, можете ли вы обратиться к своему приложению в этом домене.
Примечание. Может потребоваться как-то настроить приложение, чтобы оно знало, что оно работает за обратным прокси-сервером.
На первый взгляд, это может показаться немного сложным, но на самом деле это не так, и, насколько мне известно, сейчас это единственный приемлемый способ настройки обратного прокси-сервера на OS X-сервере.
Сервер OSX уже использует порт 80 для прослушивания входящих соединений. Поэтому Kitura не может использовать порт 80, пока его использует OSX Server. Чтобы использовать Kitura на порту 80, вам необходимо выключить OSX Server, чтобы освободить порт 80. В качестве альтернативы вы можете настроить OSX Server для перенаправления запросов на ваш сайт в ваше приложение Kitura. Но я не знаю, как это сделать с OSX Server конкретно.