【问题标题】:Pass subdomain to app servers from AWS ELB将子域从 AWS ELB 传递到应用服务器
【发布时间】:2016-10-24 22:48:21
【问题描述】:

我们有一个 Java 应用程序服务于多种产品。它的行为会因产品而异。

产品由url的子域定义:

https://<product1>.example.com
https://<product2>.example.com
...

这些网址中的每一个都通过 Route 53 映射到不同的 AWS Elastic Load Balancer,后者将请求转发到我们的同类 EC2 应用程序服务器群。

所以https://&lt;product1&gt;.example.com 有一个 ELB,https://&lt;product2&gt;.example.com 有一个不同的 ELB。然而,这两个 ELBS 都将流量引导到具有相同 Java 应用程序的同一组服务器。

ELB根据是否为https,通过端口9443和9001转发请求,nginx对端口9001上的所有流量进行重定向,否则通过端口8080转发到Java应用程序。

我需要能够在原始 url 到达 Java 应用程序之前确定它是什么,以便可以使用它来确定响应的配置和行为。我想出的最好的是$http_referer,但这仅适用于初次访问后的任何请求,我们也需要第一次访问时的 url。

下面是我们部署的(非常)粗略的图表,希望对您有所帮助。

【问题讨论】:

  • 它应该在$host... 是你要找的吗?此外,通配符或 UCC(多 SAN)SSL 证书似乎会使所有这些额外的 ELB 变得多余。

标签: java tomcat nginx amazon-elb


【解决方案1】:

原来完整的主机名确实被推送到了 nginx 层。修改 nginx 的日志我添加了$host 并且出现了完整的主机名。我遇到的问题是 tomcat 丢失了主机数据,但这应该很容易解决。

这是我在nginx.conf 中更新的内容:

log_format  main  '$host $remote_addr - $remote_user [$time_local]  "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

注意main 之后块最前面的$host 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2023-03-17
    • 2021-12-01
    • 1970-01-01
    • 2017-01-14
    • 2020-03-13
    • 2012-10-15
    相关资源
    最近更新 更多