Nginx 反向代理和子域名

Nginx 反向代理和子域名

我在 Nginx 配置方面遇到了一些问题。我已经搜索过相关问题,但我看到的建议解决方案对我没有用。

我在 tomcat 服务器上有一些应用程序,在 jboss 服务器上也有一些应用程序。我在另一台服务器上配置了 Nginx 作为反向代理,它运行正常。现在,我要做的是使用域名访问 tomcat 和 jboss 上的应用程序。例如。我在 tomcat 上有这个地址的应用程序: tomcat.domain.com:8080/app1 ; tomcat.domain.com:8080/app2 等等,甚至对于 jboss 应用程序也是如此。使用反向代理,我有这个输出: proxy.domain.com/app1 proxy.domain.com/app2 等等,所以我不需要指定端口号,也不需要指定属于哪个指定的服务器。但我会以这种方式使用子域:app1.domain.com、app2.domain.com 等等。所以,我的 Nginx 配置,一个可以工作并且只用于反向代理的配置是(为简单起见,我将仅报告有关 tomcat 的行):

upstream tomcat_server {

    server tomcat.domain.com:8080;
}
server {
     listen 80;
     location /app1 {
                  proxy_pass http://tomcat_server;
                  proxy_set_header  X-Forwarded-Host $host;
                }
    }

对于子域配置,我修改了有关服务器定义的部分,如下所示:

server {
     listen 80;
     server_name app1.domain.com;
     location / {
                  proxy_pass http://tomcat_server/app1;
                  proxy_set_header  X-Forwarded-Host $host;
                }
    }

就像一些论坛建议的那样,但它不起作用。我指定,在管理 DNS 的服务器上,app1.domain.com 指向 proxy.domain.com 服务器。我看到了日志,但没有。我该怎么办?

谢谢

卢西亚娜

答案1

您可能需要检查您的 DNS 设置。

我还使用多个子域,这些子域是我使用 Python Django 或 Ruby on Rails 等 Web 框架为各种应用程序动态创建的。

一个典型的例子是,mydomain.com我可能想要myapp.mydomain.commyapp 是一个在 提供服务的框架my_server_IP:some_port

为了实现这样的事情(在相同或不同的端口上同时运行多个子域名),我将 DNS 的决定权委托给 Web 服务器,并使用通配符 DNS 记录 参见维基百科顾名思义,此类记录产生一网打尽可以使用虚拟主机(域名代理等)从 Web 服务器轻松管理域名。

GoDaddy 的 DNS 管理工具中的通配符记录A如下所示:

Host Points To TTL

* YOUR_SERVER_IP 1 Hour

并且 Nginx 配置文件将所有请求传递app.mydomain.comotherserver.com:9000/index.html

结果:您在浏览器中输入内容http://app.mydomain.com,然后 Nginx 提供来自otherserver.com:9000/index.html另一台服务器或应用程序等的内容,

server {
    listen   80;

    server_name app.mydomain.com www.app.mydomain.com;

    access_log  /var/log/nginx/app_mydomain_com_access.log;
    error_log   /var/log/nginx/pp_mydomain_com_error.log;

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;

    location / {
        proxy_pass http://otherserver.com:9000/index.html;
    }

}

答案2

DNS 是所有权利,在将它们投入生产之前,我在本地域中做了一些试验。我更轻松地解决了这个问题(我没有 index.html 或任何其他文件,我只有文件夹名称)。最后,我认为这对某些人会有所帮助,配置是:

upstream tomcat_server {
    server tomcat.domain.com:8080;
}
server {
    listen 80;
    server_name app1.domain.com;
    location / {
        proxy_pass http://tomcat_server/app1/;
        sub_filter /app1/  /;
    }
}

proxy_pass 末尾的“/”是必需的……

需要使用 sub_filter 来避免出现类似这样的结果

   app1.domain.com/app1

就这些了...我正在尝试改进与 tomcat 6 配合使用的应用程序的此配置,因为使用子域可能会在应用程序中生成(就像我的情况一样)一些疾病。

相关内容