下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 12 | 用Nginx搭建一个具备缓存功能的反向代理服务
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Nginx核心知识100讲

共155讲 · 155课时,约1300分钟
18576
免费
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防火...

精选留言(42)

  • 老师你会讲一下nginx的event loop机制么?就是nginx的upstream和sub request module都基于的底层的event loop机制。在你的书里第二大部分详细介绍了这个。但是如果能够在课程中再过一遍就更好了

    作者回复: 会讲的,第2部分就会讲到event loop机制

    6
  • 2018-12-18
    老师您好,缓存功能只能使用于静态资源服务吗?我配置的反向代理到web应用,生成了nginxcache这个目录,但是目录里面没有任何东西。

    作者回复: 缓存只用于反向代理。必须上游响应符合缓存条件才会存储到该目录。第四部分有3节课会深入这块

    3
  • 2018-11-16
    老师您好,我在使用nginx做负载均衡时,实测的结果显示,大于一台服务的处理请求小于单台的处理能力,nginx为1.14.0版本,upstream里逐步打开多台后台服务,比如开启一台,两台,三台或者四台,测试数据都没有一台的好。后台服务使用Python Django开发的。用goaccess去监控access log,明显发现多台服务接收和处理请求比较慢。nginx配置只是增加了upstream。请问这个性能降低是否跟nginx配置有关?如何提高性能?谢谢!

    作者回复: 性能问题先要确定瓶颈在哪,通常我习惯用二分法,逐渐缩小问题范围。增加多台服务性能反而变慢,我建议你先确定这四台django本身运行时会不会变慢,并看一下nginx的error.log中有没有错误日志,同时把error.log里的日志级别降低一点,例如info。

    3
  • 2019-01-11
    老师你好,我们使用stream对tcp请求做代理,但是有个问题就是应用端拿不到客户端的真实IP,获取出来的IP是代理服务器的IP,请问有什么方法可以获取到客户端请求的真实IP吗?

    作者回复: 两个方案,1、使用proxy_protocol协议,nginx作为客户端或者服务器时都支持该协议。第113课有详细介绍。
    2、使用IP透传DSR方案,需要修改上游服务的路由表,这节课在第4部分最后一节课,大概春节前会上线,你可以关注下。

    2
  • 2018-11-21
    请问在做反向代理的时候,如果想启用gzip压缩,是应该在反向代理上做,还是web服务器上的nginx上配置?

    作者回复: 我猜测你的环境是nginx->nginx,前者是负载均衡的作用,后者是静态资源的作用?如果是这样,建议后者。

    2
  • 2018-11-12
    我找不到Openresty配置目录,不仅要安装nginx还要安装Openresty是吗

    作者回复: openresty里含有nginx,你安装好openresty后,如果你没有改prefix,那么nginx.conf就会在/usr/local/openresty/nginx/conf目录下。

    2
  • 2019-10-23
    老师 没有看到启动openresty呢

    作者回复: Openresty启动后进程名还是Nginx,它只是把Lua代码以Nginx模块的方式嵌入到Nginx进程中了

    1
  • 2019-09-16
    proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;

        server {
            listen 80;
            server_name study_nginx.com;

            location / {
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                    proxy_cache my_cache;
                    proxy_cache_key $host$uri$is_args$args;
                    proxy_cache_valid 200 304 302 1d;

                    proxy_pass http://local;
            }
        }

    我这样配置了,nginx服务器关闭后,就无法访问了。缓存没访问成功
    展开

    作者回复: /tmp/nginxcache下的缓存文件是否生成?

    1
  • 2018-11-29
    陶辉老师你好,生产环境如何判断是该使用nginx呢?还是openresty呢?

    作者回复: 如果不需要使用openresty提供的独有功能,那么尽量使用更稳定更轻量的nginx

    1
  • 2018-11-11
    Nginx现在可以做http请求正向代理,那么对于HTTPS请求的正向代理应该如何实现的思路,是否可以讲解一下思路?

    作者回复: 很好的问题,考虑在第四部分内容加一节课讲正向代理!

    1
  • 2019-11-30
    老师请教一个方向代理一个问题:访问 / 或者 /index 直接返回,否者转发upstream处理。
    这个应该怎么配置呢?

    作者回复: 你想知道的是应该是如何配置location,分为两类,我猜你遇到的问题是/会匹配所有的url。
    建议你先从头看一遍54课。你的场景不需要正则表达式,那么只是前缀匹配。你要注意,前缀匹配需要关注出现在nginx.conf中的顺序。

  • 2019-11-25
    老师,http://local是什么意思,我认识localhost,能说下区别吗,另外上游的端口号是8080,使用local可以不指定端口号吗

    作者回复: 1、localhost只是名称,如果你在/etc/hosts里添加了127.0.0.1 local,那么也能访问local。
    2、当不指定端口号时,http client会默认使用80端口。

  • 2019-10-24
    老师。是要同时启动nginx和openresty的吧

    作者回复: openresty就是nginx哦,强烈建议你先看下144课

  • 2019-10-24
    老师 我的意思是没有看到启动openresty 只是看到配置配置文件了 那是如何做代理的呢

    作者回复: 没有找到sbin目录?sbin目录下有nginx文件,直接执行./nginx就可以启动了

  • 2019-10-23
    老师 nginx和openresty都用同样一个端口吗

    作者回复: Openresty也是Nginx,只不过它增加了几个Nginx模块,特别是http模块。所以,包括配置文件、端口都是一样的,你可以先跳到144课总体上看下区别

  • 老师,我按照您的配置,开启nginx上游服务后能正常访问,关闭就访问不到。
    openresty中配置如下:
    http {
        include mime.types;
        default_type application/octet-stream;

        #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
        # '$status $body_bytes_sent "$http_referer" '
        # '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log logs/access.log main;
        client_max_body_size 60M;
        proxy_cache_path /temp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=2g inactive=60m use_temp_path=off;

        sendfile on;
        #tcp_nopush on;

        #keepalive_timeout 0;
        keepalive_timeout 65;

        #gzip on;

        upstream local {
            server 127.0.0.1:9091;
        }
        server {
            listen 80;
            server_name localhost;

            #charset koi8-r;

            #access_log logs/host.access.log main;

            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_cache my_cache;
                proxy_cache_key $host$uri$is_args$args;
                proxy_cache_valid any 1d;
                proxy_pass http://local;
               # index index.html index.htm;
            }
    nginx配置如下:
    展开
    1
  • proxy_cache my_cache;
                proxy_cache_key $host$uri$is_args$args;
                proxy_cache_valid 200 304 302 1d;

    proxy_cache_key不同的浏览器缓存的不一样吗 缓存是跟浏览器相关的吗
    在chrome下是下载 在其他浏览器里是输出html
    展开
    1
  • 2019-06-26
    老师好,我在项目实践的时候遇到一个问题,单点登录页面有一个验证码图片,是后台通过过滤器拦截返回到前端的,前端通过<img alt="" src="${_path}/captcha">这种方式显示验证码;给登录系统做了反向代理后,现在这个请求会报404错误,网上有说是session失效,试了一些方法当无法解决;请教老师这是什么原因,有什么方法可以解决呢?

    nginx.conf配置: server {
            listen 80;
            server_name api.lzeoms.com;
            #charset koi8-r;
            #access_log logs/host.access.log main;
            location / {
                root html;
                index index.html index.htm;
            }
        location /cas/ {
                proxy_pass http://cas.lzeoms.com:8081/;
            }    
        location /cust/ {
                proxy_pass http://cust.lzeoms.com:8083/;
            }
        location /web/ {
                proxy_pass http://web.lzeoms.com:4200/;
            }
        location ~ .*\.(js|css|svg|ttf|woff|woff2|image|jpeg|map|text|html|jpg)$ {
                 proxy_pass http://cas.lzeoms.com:8081;
            }
        }
    展开

    作者回复: 两个建议:
    1、确认404请求使用的是哪一个location,你这里涉及到了正则和最长字符串匹配,可以通过54课的学习找到规则,也可以通过error.log的debug日志找到。
    2、你这里除了/用的是本地,其他四个全是反向代理,而前3个中你在proxy_pass最后加了/,最后一个没加。加与不加,结果完全不同,因为URL会被改掉。请学习89课。

  • 陶辉老师,你好,我用nginx+tomcat 搭建了一个反向代理的服务,刚开始访问不到资源文件,后来加入如下配置之后,可以访问资源文件,但是资源文件一直加载超时 location /scs-admin/{
                  proxy_pass http://127.0.0.1:9300/;
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $scheme;
                  proxy_next_upstream error timeout invalid_header;
                  client_max_body_size 1000m;
                  proxy_connect_timeout 1;
                  proxy_send_timeout 30;
                  proxy_read_timeout 60;
            }
    展开
  • 2019-05-31
    老师,反向代理的由来是直接访问不了,要借助代理服务器访问,所以代理服务器必须能访问到上游服务器是吧?所以在一个企业里面一般代理服务器(即nginx所在的服务器是可以被外网直接访问的)应用服务是在企业局域网内部,外网无法访问,这样理解对吗?因为我在本机上装了一个nginx,在虚拟机上也装了一个nginx,本地nginx代理访问虚拟机上的nginx时,访问不了,我看error.log,提示访问被拒绝,因为设置成127.0.0.1:80时,本机也访问也是拒绝访问的

    作者回复: 1、上游访问不了只是其中一个原因,负载均衡提供的可伸缩性也是一个重要原因。因此,上游服务当然可以被直接访问,这不是一个必要条件。
    2、本机进程无法访问虚拟机端口,需要参考你的虚拟机网络配置,与Nginx无关。