深入浅出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怎么样安装?

过去我写了不少文章,可供大家参考:

Windows安装Nginx

Centos7之Java开发环境构建(包含Nginx安装)

Ubuntu16.04之开发环境构建(包含Nginx安装)

七、Nginx常用的配置包含哪些?以及是怎么配置的?

1.Nginx怎样配置HTTPS?

这个是我官网的证书配置,大家可访问分布式微服务框架:YC-Framework官网查看效果。

2.Nginx开启SSL以后如何将HTTP重定向到HTTPS呢?

YC-Framework官网采用的是第二种方法。

(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如何配置超时时间?

(11)Nginx请求体过大怎么办?

这种场景通常出现在Nginx代理后端服务中。问题的报错信息如下:

解决办法配置如下即可:

(12)Nginx如何配置负载均衡?

Nginx负载均衡有六种策略,分别是轮询、权重、ip_hash、最少连接、fair、url_hash等)。

(1)轮询策略

(2)权重策略

(3)ip_hash策略

(4)最少连接策略

(5)fair策略

(6)url_hash策略

八、Nginx的安全策略需要从哪些方面考虑?

1.隐藏Nginx版本信息,防止对应的攻击者通过版本漏洞来攻击

2.限制HTTP请求方式

HTTP请求一共有九种,分别为GET、POST、Head、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT等。

这里我仅仅只允许GET与POST:

3.自定义Nginx缓存

4.过滤非法USER-AGENT(简称UA)

if ($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan" ) {
    return 403;
}

5.过滤不支持URL

6.强制域名访问(必须开启SSL保护)

7.用户降低权限

8.禁止目录浏览

9.限制文件上传大小

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架构,明确架构核心、启动流程、源代码目录的含义等(读者朋友可根据自己需要进行查阅相关资料并深入学习实践等)

小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【999】即可免费获取


版权声明:本文为m0_67322837原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。