我们有一个Java应用程序,可提供多种产品。它的行为根据产品而改变。
产品由url的子域定义:
https://<product1>.example.com
https://<product2>.example.com
...
这些URL均通过Route 53映射到一个不同的AWS Elastic Load Balancer,该URL将请求转发到我们的同类EC2 App Server队列。
因此https://<product1>.example.com
有一个ELB,https://<product2>.example.com
有一个不同的ELB。但是,这两个ELBS都将流量引导到具有相同Java应用程序的同一组服务器。
ELB根据是否为https通过端口9443和9001转发请求,并且nginx对端口9001上的所有流量进行重定向,否则将通过端口8080转发到Java应用程序。
我需要能够确定原始URL在到达Java应用程序之前是什么,因此可以用来确定响应的配置和行为。我想出的最好的方法是$http_referer
,但这仅适用于首次访问后的任何请求,我们也需要在第一次访问时使用url。
事实证明,完整的主机名确实被推送到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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句