多個網域和相同應用程式的 Nginx 配置

多個網域和相同應用程式的 Nginx 配置

我有以下場景:

單一應用程式將在單一伺服器上為多個不同的網域以及單一 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,即預設配置)。

相關內容