下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 18 | 用免费SSL证书实现一个HTTPS站点
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Nginx核心知识100讲

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

精选留言(38)

  • 2018-11-09
    视频中在配置的时候没有说明前期的准备,比如nginx编译时需要启用ssl模块,域名需要注册以及域名指向这些问题。希望在以后的视频中可以稍微提一下前置的准备工作。谢谢陶老师~

    作者回复: 很好的建议, 后面录制时我会加上的!

    9
  • 2018-11-20
    执行certbot --nginx命令生成秘钥时, 报错如下:
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    The nginx plugin is not working; there may be problems with your existing configuration.
    The error was: NoInstallationError()
    查看debug日志内容如下:
    DEBUG:certbot.plugins.disco:No installation (PluginEntryPoint#nginx):
    Traceback (most recent call last):
      File "/usr/lib/python2.7/site-packages/certbot/plugins/disco.py", line 126, in prepare
        self._initialized.prepare()
      File "/usr/lib/python2.7/site-packages/certbot_nginx/configurator.py", line 131, in prepare
        raise errors.NoInstallationError
    经过google,看了几篇帖子发现:
    certbot生成证书时,需要读取默认nginx,需要将openresty/nginx/sbin/nginx加入到PATH里 or ln -s /usr/local/openresty/nginx/sbin/nginx /usr/local/sbin/nginx
    然后就能才正确安装证书了;希望能帮到同样错误的同学
    展开

    作者回复: 谢谢你的分享!

    1
    4
  • 2018-11-16
    老师,这个域名得是真实存在的麽?

    作者回复: 是的,必须CA机构也能访问这个域名,如果你自建域名服务,CA机构访问不了,DV证书是不会颁发的。

    2
  • 2018-11-09
    cenos6.8不能安装python2-certbot-nginx?

    作者回复: 直接把certbot代码拖下来用也行。请参考这个页面:https://certbot.eff.org/docs/install.html

    2
  • 2019-05-26
    老师,您好,学完这节我有两个问题,项目是跑的8081(a项目)和8082(b项目)端口的情况下:
    第一个问题:nginx配置多域名,https多证书,能不能实现两个域名访问80端口展示不同项目(证书来源于阿里云ssl免费证书,下载后传上去,域名也是购买了的备案域名)
    第二个问题:http协议下,能否实现a域名访问a项目,b域名访问b项目,我现在实现了,a、b域名同时访问a项目、a/xxx或者b/xxx访问b项目,如果a、b域名分开配置,a的location /指向a项目,b的location /指向b项目,那么,b域名任然指向a项目。希望老师百忙之中,指点一下,谢谢了。
    展开

    作者回复: 1、可以,详见第47课。
    2、你是想说,http://b/指向b项目,http://b/otherurl指向a项目吗?可以,使用rewrite指令合适,详见第52课

    1
  • 2019-01-17
    [root@iz2zea99qngm2wop0tah5fz nginx-1.15.8]# certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d www.hwenip.com
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator nginx, Installer nginx
    Enter email address (used for urgent renewal and security notices) (Enter 'c' to
    cancel): 1648855816@qq.com
    Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
    certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d www.hwenip.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please read the Terms of Service at
    https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
    agree in order to register with the ACME server at
    https://acme-v02.api.letsencrypt.org/directory
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (A)gree/(C)ancel: A
    Unable to register an account with ACME server

    老师为什么我的和您的不同
    展开

    作者回复: 看一下日志/var/log/letsencrypt/letsencrypt.log,这样直接判断不出来

    1
  • 目前有2个问题
    1.Openresty是通过yum install方式安装的,并不是自己编译的,所以在进行ssl证书配置的时候,提示 Nginx build is missing SSL module,这个比较尴尬,是不是需要我自己编译一个with ssl module的nginx,然后替换Openresty下nignx呢
    2.视频中,总是会跳过一些步骤,导致在练习的时候发现这个没有,那个没有,比较费时。

    作者回复: 1、是的,要自己编译,否则后续课程中会加载许多默认没有添加进的模块,yum安装的没有办法跟着演示一起做。2、第3部分中考虑了这个问题,已经把完整的过程录入了。

    1
  • 2018-11-08
    老师,这个https和付费的https有什么差异呢

    作者回复: 付费的https也分DV证书、OV证书和EV证书。从安全传输这个角度来说,这三种证书效果一样。从浏览器对证书的认可上来,DV证书最差。如果你买的是付费的DV证书,跟这里的例子都一样,因为主流的浏览器都认Lets encrypt。

    1
  • k
    2019-11-26
    老师,我这里已经重新安装编译了nginx,
    [root@iZ2ze841dceuaqkayzbyk2Z sbin]# ./nginx -V
    nginx version: nginx/1.16.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
    built with OpenSSL 1.0.2k-fips 26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/opt --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
    但是一直提示我Nginx build is missing SSL module (--with-http_ssl_module).
    这个




    [root@iZ2ze841dceuaqkayzbyk2Z opt]# cat -n /var/log/letsencrypt/letsencrypt.log
         
         6 2019-11-26 11:03:27,175:DEBUG:certbot.plugins.selection:Requested authenticator nginx and installer nginx
         7 2019-11-26 11:03:27,278:DEBUG:certbot.plugins.disco:Other error:(PluginEntryPoint#nginx): Nginx build is missing SSL module (--with-http_ssl_module).
         8 Traceback (most recent call last):
         9 File "/usr/lib/python2.7/site-packages/certbot/plugins/disco.py", line 130, in prepare
        10 self._initialized.prepare()
        11 File "/usr/lib/python2.7/site-packages/certbot_nginx/configurator.py", line 199, in prepare
        12 self.version = self.get_version()
        13 File "/usr/lib/python2.7/site-packages/certbot_nginx/configurator.py", line 993, in get_version
        14 "Nginx build is missing SSL module (--with-http_ssl_module).")
        15 PluginError: Nginx build is missing SSL module (--with-http_ssl_module).
        16 2019-11-26 11:03:27,279:DEBUG:certbot.plugins.selection:No candidate plugin
        17 2019-11-26 11:03:27,279:DEBUG:certbot.plugins.selection:Selected authenticator None and installer None
    展开

    作者回复: 你是说configure就没有成功吗?如果你在CentOS上,你需要安装:yum install openssl-devel。其他系统类似。

  • 2019-11-21
    老师 有个问题搞不懂
    一个机器上配置了两个主机 m.abc.com(配置了ssl 可以使用https访问) 和n.abc.com(没有配置ssl 只能使用http访问)
    现在如果使用https://n.abc.com/a/v 为什么也能访问通 而且请求的内容是m.abc.com
    望老师解答

    作者回复: 我猜,是你的server {server_name m.bac.com;}配置块在处理这个https请求。
    因为:https访问的是443端口,而你在n.abc.com配的肯定是80端口。现在你访问443端口时,server_name没有拒绝域名不是m.abc.com的HTTP请求。你可以再看下server_name的配置方法,具体在第47课。

  • 配好ssl证书,启动nginx时,提示443占用,查看端口,如下:是什么意思?
    #lsof -i:443
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    nps 11498 root 5u IPv6 18329035 0t0 TCP VM_0_13_centos:https->123.14.255.18:37836 (ESTABLISHED)
    nps 11498 root 7u IPv6 18329054 0t0 TCP VM_0_13_centos:https->123.14.255.18:37838 (ESTABLISHED)
    nps 11498 root 13u IPv6 15220026 0t0 TCP *:https (LISTEN)
    展开

    作者回复: 有正在运行的进程占用了443端口,你是要确认到底是哪个进程占用吗?可以用netstat -anp | grep 443来查找

  • 老师,按您的配置,在腾讯云上配置后,提示:建立安全连接失败

    连接到 www.iotserver.vip 时发生错误。PR_END_OF_FILE_ERROR

        由于不能验证所收到的数据是否可信,无法显示您想要查看的页面。
        建议向此网站的管理员反馈这个问题。
    配置文件如下:
    #keepalive_timeout 0;
        keepalive_timeout 65;

        gzip on;
        gzip_comp_level 2;
        gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        server {
            listen 80;
            server_name iotserver.vip;

            #charset koi8-r;

            #access_log logs/host.access.log main;

            location / {
                alias /home/zx/soft/dist/;
                index index.html index.htm;
            }

            #error_page 404 /404.html;

            # redirect server error pages to the static page /50x.html
            #
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }

            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            # proxy_pass http://127.0.0.1;
            #}

            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            # root html;
            # fastcgi_pass 127.0.0.1:9000;
            # fastcgi_index index.php;
            # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
            # include fastcgi_params;
            #}

            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            # deny all;
            #}

        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/iotserver.vip/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/iotserver.vip/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    }

    展开

    作者回复: 先看看nginx本身有没有出错,error.log上有打印错误吗?
    其次,用wireshark抓个包看下。TLS有client hello和server hello的握手过程,中间有几个协商点,看看是不是网络安全套件出问题了,还是证书读取出问题了。参见《Web协议详解与抓包实战》第79、80课

  • 2019-05-21
    选择了不进行重定向后报这个错误:
    An unexpected error occurred:
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 1: ordinal not in range(128)
    Please see the logfiles in /var/log/letsencrypt for more details.

    IMPORTANT NOTES:
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
    展开

    作者回复: UnicodeDecodeError是python库的编码问题,可能是安装的库不匹配,在这个方向上继续定位看看。比如重新安装

  • 2019-05-21
    (A)gree/(C)ancel: A

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Would you be willing to share your email address with the Electronic Frontier
    Foundation, a founding partner of the Let's Encrypt project and the non-profit
    organization that develops Certbot? We'd like to send you email about our work
    encrypting the web, EFF news, campaigns, and ways to support digital freedom.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: y
    Starting new HTTPS connection (1): supporters.eff.org
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for lovedb.cn
    Cleaning up challenges
    An unexpected error occurred:
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 1: ordinal not in range(128)
    Please see the logfiles in /var/log/letsencrypt for more details.

    IMPORTANT NOTES:
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
    展开
  • 2019-03-27
    lamp环境 有自动脚本可以升级成https嘛?急!!!
  • 2019-01-30
    老师 你教的方式让人易懂 受教了 想问个问题 在做SSL的时候 一直提示这个错误 一般是什么原因呢The nginx plugin is not working; there may be problems with your existing configuration.
    The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.",
    展开

    作者回复: 没有找到nginx这个文件。你可以在/usr/bin等PATH路径下用ln -s建个软链接,链接到你实际安装的sbin/nginx文件上,即可

  • 2019-01-29
    陶老师您好,在这章我想跟着使用SSL证书配置的时候,用 pythons-certbot-nginx这个命令一直出现[root@37d8c2847125 sbin]# yum install python2-certbot-nginx
    Loaded plugins: fastestmirror, ovl
    Loading mirror speeds from cached hostfile
    ....
    No package python2-certbot-nginx available.
    Error: Nothing to do
    这样的错误,yum 也update过了,也根据您在留言中解答时说的下载了epel-realse;但是还是一直不行。网上找了一些办法试了也都不行,我使用的是centOS6;yum源下载的是阿里云的,请问有什么办法可以解决么?现在我不知道问题出在哪里,烦请您有空的时候解答一下如何配置,感谢。
    展开

    作者回复: 试试这个:wget https://dl.eff.org/certbot-auto
    chmod a+x certbot-auto
    或者再仔细看下这个页面:https://certbot.eff.org/lets-encrypt/centos6-nginx

  • 2019-01-22
    老师,为什么我在centos7.3里面用 yum install python2-certbot-nginx 命令装 certbot,执行certbot之后报了以下的错误:
    Traceback (most recent call last):
      File "/usr/bin/certbot", line 9, in <module>
        load_entry_point('certbot==0.29.1', 'console_scripts', 'certbot')()
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 487, in load_entry_point
        return get_distribution(dist).load_entry_point(group, name)
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2728, in load_entry_point
        return ep.load()
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2346, in load
        return self.resolve()
      File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2352, in resolve
        module = __import__(self.module_name, fromlist=['__name__'], level=0)
      File "/usr/lib/python2.7/site-packages/certbot/main.py", line 23, in <module>
        from certbot import client
      File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
        from acme import client as acme_client
      File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
        urllib3.contrib.pyopenssl.inject_into_urllib3()
    AttributeError: 'module' object has no attribute 'pyopenssl'
      
    应当如何解决呢?
    展开

    作者回复: 参考https://github.com/certbot/certbot/issues/6328

  • 2019-01-16
    请问下老师使用Certbot配置HTTPS,一定要注册真实域名吗?
    1.我自己NGINX服务器随便配置一个域名
    2.接着内网搭建一个DNS服务器,添加A记录,内网机器解析成功
    3.certbot --nginx报错
    To fix these errors, please make sure that your domain name was
       entered correctly and the DNS A/AAAA record(s) for that domain
       contain(s) the right IP address.
    展开

    作者回复: 一定要真实域名,参见第16课,对于CA机构来说,DV证书是需要验证域名的真实性的。

  • 2019-01-16
    前面有章节讲过openresty部署nginx吗?怎么这一节看的老师用的是openresty啊这一节课完全不能跟着操作啊

    作者回复: nginx和openresty没有区别的,用nginx也是一样的步骤。