多个域和同一应用程序的 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,则不会使用它。(前提是您有一个默认的server,即默认配置所具有的)。

相关内容