作者回复: 谢谢提醒。 nginx为了提升性能,对于proxy_pass后的域名,不会每次连接都去做resolve,而是解决完一次后就把IP地址存储在内存中,导致如果基于DNS来做负载均衡,而不是nginx做负载均衡时,会有伟忠提出的这个问题。 使用变量,就用到了nginx的脚本,每个请求都会执行一次,虽然效率有下降,但能解这问题。
作者回复: 1、对 2、直接转发 3、不开,用来改变发送响应的时刻。 4、不是,用proxy_buffers 5、是的,后者优先级更高 6、include指令属于核心模块ngx_conf_module的指令,先于HTTP模块执行,所以可按照include后的结果推断,仍然是第一个为默认主机 这些问题很有价值,希望后续的问题能分开来提问,这样可以方便其他同学一起参考,谢谢
作者回复: 超时的话,会返回504。默认的超时时间应该是一分钟,考虑增大超时时间是一个方案。或者定位下,第三方服务处理一个请求耗时一分钟以上,并不正常。
作者回复: 用location /可以匹配所有请求(参见第54课),然后在用proxy_pass转发。
作者回复: 环境变量由Nginx框架使用,用户不能直接使用,“By default, nginx removes all environment variables inherited from its parent process except the TZ variable. ”以及“The NGINX environment variable is used internally by nginx and should not be set directly by the user. ”,因为master/worker进程通讯常通过环境变量,如果引入自定义环境变量非常难以维护。建议通过其他方式传递可变参数。
作者回复: 1、先抓包对比,看看二者HTTP请求的区别;这里涉及到TLS/SSL的抓包,你也可以参考打开nginx debug日志,从日志上找HTTP头部。 2、决定修改、隐藏、新增哪个HTTP头部,后续课程的指令都能做到。 不熟悉Wireshark+tcpdump抓包的话,可以参看我的《Web协议详解与抓包实战》课程
作者回复: 你是用通配符了吗?这样的话,最好不要隐式的使用default server,即第一个就是default server,而要显式的在listen指令中写明谁是default server(参见第47课)。 另外,对于通配符Linux是使用glob函数来查找文件的,其查找出的文件名顺序比较复杂,请参考它的最新man文件:http://man7.org/linux/man-pages/man7/glob.7.html
作者回复: 504就是超时导致的。1秒太短了,改大点试试看,网络或者服务器波动下,很容易就超时了
作者回复: 504就是超时,请把nginx的超时时间加大,或者让上游服务更快一点。