我们有一个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
,但这仅适用于初次访问后的任何请求,我们也需要首次访问时的网址。
答案 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
变量。