up:: 前端资源路由
说明: 上面都是讲解关于静态资源的使用,本节我们开始讲解动态资源,即ajax请求
先学习下优秀的配置文件讲解Nginx配置使用详解_nginx_shstart7-DevPress官方社区
设置upstream server
nignx活例说明proxy_set_header的几个指标 - 知乎
若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是http://test.com,那么反代后还是http://test.com。
我们客户端发起的请求是miaoshaserver,反代后还是从header获得这个域名,暂时这么理解吧。。。
关于动态请求的location配置
location:根据请求的RUI设置配置,进行负载均衡。location中的配置参数如下:
1、proxy_set_header参数:语法为:proxy_set_header Field Value。常见的设置如:
proxy_set_header Host $proxy_host; 获取nginx配置中的server_name值。
proxy_set_header X-Real-IP $remote_addr; 有了这个配置就可以在web服务器端获得用户的真实ip
proxy_set_header X-Forwarded-For $remote_addr;
我们先看看这里有个X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。也就是说在默认情况下我们使用request.getAttribute(“X-Forwarded-For”)获取不到用户的ip,如果我们想要通过这个变量获得用户的ip,我们需要自己在nginx添加配置。
2、proxy_pass:转发的代理路径 情况一、location /test/ { proxy_pass http://t6:8300; }
情况二、location /test/ { proxy_pass http://t6:8300/; }
上面的区别在于最后面是否加了/
针对情况2,如果访问url = http://server/test/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源
针对情况1,如果访问url = http://server/test/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/test/test.jsp,将test/ 作为根路径,请求test/路径下的资源
参考:Nginx配置文件详解_很简单_的博客-CSDN博客_nginx配置文件详解
修改完后记得重启Nginx…
查看是否有报错信息,打开日志文件:
访问:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error=‘Cannot allocate memory’ - 简书
开启tomcat acess log验证
连接上我们的两个应用服务器。。。
在tomcat的access中打印出请求的情况可以帮助我们分析问题,通常比较关注的有访问IP、线程号、访问url、返回状态码、访问时间、持续时间。
pattern属性有一系列的字符串参数组成,每个参数都有前缀”%“,目前支持下面这些参数:
common模式的pattern(即默认pattern参数)的格式为’%h %l %u %t “%r” %s %b’。
打开日志
因为请求是异步的,需要多刷新几次。。。就能查看到日志信息了,我们要学会根据日志信息进行排查错误。
再次修改下g_host
使用这个我们的动态请求域名后,后端会自动反代为Nginx服务器ip地址。。。