如何通过深入浅出的方式掌握Nginx实战与架构?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1997个文字,预计阅读时间需要8分钟。
1. Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也能作为邮件(IMAP/POP3)代理服务器使用。它以其轻量级、稳定性高和配置灵活而闻名。
2. Nginx 具有以下功能: - 高并发处理能力,适合处理大量并发连接。 - 负载均衡,可以将请求分发到多个服务器。 - 动态内容生成,支持CGI、FastCGI、SCGI、PHP、Python等。 - 支持SSL/TLS加密。 - 日志记录功能强大,便于监控和分析。
3. Nginx 的应用场景包括: - Web 服务器,替代 Apache。 - 反向代理服务器,提高网站访问速度和安全性。 - 负载均衡器,分散请求到多个服务器。 - API 服务器,处理大量并发请求。 - 内容分发网络(CDN)节点。
4. Nginx 的特点包括: - 高效的内存使用,占用资源少。 - 支持热部署,无需重启服务。 - 支持模块化设计,可根据需求添加功能。
5. Nginx 相关资源: - 官方文档:[Nginx 官方文档](http://nginx.org/en/docs/) - 社区论坛:[Nginx 官方论坛](http://forum.nginx.org/)
本文主要内容如下(让读者朋友们深入浅出地理解Nginx,有代码有示例有图):
- 1.Nginx是什么?
- 2.Nginx具有哪些功能?
- 3.Nginx的应用场景有哪些?
- 4.Nginx的衍生生态有哪些?
- 5.Nginx开源相关资料有哪些?
- 6.Nginx怎么样安装?
- 7.Nginx常用的配置包含哪些?以及是怎么配置的?
- 8.Nginx的安全策略需要从哪些方面考虑?
- 9.Nginx架构是怎样的?
- 10.总结
Nginx是一款免费开源的高性能HTTP服务器及反向代理服务器产品。
二、Nginx具有哪些功能?- 1.正向代理与反向代理。
- 2.负载均衡。
- 3.Web缓存。
- 4.动静分离。
从我个人的实践经验出发,我用Nginx做了这么几件事情,如下所示:
- 1.个人网站(如YC-Framework官网就是放在Nginx对应的目录下)或者是公司官网。
- 2.外部网关代理(内部网关用SpringCloud Gateway,外部网关用Nginx)。
- 3.基于Nginx+FTP的文件服务搭建。
- 4.Nginx代理后端服务集群(负载均衡机制的体现)。
- 5.基于Nginx Basic认证控制系统访问权限。
- 6.内网映射代理。
- 7.配置nginx.org/en/
Nginx官方文档:
nginx.org/en/docs/contributing_changes.htmlNginx源代码:
github.com/nginx/nginx如果大家觉得英文方面阅读方面有一些困难,不用担心。一方面可以借助Google翻译或其它翻译工具降低阅读困难,另外一方面可借助国内内容网站所包含的丰富内容(如自由互联、知乎、掘金、51CTO、思否、CSDN等这样的)。
除此之外,Nginx的商业化解决方案可供一些朋友参考,Nginx的商业网站:
六、Nginx怎么样安装?
www.nginx.com/过去我写了不少文章,可供大家参考:
Windows安装Nginx
Centos7之Java开发环境构建(包含Nginx安装)
Ubuntu16.04之开发环境构建(包含Nginx安装)
七、Nginx常用的配置包含哪些?以及是怎么配置的? 1.Nginx怎样配置HTTPS?server { listen 443 ssl; server_name framework.youcongtech.com; ssl_certificate /home/tech/7788450_framework.youcongtech.com.pem; ssl_certificate_key /home/tech/7788450_framework.youcongtech.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ /index.html; root /home/tech/project/yc-framework-docs; index index.html index.htm; # root html; # index index.html index.htm; } }
这个是我官网的证书配置,大家可访问分布式微服务框架:YC-Framework官网查看效果。
2.Nginx开启SSL以后如何将HTTP重定向到HTTPS呢?YC-Framework官网采用的是第二种方法。
(1)第一种方法server { listen 80; server_name localhost; return 301 127.0.0.1$request_uri; }
(2)第二种方法server { listen 80; server_name localhost; rewrite ^(.*)$ $host$1 permanent; }
(3)Nginx如何配置静态资源映射?location /img/ { alias /home/tech/img/; autoindex on; } (4)Nginx如何代理内部服务器某个中间件(如MySQL)?
stream { upstream inner_mysql { hash $remote_addr consistent; server 192.168.1.188:3389 weight=5 max_fails=3 fail_timeout=30s; } server { listen 17865; # 数据库服务器监听端口 proxy_connect_timeout 60s; proxy_timeout 300s; # 设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。 proxy_pass inner_mysql; } } (5)Nginx如何配置跨域?
#允许跨域请求的域,* 代表所有 add_header 'Access-Control-Allow-Origin' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET,POST,PUT,DELETE add_header 'Access-Control-Allow-Methods' *;
(6)Nginx如何配置限制连接?location / { root /var/www/test; index index.php index.html index.htm; limit_conn addr 5; #是限制每个IP只能发起5个连接 }
(7)Nginx如何配置限制下载速度?location /download { limit_rate_after 10m; limit_rate 128k; } (8)Nginx如何限制IP访问?
# 允许部分ip访问 allow 123.45.25.6; allow 123.68.52.125; allow 123.125.25.106; # 禁止其余ip访问 deny all;
该配置可放server和location中。
(9)Nginx如何配置HTTP Basic认证?location / { auth_basic "网站名称"; auth_basic_user_file conf.d/passwd; autoindex on; }
详情可阅读这篇文章为 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)轮询策略upstream backup-server { server 192.168.1.101:8080; server 192.168.1.102:8080; } (2)权重策略
upstream backup-server { server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; } (3)ip_hash策略
upstream backup-server { ip_hash; server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; } (4)最少连接策略
upstream backup-server { least_conn; server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; }
(5)fair策略upstream backup-server { server 192.168.1.101:8080; server 192.168.1.102:8080; fair; }
(6)url_hash策略upstream backup-server { hash $request_uri; server 192.168.1.101:8080; server 192.168.1.102:8080; }
八、Nginx的安全策略需要从哪些方面考虑? 1.隐藏Nginx版本信息,防止对应的攻击者通过版本漏洞来攻击server_tokens off;
2.限制HTTP请求方式HTTP请求一共有九种,分别为GET、POST、Head、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT等。
这里我仅仅只允许GET与POST:
if ($request_method !~ ^(GET|POST)$ ) { return 404; } 3.自定义Nginx缓存
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 4.过滤非法USER-AGENT(简称UA)
if ($nginx.org/en/download.html
当然了,这仅仅是从Nginx的安全角度出发,光从Nginx出发只能在一定程度上保障Nginx本身的安全,还是得从服务器层面乃至制度层面入手。服务器层面我曾写过一些文章,可供读者朋友参考:
九、Nginx架构是怎样的? 1.Nginx架构设计的核心主要包含哪些方面?
服务器安全策略之思考与实践由图可知,架构设计的核心主要体现如下:
- (1)模块化设计。
- (2)代理设计。
- (3)事件驱动模型。
- (4)主进程模型。
- (5)工作进程模型。
Nginx源代码目录为如下:
- core (该目录存放core module的代码,也是nginx服务的入口) - event (nginx 自身对事件处理逻辑的封装) - http (http core module 的代码,nginx作为web/http proxy server运行时的核心模块) - mail (mail core module 的代码,nginx作为pop3/imap/smtp proxy server运行时的核心模块) - misc (nginx 的一些utils,定义了test和profiler的一些外围模块的逻辑) - os (nginx对各个平台抽象逻辑的封装) - stream (nginx用来实现四层协议的转发、代理和负载均衡) 十、总结
光凭这一篇文章很难深入到Nginx的各种细节当中,不过此文章着重体现两个方面,第一个方面是Nginx各种配置示例(基本来源于我个人架构生涯中的Nginx实战),第二个方面总览Nginx架构,明确架构核心、启动流程、源代码目录的含义等(读者朋友可根据自己需要进行查阅相关资料并深入学习实践等)。
本文共计1997个文字,预计阅读时间需要8分钟。
1. Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也能作为邮件(IMAP/POP3)代理服务器使用。它以其轻量级、稳定性高和配置灵活而闻名。
2. Nginx 具有以下功能: - 高并发处理能力,适合处理大量并发连接。 - 负载均衡,可以将请求分发到多个服务器。 - 动态内容生成,支持CGI、FastCGI、SCGI、PHP、Python等。 - 支持SSL/TLS加密。 - 日志记录功能强大,便于监控和分析。
3. Nginx 的应用场景包括: - Web 服务器,替代 Apache。 - 反向代理服务器,提高网站访问速度和安全性。 - 负载均衡器,分散请求到多个服务器。 - API 服务器,处理大量并发请求。 - 内容分发网络(CDN)节点。
4. Nginx 的特点包括: - 高效的内存使用,占用资源少。 - 支持热部署,无需重启服务。 - 支持模块化设计,可根据需求添加功能。
5. Nginx 相关资源: - 官方文档:[Nginx 官方文档](http://nginx.org/en/docs/) - 社区论坛:[Nginx 官方论坛](http://forum.nginx.org/)
本文主要内容如下(让读者朋友们深入浅出地理解Nginx,有代码有示例有图):
- 1.Nginx是什么?
- 2.Nginx具有哪些功能?
- 3.Nginx的应用场景有哪些?
- 4.Nginx的衍生生态有哪些?
- 5.Nginx开源相关资料有哪些?
- 6.Nginx怎么样安装?
- 7.Nginx常用的配置包含哪些?以及是怎么配置的?
- 8.Nginx的安全策略需要从哪些方面考虑?
- 9.Nginx架构是怎样的?
- 10.总结
Nginx是一款免费开源的高性能HTTP服务器及反向代理服务器产品。
二、Nginx具有哪些功能?- 1.正向代理与反向代理。
- 2.负载均衡。
- 3.Web缓存。
- 4.动静分离。
从我个人的实践经验出发,我用Nginx做了这么几件事情,如下所示:
- 1.个人网站(如YC-Framework官网就是放在Nginx对应的目录下)或者是公司官网。
- 2.外部网关代理(内部网关用SpringCloud Gateway,外部网关用Nginx)。
- 3.基于Nginx+FTP的文件服务搭建。
- 4.Nginx代理后端服务集群(负载均衡机制的体现)。
- 5.基于Nginx Basic认证控制系统访问权限。
- 6.内网映射代理。
- 7.配置nginx.org/en/
Nginx官方文档:
nginx.org/en/docs/contributing_changes.htmlNginx源代码:
github.com/nginx/nginx如果大家觉得英文方面阅读方面有一些困难,不用担心。一方面可以借助Google翻译或其它翻译工具降低阅读困难,另外一方面可借助国内内容网站所包含的丰富内容(如自由互联、知乎、掘金、51CTO、思否、CSDN等这样的)。
除此之外,Nginx的商业化解决方案可供一些朋友参考,Nginx的商业网站:
六、Nginx怎么样安装?
www.nginx.com/过去我写了不少文章,可供大家参考:
Windows安装Nginx
Centos7之Java开发环境构建(包含Nginx安装)
Ubuntu16.04之开发环境构建(包含Nginx安装)
七、Nginx常用的配置包含哪些?以及是怎么配置的? 1.Nginx怎样配置HTTPS?server { listen 443 ssl; server_name framework.youcongtech.com; ssl_certificate /home/tech/7788450_framework.youcongtech.com.pem; ssl_certificate_key /home/tech/7788450_framework.youcongtech.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ /index.html; root /home/tech/project/yc-framework-docs; index index.html index.htm; # root html; # index index.html index.htm; } }
这个是我官网的证书配置,大家可访问分布式微服务框架:YC-Framework官网查看效果。
2.Nginx开启SSL以后如何将HTTP重定向到HTTPS呢?YC-Framework官网采用的是第二种方法。
(1)第一种方法server { listen 80; server_name localhost; return 301 127.0.0.1$request_uri; }
(2)第二种方法server { listen 80; server_name localhost; rewrite ^(.*)$ $host$1 permanent; }
(3)Nginx如何配置静态资源映射?location /img/ { alias /home/tech/img/; autoindex on; } (4)Nginx如何代理内部服务器某个中间件(如MySQL)?
stream { upstream inner_mysql { hash $remote_addr consistent; server 192.168.1.188:3389 weight=5 max_fails=3 fail_timeout=30s; } server { listen 17865; # 数据库服务器监听端口 proxy_connect_timeout 60s; proxy_timeout 300s; # 设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。 proxy_pass inner_mysql; } } (5)Nginx如何配置跨域?
#允许跨域请求的域,* 代表所有 add_header 'Access-Control-Allow-Origin' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET,POST,PUT,DELETE add_header 'Access-Control-Allow-Methods' *;
(6)Nginx如何配置限制连接?location / { root /var/www/test; index index.php index.html index.htm; limit_conn addr 5; #是限制每个IP只能发起5个连接 }
(7)Nginx如何配置限制下载速度?location /download { limit_rate_after 10m; limit_rate 128k; } (8)Nginx如何限制IP访问?
# 允许部分ip访问 allow 123.45.25.6; allow 123.68.52.125; allow 123.125.25.106; # 禁止其余ip访问 deny all;
该配置可放server和location中。
(9)Nginx如何配置HTTP Basic认证?location / { auth_basic "网站名称"; auth_basic_user_file conf.d/passwd; autoindex on; }
详情可阅读这篇文章为 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)轮询策略upstream backup-server { server 192.168.1.101:8080; server 192.168.1.102:8080; } (2)权重策略
upstream backup-server { server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; } (3)ip_hash策略
upstream backup-server { ip_hash; server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; } (4)最少连接策略
upstream backup-server { least_conn; server 192.168.1.101:8080 weigh=5; server 192.168.1.102:8080 weigh=6; }
(5)fair策略upstream backup-server { server 192.168.1.101:8080; server 192.168.1.102:8080; fair; }
(6)url_hash策略upstream backup-server { hash $request_uri; server 192.168.1.101:8080; server 192.168.1.102:8080; }
八、Nginx的安全策略需要从哪些方面考虑? 1.隐藏Nginx版本信息,防止对应的攻击者通过版本漏洞来攻击server_tokens off;
2.限制HTTP请求方式HTTP请求一共有九种,分别为GET、POST、Head、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT等。
这里我仅仅只允许GET与POST:
if ($request_method !~ ^(GET|POST)$ ) { return 404; } 3.自定义Nginx缓存
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 4.过滤非法USER-AGENT(简称UA)
if ($nginx.org/en/download.html
当然了,这仅仅是从Nginx的安全角度出发,光从Nginx出发只能在一定程度上保障Nginx本身的安全,还是得从服务器层面乃至制度层面入手。服务器层面我曾写过一些文章,可供读者朋友参考:
九、Nginx架构是怎样的? 1.Nginx架构设计的核心主要包含哪些方面?
服务器安全策略之思考与实践由图可知,架构设计的核心主要体现如下:
- (1)模块化设计。
- (2)代理设计。
- (3)事件驱动模型。
- (4)主进程模型。
- (5)工作进程模型。
Nginx源代码目录为如下:
- core (该目录存放core module的代码,也是nginx服务的入口) - event (nginx 自身对事件处理逻辑的封装) - http (http core module 的代码,nginx作为web/http proxy server运行时的核心模块) - mail (mail core module 的代码,nginx作为pop3/imap/smtp proxy server运行时的核心模块) - misc (nginx 的一些utils,定义了test和profiler的一些外围模块的逻辑) - os (nginx对各个平台抽象逻辑的封装) - stream (nginx用来实现四层协议的转发、代理和负载均衡) 十、总结
光凭这一篇文章很难深入到Nginx的各种细节当中,不过此文章着重体现两个方面,第一个方面是Nginx各种配置示例(基本来源于我个人架构生涯中的Nginx实战),第二个方面总览Nginx架构,明确架构核心、启动流程、源代码目录的含义等(读者朋友可根据自己需要进行查阅相关资料并深入学习实践等)。

