在 Apache 2.4 上執行兩個 Web 應用程序
我正在嘗試在我的 Linux apache 伺服器上執行兩個應用程序:
- 開放項目
- 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 不能。
如果我為 OpenProject 設置實際 IP,為 pgAdmin 隨機設置,那麼 OpenProject 可以工作,而 pgAdmin 不能。
如果我為 OpenProject 設置隨機 IP,為 pgAdmin 設置實際 IP,那麼 OpenProject 不起作用,但 pgAdmin 可以。
為什麼這麼亂?如何配置這些文件以使兩個應用程序按預期工作?
使用 DNS 創建兩個名稱(例如
openproject.example
和pgadmin.example
),指向您的伺服器的實際地址(顯然是 198.162.12.13)。在各自的設置中配置這些名稱ServerName
,並使用http://openproject.example>和<http://pgadmin.example訪問它們。
要在單個 IP 地址上執行多個單獨的網站/應用程序,您大致有三種選擇:
- 您將每個應用程序安裝在不同的 URL 路徑中
$(hostname)/app1
,即/app2
.如果兩個應用程序都需要安裝在根目錄中,
/
您的選擇是
- 在不同的埠號上執行多個虛擬 Web 伺服器,
http://$(hostname):81/
將顯示一個應用程序並http://$(hostname):82/
可以顯示不同的應用程序- 在不同的主機名下執行多個虛擬 Web 伺服器並進行基於名稱的虛擬主機。然後
http://app1.example.com/
可以顯示一個應用程序http://app2.example.com/
並將顯示另一個您的配置似乎嘗試使用最後一個選項,但由於兩個 VirtualHost 定義都配置了相同的
ServerName
Apache 無法區分它們。