深入浅出 Nginx 实战与架构原理
本文主要内容如下(让读者朋友们深入浅出地理解 Nginx,有代码有示例有图):
1.Nginx 是什么?
2.Nginx 具有哪些功能?
3.Nginx 的应用场景有哪些?
4.Nginx 的衍生生态有哪些?
5.Nginx 开源相关资料有哪些?
6.Nginx 怎么样安装?
7.Nginx 常用的配置包含哪些?以及是怎么配置的?
8.Nginx 的安全策略需要从哪些方面考虑?
9.Nginx 架构是怎样的?
10.总结
一、Nginx 是什么?
Nginx 是一款免费开源的高性能 HTTP 服务器及反向代理服务器产品。
二、Nginx 具有哪些功能?
1.正向代理与反向代理。
2.负载均衡。
3.Web 缓存。
4.动静分离。
三、Nginx 的应用场景有哪些?
从我个人的实践经验出发,我用 Nginx 做了这么几件事情,如下所示:
1.个人网站(如 YC-Framework 官网就是放在 Nginx 对应的目录下)或者是公司官网。
2.外部网关代理(内部网关用 SpringCloud Gateway,外部网关用 Nginx)。
3.基于 Nginx+FTP 的文件服务搭建。
4.Nginx 代理后端服务集群(负载均衡机制的体现)。
5.基于 Nginx Basic 认证控制系统访问权限。
6.内网映射代理。
7.配置 https。
8.黑白名单。
四、Nginx 的衍生生态有哪些?
衍生生态比较出名的一个叫 Openresty。Openresty 是一款基于 Nginx 和 LuaJIT 的 Web 平台,它既具有 Nginx 拥有的功能,同时由于大量精良的 Lua 库,使其更加灵活,能构造出很多玩法。一句话概括,功能更强大了。
关于 Openresty 安装可以阅读我的这篇文章:OpenResty源码编译安装
五、Nginx 开源相关资料有哪些?
Nginx 官方网站:https://nginx.org/en/
Nginx 官方文档:http://nginx.org/en/docs/contributing_changes.html
Nginx 源代码:https://github.com/nginx/nginx
如果大家觉得英文方面阅读方面有一些困难,不用担心。一方面可以借助 Google 翻译或其它翻译工具降低阅读困难,另外一方面可借助国内内容网站所包含的丰富内容(如博客园、知乎、掘金、51CTO、思否、CSDN 等这样的)。
除此之外,Nginx 的商业化解决方案可供一些朋友参考,Nginx 的商业网站:https://www.nginx.com/
六、Nginx 怎么样安装?
过去我写了不少文章,可供大家参考:
【文章福利】另外小编还整理了一些 C++后端开发面试题,教学视频,后端学习路线图免费分享,需要的可以自行添加:学习交流群点击加入~ 群文件共享
小编强力推荐 C++后端开发免费学习地址:C/C++Linux服务器开发高级架构师/C++后台开发架构师
七、Nginx 常用的配置包含哪些?以及是怎么配置的?
1.Nginx 怎样配置 HTTPS?
这个是我官网的证书配置,大家可访问分布式微服务框架:YC-Framework官网查看效果。
2.Nginx 开启 SSL 以后如何将 HTTP 重定向到 HTTPS 呢?
采用的是第二种方法。
(1)第一种方法
(2)第二种方法
(3)Nginx 如何配置静态资源映射?
(4)Nginx 如何代理内部服务器某个中间件(如 MySQL)?
(5)Nginx 如何配置跨域?
(6)Nginx 如何配置限制连接?
(7)Nginx 如何配置限制下载速度?
(8)Nginx 如何限制 IP 访问?
该配置可放 server 和 location 中。
(9)Nginx 如何配置 HTTP Basic 认证?
详情可阅读这篇文章为 Nginx 添加 HTTP 基本认证(HTTP Basic Authentication)
(10)Nginx 如何配置超时时间?
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
(11)Nginx 请求体过大怎么办?
这种场景通常出现在 Nginx 代理后端服务中。问题的报错信息如下:
413 Request Entity Too Large
解决办法配置如下即可:
client_max_body_size 20m;
(12)Nginx 如何配置负载均衡?
Nginx 负载均衡有六种策略,分别是轮询、权重、ip_hash、最少连接、fair、url_hash 等)。
(1)轮询策略
(2)权重策略
(3)ip_hash 策略
(4)最少连接策略
(5)fair 策略
(6)url_hash 策略
八、Nginx 的安全策略需要从哪些方面考虑?
1.隐藏 Nginx 版本信息,防止对应的攻击者通过版本漏洞来攻击
server_tokens off;
2.限制 HTTP 请求方式
HTTP 请求一共有九种,分别为 GET、POST、Head、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT 等。
这里我仅仅只允许 GET 与 POST:
3.自定义 Nginx 缓存
4.过滤非法 USER-AGENT(简称 UA)
5.过滤不支持 URL
6.强制域名访问(必须开启 SSL 保护)
7.用户降低权限
8.禁止目录浏览
9.限制文件上传大小
client_max_body_size 18m
10.关注 Nginx 所使用版本的漏洞情况,并适时更新
关于 Nginx 相关版本信息可访问如下网址获取(Nginx 下载地址):https://nginx.org/en/download.html
当然了,这仅仅是从 Nginx 的安全角度出发,光从 Nginx 出发只能在一定程度上保障 Nginx 本身的安全,还是得从服务器层面乃至制度层面入手。
九、Nginx 架构是怎样的?
1.Nginx 架构设计的核心主要包含哪些方面?
由图可知,架构设计的核心主要体现如下:
(1)模块化设计。
(2)代理设计。
(3)事件驱动模型。
(4)主进程模型。
(5)工作进程模型。
2.Nginx 启动流程是怎样的?
3.Nginx 源代码对应的目录是什么意思?
Nginx 源代码目录为如下:
十、总结
光凭这一篇文章很难深入到 Nginx 的各种细节当中,不过此文章着重体现两个方面,第一个方面是 Nginx 各种配置示例(基本来源于我个人架构生涯中的 Nginx 实战),第二个方面总览 Nginx 架构,明确架构核心、启动流程、源代码目录的含义等(读者朋友可根据自己需要进行查阅相关资料并深入学习实践等)。
参考资料
推荐一个零声教育 C/C++后台开发的免费公开课程,个人觉得老师讲得不错,分享给大家:C/C++后台开发高级架构师,内容包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
评论