我有以下場景:
單一應用程式將在單一伺服器上為多個不同的網域以及單一 Tomcat 實例的單一上下文提供服務。 (所有域的DNS均已配置並正常運作)
也就是說,當瀏覽器指向該位址時我需要它:
domain1.example
>> 重新導向至 >>http://127.0.0.1/websiteapp
domain2.example
>> 重新導向至 >>http://127.0.0.1/websiteapp
domainn.com.br
>> 重新導向至 >>http://127.0.0.1/websiteapp
在應用程式中,它會檢索(透過請求 URL)呼叫域,即,它是我的客戶端標識符,透過該網域我獲取資料庫中的資訊並將配置的視圖傳回給該客戶端。
我這樣配置 NGINX(最低配置):
server {
listen 80;
server_name domain1.example domain2.example domainn.com.br;
root /opt/tomcat2/webapps/websites;
location / {
proxy_pass http://127.0.0.1:8080/websitesapp;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Tomcat伺服器.xml
<Context docBase="websitesapp" path="/" reloadable="true" source="org.eclipse.jst.jee.server:websitesapp"/>
在應用程式中,我檢索網域,並使用從資料庫載入的資訊「安裝」視圖。
這個設定正確嗎?
有沒有什麼方法可以更安全地將網域傳遞給 tomcat,即無需透過瀏覽器的 URL 檢索它?
這種方法有什麼禁忌嗎?
還有其他更有趣的方法嗎?
答案1
除了 之外server_name
,這些server
區塊在其他方面是相同的。您可以改為使用server
帶有server_name
列出所有三個網域的單一區塊。或者二十個,如果以後再擴展的話…
$http_host
即使瀏覽器提供了它,也可以使用,因為它已經過驗證。如果它server_name
與其中一個區塊中的名稱之一不匹配server
,則不會使用它。 (前提是您有一個 default server
,即預設配置)。