Я пытаюсь запустить два приложения на моем сервере Linux Apache:
- OpenProject
- pgAdmin (приложение WSGI)
И для того, чтобы подключить их с удаленного компьютера, я использую эти httpd
файлы конфигурации:
Для OpenProject:
Include /etc/openproject/addons/apache2/includes/server/*.conf
<VirtualHost *:80>
ServerName 198.162.12.13
DocumentRoot /opt/openproject/public
ProxyRequests off
Include /etc/openproject/addons/apache2/includes/vhost/*.conf
# Can't use Location block since it would overshadow all the other proxypass directives on CentOS
ProxyPass /openproject/ http://127.0.0.1:6000/openproject/ retry=0
ProxyPassReverse /openproject/ http://127.0.0.1:6000/openproject/
</VirtualHost>
Для pgAdmin:
<VirtualHost *:80>
ServerName 198.162.214.23
WSGIScriptAlias /pgadmin4 /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.wsgi
WSGIDaemonProcess pgadmin processes=1 threads=25
<Directory /usr/lib/python2.7/site-packages/pgadmin4-web/>
WSGIProcessGroup pgadmin
WSGIApplicationGroup %{GLOBAL}
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
</Directory>
</VirtualHost>
И вот тут начинается магия (для меня), и вот в чем мой вопрос:
взгляните на имена серверов в обоих файлах: pgAdmin содержит мой реальный IP-адрес, а OpenProject — какой-то случайный IP-адрес.
При такой настройке pgAdmin работает, а OpenProject — нет.
Как правило, без настройки pgAdmin OpenProject работает с любым IP-адресом, что для меня странно, поэтому мой первый вопрос: почему???
Итак, подведем итог:
Если я укажу в обоих файлах свой реальный IP-адрес, то OpenProject будет работать, а pgAdmin — нет.
Если я настрою в обоих файлах какой-нибудь случайный IP-адрес, то OpenProject будет работать, а pgAdmin — нет.
Если я настраиваю реальный IP для OpenProject, случайный для pgAdmin, то OpenProject работает, а pgAdmin — нет.
Если я настраиваю случайный IP для OpenProject, а фактический IP для pgAdmin, то OpenProject не работает, а pgAdmin работает.
Почему все так запутано? Как настроить эти файлы, чтобы оба приложения работали как надо?
решение1
Используйте DNS для создания двух имен (например, openproject.example
и pgadmin.example
), указывающих на фактический адрес (очевидно, 198.162.12.13) вашего сервера. Настройте эти имена в соответствующих ServerName
настройках и используйтеhttp://openproject.exampleиhttp://pgadmin.exampleдля доступа к ним.
решение2
Для запуска нескольких отдельных веб-сайтов/приложений на одном IP-адресе у вас есть примерно три варианта:
- Каждое приложение устанавливается по разным URL-путям, например,
$(hostname)/app1
и/app2
.
Если оба приложения необходимо установить в корневом каталоге, то /
у вас есть следующие варианты:
запустить несколько виртуальных веб-серверов на разных номерах портов и
http://$(hostname):81/
отобразить одно приложение, аhttp://$(hostname):82/
может и другоезапустить несколько виртуальных веб-серверов под разными именами хостов и сделатьвиртуальный хостинг на основе имени. Тогда
http://app1.example.com/
может показать одно приложение иhttp://app2.example.com/
покажет другое
Ваша конфигурация, похоже, пытается использовать последний вариант, но поскольку оба определения VirtualHost настроены с одним и тем же ServerName
Apache не может их различить.