本文主要内容如下(让读者朋友们深入浅出地理解 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 怎么样安装?
过去我写了不少文章,可供大家参考:
Windows安装Nginx
Centos7之Java开发环境构建(包含Nginx安装)
Ubuntu16.04之开发环境构建(包含Nginx安装)
七、Nginx 常用的配置包含哪些?以及是怎么配置的?
1.Nginx 怎样配置 HTTPS?
代码语言:javascript复制
这个是我官网的证书配置,大家可访问分布式微服务框架:YC-Framework官网查看效果。
2.Nginx 开启 SSL 以后如何将 HTTP 重定向到 HTTPS 呢?
YC-Framework官网
采用的是第二种方法。
(1)第一种方法
(2)第二种方法
代码语言:javascript复制
(3)Nginx 如何配置静态资源映射?
(4)Nginx 如何代理内部服务器某个中间件(如 MySQL)?
代码语言:javascript复制
(5)Nginx 如何配置跨域?
代码语言:javascript复制
(6)Nginx 如何配置限制连接?
(7)Nginx 如何配置限制下载速度?
代码语言:javascript复制
(8)Nginx 如何限制 IP 访问?
代码语言:javascript复制该配置可放 server 和 location 中。
(9)Nginx 如何配置 HTTP Basic 认证?
代码语言:javascript复制
详情可阅读这篇文章为 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)权重策略
代码语言:javascript复制
(3)ip_hash 策略
(4)最少连接策略
代码语言:javascript复制
(5)fair 策略
代码语言:javascript复制
(6)url_hash 策略
代码语言:javascript复制
八、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
代码语言:javascript复制
6.强制域名访问(必须开启 SSL 保护)
7.用户降低权限
代码语言:javascript复制
8.禁止目录浏览
代码语言:javascript复制
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 源代码目录为如下:
代码语言:javascript复制
十、总结
光凭这一篇文章很难深入到 Nginx 的各种细节当中,不过此文章着重体现两个方面,第一个方面是 Nginx 各种配置示例(基本来源于我个人架构生涯中的 Nginx 实战),第二个方面总览 Nginx 架构,明确架构核心、启动流程、源代码目录的含义等(读者朋友可根据自己需要进行查阅相关资料并深入学习实践等)。
来源:
https://xie.infoq.cn/article/72cc968ec9edaf72c2180e67d
“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com
来都来了,走啥走,留个言呗~
IT大咖说 | 关于版权
由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!
感谢您对IT大咖说的热心支持!
- 相关推荐
- 推荐文章
- 技术专家带你彻底掌握线程池
- 基于GF的后台管理系统,完善的权限用户管理,致力于快速高效开发
- Java 工程师相见恨晚的神兵利器和使用技巧
- MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化
- 高可用架构之 Sentinel 的降级原理详解
- .NET 6 从0到1使用Docker部署至Linux环境
- 中高级程序员可能都不会使用spring-boot-starter-jdbc访问MySQL
- 作为一名程序员,你还需要会画图
- DPDK的基本原理、学习路线总结