• 伟忠
    2018-12-29
    有个地方没讲,有个坑,proxy_pass后面接域名时候会DNS缓存,导致这个域名背后的机器负载不均衡,官方推荐的是使用变量解决。

    作者回复: 谢谢提醒。
    nginx为了提升性能,对于proxy_pass后的域名,不会每次连接都去做resolve,而是解决完一次后就把IP地址存储在内存中,导致如果基于DNS来做负载均衡,而不是nginx做负载均衡时,会有伟忠提出的这个问题。
    使用变量,就用到了nginx的脚本,每个请求都会执行一次,虽然效率有下降,但能解这问题。

    
     8
  • leitiannet
    2019-01-27
    问题1:proxy_buffering不管是on还是off,proxy_buffer_size都有使用,但proxy_buffering为on,proxy_buffers不会被使用,可以这么理解吗?

    问题2:如果响应比较大,超过缓冲区大小和临时文件大小,如何处理?丢弃还是直接转发?

    问题3:proxy_busy_buffers_size有什么作用?需要单独开辟缓冲区吗?

    问题4:proxy_request_buffering为on,是使用client_body_buffer_size设置的缓冲区吗?有没有proxy_buffers?

    问题5:proxy_intercept_errors on和proxy_next_upstream http_404会冲突吗?

    问题6:定义server时第一个为默认主机,如果将server定义放在单独配置文件中,通过include导入,那默认主机如何判定?
    展开

    作者回复: 1、对
    2、直接转发
    3、不开,用来改变发送响应的时刻。
    4、不是,用proxy_buffers
    5、是的,后者优先级更高
    6、include指令属于核心模块ngx_conf_module的指令,先于HTTP模块执行,所以可按照include后的结果推断,仍然是第一个为默认主机
    这些问题很有价值,希望后续的问题能分开来提问,这样可以方便其他同学一起参考,谢谢

    
     4
  • 张营
    2019-01-28
    你好老师,使用ngx.location.capture然后用proxy_pass的方式访问第三方服务,有没有可能第三方服务可用,但是capture返回的状态是504,如果有的话,是什么原因,应该怎么解决?

    作者回复: 超时的话,会返回504。默认的超时时间应该是一分钟,考虑增大超时时间是一个方案。或者定位下,第三方服务处理一个请求耗时一分钟以上,并不正常。

    
     1
  • 拉勾
    2019-12-17
    老师你好,在前后端分离情况下,请求通过nginx1转发到nginx2,其中静态文件和接口转发都在nginx2中,nginx1应该如何配置可以将所有请求都转发到nginx2中,不改前端代码的情况下

    作者回复: 用location /可以匹配所有请求(参见第54课),然后在用proxy_pass转发。

    
    
  • 小汤哥
    2019-06-05
    老师您好,想请教一下proxy_paas 后面的域名端口号想通过读取环境变量的方式获取,这种动态参数如何传递呢?

    作者回复: 环境变量由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进程通讯常通过环境变量,如果引入自定义环境变量非常难以维护。建议通过其他方式传递可变参数。

    
    
  • 小汤哥
    2019-06-05
    老师您好,想请教一下proxy_paas 后面的域名端口号想通过读取环境变量的方式获取,这种动态参数如何传递呢?
    
    
  • 云学
    2019-05-14
    原来proxy_bypass中带了uri 会发生path rewrite
    
    
  • 码农Kevin亮
    2019-05-13
    请教老师,我实战中遇到这样一个问题:我想通过ngx作为反向代理来请求第三方网站的资源,该网站用https协议。最初我是只需要简单设置proxy_pass就能实现;后来发现这招不灵了。
    于是我特意用postman验证了一下,单纯用普通网址是可以访问的,比如https://domain/xxx.css;但如果我换成ngx的反向代理服务,比如127.0.0.1/xxx.css,就会返回403错误。
    是不是上游服务做了什么校验,从而判定了我的ngx所转发的请求无效?而我可以怎么设置来应对呢?

    作者回复: 1、先抓包对比,看看二者HTTP请求的区别;这里涉及到TLS/SSL的抓包,你也可以参考打开nginx debug日志,从日志上找HTTP头部。
    2、决定修改、隐藏、新增哪个HTTP头部,后续课程的指令都能做到。
    不熟悉Wireshark+tcpdump抓包的话,可以参看我的《Web协议详解与抓包实战》课程

    
    
  • leitiannet
    2019-01-31
    6、include指令属于核心模块ngx_conf_module的指令,先于HTTP模块执行,所以可按照include后的结果推断,仍然是第一个为默认主机
    ----如何知道include执行的结果呢?如果相同目录下根据文件名顺序吗

    作者回复: 你是用通配符了吗?这样的话,最好不要隐式的使用default server,即第一个就是default server,而要显式的在listen指令中写明谁是default server(参见第47课)。
    另外,对于通配符Linux是使用glob函数来查找文件的,其查找出的文件名顺序比较复杂,请参考它的最新man文件:http://man7.org/linux/man-pages/man7/glob.7.html

    
    
  • 张营
    2019-01-29
    

    你好老师,使用ngx.location.capture然后用proxy_pass的方式访问第三方服务,有没有可能第三方服务可用,但是capture返回的状态是504,
    我配置的超时时间是1秒,有没有可能第三方服务可用,然后因为nginx本身的原因导致504?

    作者回复: 504就是超时导致的。1秒太短了,改大点试试看,网络或者服务器波动下,很容易就超时了

    
    
  • 张营
    2019-01-28
    你好老师,使用ngx.location.capture然后用proxy_pass的方式访问第三方服务,有没有可能第三方服务可用,但是capture返回的状态是504,如果有的话,是什么原因,应该怎么解决?

    作者回复: 504就是超时,请把nginx的超时时间加大,或者让上游服务更快一点。

    
    
我们在线,来聊聊吧