下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 89 | proxy模块中的proxy_pass指令
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Nginx核心知识100讲

共155讲 · 155课时,约1300分钟
18513
免费
01 | 课程综述
免费
02 | Nginx适用于哪些场景?
免费
03 | Nginx出现的历史背景
免费
04 | 为什么用Nginx:它的 5 ...
免费
05 | Nginx的四个主要组成部分
06 | Nginx的版本发布历史
07 | 选择哪一个Nginx发行版本...
08 | 编译出适合自己的Nginx
09 | Nginx配置文件的通用语法...
10 | Nginx命令行及演示:重载...
11 | 用Nginx搭建一个可用的静...
12 | 用Nginx搭建一个具备缓存...
13 | 用GoAccess实现可视化并实...
14 | 从网络原理来看SSL安全协...
15 | 对称加密与非对称加密各自...
16 | SSL证书的公信力是如何保...
17 | SSL协议握手时Nginx的性能...
18 | 用免费SSL证书实现一个HTT...
19 | 基于OpenResty用Lua语言...
20 | Nginx的请求处理流程
21 | Nginx的进程结构
22 | Nginx的进程结构实例演示
23 | 使用信号管理Nginx的父子...
24 | reload重载配置文件的真相
25 | 热升级的完整流程
26 | 优雅地关闭worker进程
27 | 网络收发与Nginx事件间的...
28 | Nginx网络事件实例演示
29 | Nginx的事件驱动模型
30 | epoll的优劣及原理
31 | Nginx的请求切换
32 | 同步&异步、阻塞&非阻塞...
33 | Nginx的模块究竟是什么?
34 | Nginx模块的分类
35 | Nginx如何通过连接池处理...
36 | 内存池对性能的影响
37 | 所有worker进程协同工作的...
38 | 用好共享内存的工具:Slab...
39 | 哈希表的max_size与bucke...
40 | Nginx中最常用的容器:红...
41 | 使用动态模块来提升运维效...
免费
42 | 第三章内容介绍
43 | 冲突的配置指令以谁为准?
44 | Listen指令的用法
免费
45 | 处理HTTP请求头部的流程
46 | Nginx中的正则表达式
47 | 如何找到处理请求的server...
48 | 详解HTTP请求的11个阶段
49 | 11个阶段的顺序处理
50 | postread阶段:获取真实客...
51 | rewrite阶段的rewrite模块...
52 | rewrite阶段的rewrite模块...
53 | rewrite阶段的rewrite模块...
54 | find_config阶段:找到处...
55 | preaccess阶段:对连接做...
56 | preaccess阶段:对请求做...
57 | access阶段:对ip做限制的...
58 | access阶段:对用户名密码...
59 | access阶段:使用第三方做...
60 | access阶段的satisfy指令
61 | precontent阶段:按序访问...
62 | 实时拷贝流量:precontent...
63 | content阶段:详解root和a...
64 | static模块提供的3个变量
65 | static模块对url不以斜杠...
66 | index和autoindex模块的用...
67 | 提升多个小文件性能的conc...
68 | access日志的详细用法
69 | HTTP过滤模块的调用流程
70 | 用过滤模块更改响应中的字...
71 | 用过滤模块在http响应的前...
72 | Nginx变量的运行原理
73 | HTTP框架提供的请求相关的...
74 | HTTP框架提供的其他变量
75 | 使用变量防盗链的referer...
76 | 使用变量实现防盗链功能实...
77 | 为复杂的业务生成新的变量...
78 | 通过变量指定少量用户实现...
79 | 根据IP地址范围的匹配生成...
80 | 使用变量获得用户的地理位...
81 | 对客户端使用keepalive提...
82 | 反向代理与负载均衡原理
83 | 负载均衡策略:round-rob...
84 | 负载均衡哈希算法:ip_has...
85 | 一致性哈希算法:hash模块
86 | 最少连接算法以及如何跨wo...
87 | upstream模块提供的变量
88 | proxy模块处理请求的流程
89 | proxy模块中的proxy_pas...
90 | 根据指令修改发往上游的请...
91 | 接收用户请求包体的方式
92 | 与上游服务建立连接
93 | 接收上游的响应
94 | 处理上游的响应头部
95 | 上游出现失败时的容错方案
96 | 对上游使用SSL连接
97 | 用好浏览器的缓存
98 | Nginx决策浏览器过期缓存...
99 | 缓存的基本用法
100 | 对客户端请求的缓存处理...
101 | 接收上游响应的缓存处理...
102 | 如何减轻缓存失效时上游...
103 | 及时清除缓存
104 | uwsgi、fastcgi、scgi指...
105 | memcached反向代理的用法
106 | 搭建websocket反向代理
107 | 用分片提升缓存效率
108 | open file cache提升系...
109 | HTTP/2协议介绍
110 | 搭建HTTP/2服务并推送资...
111 | gRPC反向代理
112 | stream四层反向代理的7个...
113 | proxy protocol协议与r...
114 | 限并发连接、限IP、记日...
115 | stream四层反向代理处理S...
116 | stream_preread模块取出S...
117 | stream proxy四层反向...
118 | UDP反向代理
119 | 透传IP地址的3个方案
120 | 性能优化方法论
121 | 如何高效使用CPU
122 | 多核间的负载均衡
免费
123 | 控制TCP三次握手参数
免费
124 | 建立TCP连接的优化
125 | 滑动窗口与缓冲区
126 | 优化缓冲区与传输效率
127 | 慢启动与拥塞窗口
128 | TCP协议的keepalive功能
129 | 减少关闭连接时的time_wa...
130 | lingering_close延迟关闭...
131 | 应用层协议的优化
免费
132 | 磁盘IO的优化
133 | 减少磁盘读写次数
134 | 零拷贝与gzip_static模...
135 | 用tcmalloc优化内存分配
136 | 使用Google PerfTools分...
137 | 使用stub_status模块监控...
138 | 第三方模块源码的阅读
139 | Nginx的启动流程
140 | HTTP第三方模块的初始化
141 | if指令是邪恶的吗?
142 | 解读Nginx的核心转储文件
143 | 通过debug日志定位问题
144 | OpenResty概述
145 | OpenResty中的Nginx模块...
146 | 如何在Nginx中嵌入Lua代...
147 | OpenResty中Lua与C代码...
148 | 获取、修改请求与响应的S...
149 | 工具类型的SDK
150 | 同步且非阻塞的底层SDK:...
151 | 基于协程的并发编程SDK
152 | 定时器及时间相关的SDK
153 | share.DICT基于共享内存...
154 | 子请求的使用方法
155 | 基于OpenResty的WAF防火...

精选留言(10)

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

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

    8
  • 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-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
  • 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协议详解与抓包实战》课程

  • 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的超时时间加大,或者让上游服务更快一点。