下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 08 | 编译出适合自己的Nginx
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防火...

精选留言(79)

  • 2018-11-08
    我编译出来nginx的木有只有4个,conf,html,log,sbin;和老师的有区别,那里不对呢

    作者回复: 没有问题的!其他temp目录是nginx运行后,为了存放类似http body这样的临时文件而建立的。

    1
    14
  • 2018-11-06
    cp -r contrib/vim/* ~/.vim/

    之后会得到
    cp: target '/home/ubuntu/.vim/' is not a directory

    作者回复: 你试试先:mkdir ~/.vim,可能你的.vim目录从未建立过

    10
  • 2018-11-09
    ./configure 执行完报错
    error:the HHTP rewrite module requires the PCRE library

    nginx版本:nginx-1.14.1
    上面那位执行make报错的估计问题和我的一样

    作者回复: 你需要安装pcre库哦。如果是centos,请使用yum install pcre pcre-devel -y命令安装

    9
  • 2018-11-05
    干货到了。

    作者回复: 谢谢,希望对你有所帮助

    7
  • 2018-11-10
    我希望nginx未来能支持https,所以选了 --with-http_ssl_module,但是出现报错,
    checking for OpenSSL library ... not found
    checking for OpenSSL library in /usr/local/ ... not found
    checking for OpenSSL library in /usr/pkg/ ... not found
    checking for OpenSSL library in /opt/local/ ... not found

    ./configure: error: SSL modules require the OpenSSL library.
    You can either do not enable the modules, or install the OpenSSL library
    into the system, or build the OpenSSL library statically from the source
    with nginx by using --with-openssl=<path> option.
    展开

    作者回复: 你需要安装openssl,如果是centos系统,可以用yum install -y openssl openssl-devel来安装

    6
  • 2019-02-18
    macOS的命令行配置vim语法高亮,按照视频中操作无效,请问有遇到相同问题的吗?
    1
    4
  • 2018-11-18
    安装完后,安装目录下只有conf、html、logs和sbin四个目录,其他的:client_body_temp、fastcgi_temp、modules、proxy_temp、scgi_temp和uwsgi_temp目录,都没有

    作者回复: 这些目录需要运行nginx后才会由nginx进程自动生成。

    4
  • 2019-03-28
    老师,--prefix=/home/geek/nginx, make以及make install之后,我去nginx里面,是空文件夹啊,这是怎么回事呢

    作者回复: 安装成功了吗?是不是没权限?--prefix=指定为/usr/local/nginx试试?

    2
  • 2018-11-22
    老师,编译的时候生产环境是不是一般得指定一个用户,比如nginx。还是怎么处理呢?目前我们主管用的yum安装的nginx,这样是不是不利于升级。
    谢谢!

    作者回复: 是的,指定worker进程的运行用户。用yum安装但很难用yum升级,热升级依赖我们对nginx的高度可控。

    2
  • 2018-11-19
    全都是干货,这是极客时间最干的货了,学习中,感谢老师的精彩讲解,每个点每个细节讲的都很到位!

    作者回复: 谢谢!非常高兴能帮到你!

    2
  • 2018-11-07
    老师。我配了一个A主机nginx的 代理B,C两个服务,单独代理B和C都可以访问,但是把BC合并在一个一起,在http模块配置一个upstream, 再通过proxy_pass,就代理不行了。err_log显示不可访问, upstream up_servers {
          server 10.19.2.5:80;
          server 10.19.2.27:80;
        }
    location /forum/ {
       proxy_pass http://up_servers ;
    }
    之前还是可以的,又一次改其他配置忘记改了什么,就不行了,请问怎么解决
    展开

    作者回复: 能把完整的nginx.conf以及error.log发我看看吗?我的邮箱russelltao@foxmail.com

    2
  • 2019-04-28
    ./configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib=<path> option.

    老师 我已经安装了gzip 然后还是有提示上述报错
    展开

    作者回复: 安装下开发版,例如yum install zlib-devel

    1
  • 2018-12-12
    老师,我编译安装完成后geek/nginx下面是空的,啥原因?

    作者回复: configure时是不是没有用prefix指定安装目录?那应该默认安装到/usr/local/nginx目录下了

    1
  • 2019-11-27
    执行了./configure --prefix=/etc/nginx 命令,运行成功,但是找不到/etc/nginx这个文件夹

    作者回复: make install时才会建立

  • 2019-11-17
    谢谢老师的作品,一直想搭建一个自己的博客,这次双11服务器打折,从0开始学习linux,再学习老师的nginx教程,受益颇丰,
    安装中遇到的问题,基本都可以在网上或是评论区找到答案,也对linux系统的一些基础知识加深了理解。

    作者回复: ^_^

  • 2019-10-22
    老师编译安装的 怎么彻底卸载啊

    作者回复: 把你安装的目录删除就行了,比如configure --prefix=/usr/local/nginx,那么把nginx目录整个删除就行了。如果你安装到已存在目录里,比如bin文件、conf文件都散落在已存在目录,那么需要把生成的文件删除即可。

  • 2019-09-25
    老师好,能在详解下这个是什么作用原理吗?cp -r contrib/vim/* ~/.vim 这句看似就是一个复制啊 为什么会自动检测语法呢?

    作者回复: 因为vim有自定义功能,它会自动读取~/.vim下的文件(如果有的话),这些文件会定义何种语法以何种颜色显示

  • 老师您好:观看您的课程有段时间了,感觉讲的非常细,很实用。不知道您现在是否还会关注课程动态,我在实际工作中遇到了点儿关于配置ssl的问题,http访问php测试页可以正常返回php版本信息,但https就午饭返回,其中chrome和opera返回“ERR_SSL_PROTOCOL_ERROR”、firefox返回“SSL 接收到一个超出最大准许长度的记录。 错误代码:SSL_ERROR_RX_RECORD_TOO_LONG ”证书是通配符证书“*.picovr.com”(证书是可用的目前有一些https站点正在使用,2021年到期) 域名是“test.us-dev.picovr.com”,服务器是AWS的EC2,443、80/81端口均已开放,nginx访问无错误日志,如果您能看见的话,希望您帮忙提供下解决思路,谢谢。配置文件如下:server {
            listen 81;
            listen 443 ssl;
            server_name test.us-dev.picovr.com;
            root /var/www/html;
            client_max_body_size 2048M;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
            ssl_certificate /etc/nginx/cert/2616062__picovr.com.pem;
            ssl_certificate_key /etc/nginx/cert/2616062__picovr.com.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers on;

            location / {
                index index.html index.php;
                try_files $uri /app.php$is_args$args;
                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_pass http://test.us-dev.picovr.com:81;
                proxy_redirect default;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
            location ~ ^/(app_dev|config)\.php(/|$) {
                fastcgi_pass 127.0.0.1:9000;
                #fastcgi_pass unix:/var/run/php-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /var/www/html/frontend/web$fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT /var/www/html/frontend/web;
                    #$realpath_root;
            }
           
    展开

    作者回复: 我访问https://test.us-dev.picovr.com/站点得到的错误是你的证书与域名不匹配:
    “Firefox 不能信任此网站,它使用的证书对 test.us-dev.picovr.com 无效。该证书只适用于下列名称: *.picovr.com, picovr.com
     
    错误代码:SSL_ERROR_BAD_CERT_DOMAIN”

  • 2019-08-27
    老师,Makefile中的 $(MAKE) 我搜了一下说是指向当前使用的Make工具。 但我还是不太理解这句话是什么意思,它代表的是什么命令,是 make 吗

    作者回复: 你是说configure生成的objs/Makefile吗?我在1.15.7里并没有看到你说的宏。
    如果你想分析编译过程,建议看下源代码中的auto目录中的文件。通常Linux下都是使用gcc工具,你可以看到auto/cc/gcc文件

  • 讲的太好了,买了好多课,这个是最喜欢的。赞赞

    作者回复: 很高兴对你有帮助!