从AWS ELB将子域传递到应用服务器

时间:2016-06-22 20:14:29

标签: java tomcat nginx amazon-elb

我们有一个Java应用程序服务多个产品。它的行为会根据产品而变化。

产品由网址的子域名定义:

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

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

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

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

我需要能够确定原始URL到达Java应用程序之前的内容,因此可以用它来确定响应的配置和行为。我提出的最好的是$http_referer,但这仅适用于初次访问后的任何请求,我们也需要首次访问时的网址。

下面是我们部署的(非常)粗略图表,我希望它有所帮助。 enter image description here

1 个答案:

答案 0 :(得分:0)

结果是完整的主机名被推送到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"';

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