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