深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Nginx概述 

二、Nginx核心功能

1、URL重写与重定向

2、反向代理

3、负载均衡

4、访问控制

5、SSL/TLS配置

三、Nginx模块讲解

1、HTTP模块

2、Stream模块

四、Nginx实际应用

1、Nginx在Web开发中的应用

2、Nginx在CDN中的应用 


一、前言

1、Nginx概述 

Nginx("engine x"的发音类似于"引擎 X")是一款高性能的开源Web服务器和反向代理服务器,由Igor Sysoev创建,并于2004年首次公开发布。它以其卓越的性能、高度的可靠性、简单的配置和低资源消耗而闻名。

以下是Nginx的概述:

  1. 高性能:Nginx以其高效的事件驱动架构而闻名,能够处理大量并发连接和高流量。它使用异步非阻塞I/O模型,有效地处理客户端请求,并且在高负载下表现优异。
  2. 反向代理:Nginx作为反向代理服务器时,可以接收客户端的请求并将其转发给后端服务器。它能够进行负载均衡、缓存静态内容、处理SSL终止等操作,提高了Web应用程序的性能和可靠性。
  3. 负载均衡:Nginx可以将请求分发给多个后端服务器,以实现负载均衡。通过配置不同的负载均衡算法,例如轮询、IP哈希、最少连接等,可以根据不同的需求实现请求的合理分发。
  4. 静态文件服务:Nginx非常擅长提供静态文件服务,能够高效地提供HTML、CSS、JavaScript、图像等静态内容,并且支持文件压缩和HTTP缓存等功能。
  5. 反向代理缓存:Nginx可以缓存后端服务器返回的响应,以减轻后端服务器的负载并提高响应速度。它支持不同类型的缓存,包括文件缓存、内存缓存和代理缓存等。
  6. HTTPS支持:Nginx支持SSL/TLS协议,能够进行HTTPS加密通信,并且支持SSL终止、SSL重定向、证书验证等功能,保障了Web应用程序的安全性。
  7. 简单配置:Nginx的配置文件采用简洁直观的语法,易于理解和维护。它支持模块化配置,可以通过加载不同的模块来扩展其功能,满足不同的需求。
  8. 高度可扩展:Nginx是一个模块化的Web服务器,可以通过加载不同的模块来扩展其功能,例如HTTP反向代理、负载均衡、缓存、安全性等。这使得Nginx可以根据不同的需求进行定制和扩展,适用于各种规模和类型的Web应用程序。

  

二、Nginx核心功能

1、URL重写与重定向

在 Nginx 中,URL 重写和重定向是常见的任务,用于处理客户端请求并将其发送到适当的位置。它们经常用于修改 URL 结构、处理旧 URL、执行 URL 路由等。

下面是 Nginx 中的 URL 重写和重定向的概念和用法:

URL 重写(URL Rewriting)

  • URL 重写是指修改客户端请求的 URL 路径,而不改变客户端看到的 URL。这个过程通常在 Nginx 的配置文件中通过 rewrite 指令来完成。URL 重写可以用于修改 URL 结构、处理错误的 URL 请求等。

例如,假设想要将所有 /old-url 的请求重写到 /new-url,可以使用如下配置:

location /old-url {rewrite ^/old-url/(.*)$ /new-url/$1 permanent;
}

  • 这个配置中的 rewrite 指令将匹配以 /old-url 开头的 URL,然后将其重写为以 /new-url 开头的 URL,并使用 permanent 关键字表示这是一个永久重定向。重定向后的 URL 将保留原始的查询参数。

 

URL 重定向(URL Redirection)

  • URL 重定向是指将客户端请求的 URL 重定向到另一个 URL 地址。这个过程会向客户端返回一个 HTTP 状态码(如 301 永久重定向或 302 临时重定向),告诉客户端要跳转到另一个 URL。
  • 在 Nginx 中,可以使用 return 指令或 rewrite 指令来实现 URL 重定向。

例如,要将所有访问根目录的请求重定向到一个新的域名,可以使用如下配置:
 

server {listen 80;server_name old-domain.com;location / {return 301 http://new-domain.com$request_uri;}
}

  • 这个配置中的 return 指令将所有访问 old-domain.com 根目录的请求重定向到 new-domain.com。

 

URL 重写用于修改 URL 路径,而 URL 重定向则用于将客户端请求重定向到另一个 URL 地址。这两个功能在 Nginx 中都有其独特的用途,可以根据需求选择合适的方法来处理请求。

2、反向代理

Nginx 反向代理是一种常见的用途,它允许 Nginx 接收来自客户端的请求,并将这些请求转发给后端的服务器或应用程序,然后将后端服务器的响应返回给客户端。这种方式可以隐藏后端服务器的实际 IP 地址和配置,并提供负载均衡、缓存、SSL 终端等功能。

下面是一个简单的 Nginx 反向代理配置示例:
 

server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}


在这个配置中:

  • listen 指令指定了 Nginx 监听的端口,这里是 80 端口,用于 HTTP 访问。
  • server_name 指令指定了你的域名。
  • location / 指令定义了处理客户端请求的位置。这里的配置表示当客户端访问网站时,Nginx 将会代理所有的请求。
  • proxy_pass 指令指定了后端服务器的地址,Nginx 会将客户端的请求转发给该地址。
  • proxy_set_header 指令用于设置 HTTP 请求头。在这个例子中,设置了 Host、X-Real-IP 和 X-Forwarded-For 头,用于传递客户端的真实 IP 地址和其他信息给后端服务器。

实际使用中,需要将 backend_server 替换为实际的后端服务器的地址,可以是 IP 地址或域名。此外,可能需要根据实际情况配置其他选项,例如 SSL 配置、缓存配置等。

通过这样的配置,Nginx 将充当反向代理,将客户端的请求转发给后端服务器,并将后端服务器的响应返回给客户端,从而实现了反向代理的功能。

3、负载均衡

Nginx 可以作为负载均衡器,用于将来自客户端的请求分发到多个后端服务器,以提高系统的性能、可用性和可扩展性。Nginx 提供了几种负载均衡算法,如轮询、IP Hash、最少连接等,可以根据需求选择适合的算法。

下面是一个简单的 Nginx 负载均衡配置示例:

http {upstream backend_servers {server 192.168.1.10;server 192.168.1.11;server 192.168.1.12;}server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}


在这个配置中:

  • upstream 指令定义了后端服务器的集群,其中包含了多个服务器的地址和端口。这些服务器可以是真实的后端服务器,也可以是代理服务器或其他类型的服务器。
  • server 指令定义了每个后端服务器的地址和端口。
  • listen 指令和 server_name 指令定义了 Nginx 监听的端口和服务器名。
  • location / 指令定义了处理客户端请求的位置。这里的配置表示当客户端访问网站时,Nginx 将会代理所有的请求给 upstream 中定义的后端服务器集群。
  • proxy_pass 指令将客户端的请求转发给后端服务器集群。
  • proxy_set_header 指令用于设置 HTTP 请求头,以传递客户端的真实 IP 地址和其他信息给后端服务器。

通过这样的配置,Nginx 将会根据负载均衡算法(默认是轮询算法)将客户端的请求分发到多个后端服务器上,从而实现了负载均衡的功能。可以根据实际需求配置更多的后端服务器,并根据需要选择适合的负载均衡算法。

4、访问控制

Nginx 提供了多种方法来实现访问控制,包括基于 IP 地址、基于用户身份、基于 HTTP 请求头等。这些方法可以帮助你限制访问某些资源,保护你的网站免受恶意攻击和未经授权的访问。

下面是几种常见的 Nginx 访问控制方法:

基于 IP 地址的访问控制


使用 allow 和 deny 指令可以实现基于 IP 地址的访问控制。你可以在 Nginx 配置文件中设置允许或拒绝访问的 IP 地址列表。

例如,下面的配置将允许来自指定 IP 地址范围的访问,拒绝其他所有 IP 地址的访问:

location / {allow 192.168.1.0/24;deny all;
}


基于 HTTP 请求头的访问控制
可以使用 if 指令结合 HTTP 请求头来实现更细粒度的访问控制。

例如,下面的配置将拒绝所有没有 Referer 请求头或者 Referer 不是指定域名的请求:

location / {if ($http_referer !~* (your-domain.com)) {return 403;}
}


基于用户身份的访问控制
如果应用程序需要用户登录,可以结合应用程序的身份验证机制来实现访问控制。

例如,下面的配置要求用户登录后才能访问网站的特定部分:

location /private {auth_basic "Restricted";auth_basic_user_file /etc/nginx/.htpasswd;
}


在这个例子中,auth_basic 指令用于设置基本身份验证,auth_basic_user_file 指令指定了存储用户名和密码的文件路径。

5、SSL/TLS配置

配置 Nginx 的 SSL/TLS 是保护网站和用户数据安全的重要措施。SSL/TLS 配置包括证书的安装和使用,加密算法的选择,以及其他安全相关的设置。

以下是一个基本的 Nginx SSL/TLS 配置示例:

server {listen 443 ssl;server_name your_domain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;# 安全参数配置ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;ssl_stapling on;ssl_stapling_verify on;# 可选的安全性增强配置add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";# 配置 SSL 会话的结束方式ssl_session_tickets off;location / {# 其他配置...}
}


在这个配置中:

  • listen 443 ssl; 指令表示该服务器块监听 443 端口,并启用 SSL/TLS 加密。
  • server_name 指令指定了你的域名。
  • ssl_certificate ssl_certificate_key 指令指定了 SSL 证书和私钥的路径,这两个文件是 SSL/TLS 加密的必要组件。
  • ssl_protocols 指令用于指定允许使用的 SSL/TLS 协议版本。
  • ssl_prefer_server_ciphers on; 指令表示优先使用服务器端定义的加密套件。
  • ssl_ciphers 指令定义了可用的加密算法套件。
  • ssl_session_cache 指令设置 SSL 会话缓存的大小和存储位置。
  • ssl_session_timeout 指令设置 SSL 会话的超时时间。
  • ssl_session_tickets 指令控制 SSL 会话票据的使用。
  • ssl_stapling ssl_stapling_verify 指令启用 OCSP Stapling 和 OCSP Stapling 验证。
  • add_header 指令用于添加额外的安全头,如 Strict-Transport-Security、X-Frame-Options 和 X-Content-Type-Options。

以上是一个基本的 SSL/TLS 配置示例,可以根据实际需求对其进行调整和扩展,以满足网站安全性和性能需求。

 

三、Nginx模块讲解

1、HTTP模块

Nginx 的 HTTP 模块是 Nginx 的核心模块之一,它处理 HTTP 请求和响应,并提供了丰富的功能和配置选项,包括反向代理、负载均衡、缓存、访问控制等。

以下是一些常用的 Nginx HTTP 模块及其功能:

  1. Core Module(核心模块):提供了基本的 HTTP 服务器功能,包括定义服务器块、监听端口、设置服务器名称等。例如,listen、server_name 等指令都属于核心模块。
  2. Access Module(访问模块):用于控制客户端对服务器的访问权限。包括 allow 和 deny 指令,可以根据客户端的 IP 地址或其他条件来允许或拒绝访问。
  3. Rewrite Module(重写模块):用于重写或修改 URL。提供了 rewrite 指令,可以根据匹配规则修改客户端请求的 URL。
  4. Proxy Module(代理模块):提供了反向代理功能,允许将客户端的请求转发给后端的服务器或应用程序。包括 proxy_pass、proxy_set_header 等指令。
  5. Load Balancing Module(负载均衡模块):用于将客户端的请求分发到多个后端服务器,以提高系统的性能和可用性。包括 upstream 和 server 指令。
  6. SSL Module(SSL 模块):提供了 SSL/TLS 加密功能,用于保护网站和用户数据的安全。包括 ssl_certificate、ssl_certificate_key 等指令。
  7. Headers Module(头部模块):用于添加、修改或删除 HTTP 请求和响应头。包括 add_header、more_set_headers 等指令。
  8. Gzip Module(压缩模块):用于压缩 HTTP 响应体,减小传输数据的大小,提高网站的加载速度。包括 gzip、gzip_types 等指令。
  9. Cache Module(缓存模块):用于缓存静态和动态内容,减轻后端服务器的负载,并提高响应速度。包括 proxy_cache、proxy_cache_key 等指令。

 

以上是一些常见的 Nginx HTTP 模块及其功能,可以根据需求在 Nginx 配置文件中使用这些模块和指令来实现各种功能。 Nginx 的模块化设计使得它可以灵活地适应不同的应用场景和需求。

2、Stream模块

Nginx 的 Stream 模块是 Nginx 的一个核心模块之一,用于处理 TCP 和 UDP 流量。与 HTTP 模块不同,Stream 模块不处理 HTTP 请求和响应,而是处理基于传输层协议的数据流,例如 TCP 连接、UDP 包等。Stream 模块通常用于实现反向代理、负载均衡、TCP/UDP 代理等网络层级别的功能。

以下是一些常见的 Nginx Stream 模块及其功能:

  1. Core Module(核心模块):提供了基本的 Stream 服务器功能,包括定义服务器块、监听端口等。与 HTTP 模块的核心模块类似。
  2. Proxy Module(代理模块):提供了 TCP 和 UDP 的反向代理功能,允许将客户端的 TCP/UDP 流量转发给后端的服务器或应用程序。包括 proxy_pass、proxy_set_header 等指令。
  3. Load Balancing Module(负载均衡模块):用于将客户端的 TCP/UDP 流量分发到多个后端服务器,以提高系统的性能和可用性。包括 upstream 和 server 指令。
  4. SSL Module(SSL 模块):提供了 TCP 的 SSL/TLS 加密功能,用于保护 TCP 连接的安全。包括 ssl_certificate、ssl_certificate_key 等指令。
  5. UDP Module(UDP 模块):用于处理 UDP 流量,可以实现 UDP 的反向代理、负载均衡等功能。Nginx 1.19.0 版本引入了对 UDP 的支持。

 

Stream 模块的使用方式与 HTTP 模块类似,你可以在 Nginx 配置文件中定义 Stream 服务器块,并在其中使用相应的指令来配置 TCP 或 UDP 的代理、负载均衡等功能。通过 Stream 模块,Nginx 可以成为一个功能强大的 TCP/UDP 代理服务器,可以处理各种类型的网络流量,并提供高性能和可靠性。

四、Nginx实际应用

1、Nginx在Web开发中的应用

Nginx 在 Web 开发中有许多应用,它是一个高性能的 Web 服务器和反向代理服务器,提供了许多功能和特性,适用于各种不同的 Web 开发场景。

以下是一些 Nginx 在 Web 开发中常见的应用:

  1. 静态文件服务: Nginx 可以作为一个高性能的静态文件服务器,用于提供网站的静态资源,如 HTML、CSS、JavaScript、图片等。它可以快速地响应静态文件的请求,并有效地缓存静态内容,提高网站的访问速度和性能。
  2. 反向代理: Nginx 可以作为反向代理服务器,将客户端的请求转发给后端的服务器或应用程序,并将后端服务器的响应返回给客户端。这种方式可以隐藏后端服务器的实际 IP 地址和配置,并提供负载均衡、高可用性、安全性等功能。
  3. 负载均衡: Nginx 可以作为负载均衡器,将客户端的请求分发到多个后端服务器上,以提高系统的性能和可用性。它支持多种负载均衡算法,如轮询、IP Hash、最少连接等,并可以根据服务器的健康状态进行动态调整。
  4. 缓存服务: Nginx 可以作为缓存服务器,缓存静态和动态内容,减轻后端服务器的负载,并提高响应速度。它支持内存缓存和磁盘缓存,并可以根据需要配置缓存规则和过期时间。
  5. SSL/TLS 终端: Nginx 支持 SSL/TLS 加密,可以用于安全地传输数据和保护用户隐私。它可以用作 SSL/TLS 终端,对客户端进行 SSL 握手,并在后端服务器之间使用非加密的 HTTP 或 HTTPS 连接。
  6. 反向 WebSocket 代理: Nginx 可以代理 WebSocket 请求,用于实现实时通信和双向数据传输。它支持 WebSocket 协议的代理和负载均衡,可以处理大量的并发连接。
  7. HTTP/2 支持: Nginx 支持 HTTP/2 协议,可以提供更快的网页加载速度和更低的延迟。它可以与现代的 Web 浏览器和服务器一起使用,以实现最新的 Web 性能优化。

2、Nginx在CDN中的应用 

在 CDN(内容分发网络)中,Nginx 是一个非常常见和重要的组件,它提供了多种功能和特性,用于优化内容分发、提高网站性能、加强安全性等。

以下是 Nginx 在 CDN 中的一些常见应用:

  1. 内容缓存: Nginx 可以作为 CDN 的缓存服务器,缓存静态和动态内容,如 HTML、CSS、JavaScript、图片、视频等。通过缓存静态内容,Nginx 可以减轻后端服务器的负载,并提高内容的访问速度和性能。
  2. 反向代理: Nginx 可以作为 CDN 的反向代理服务器,将客户端的请求转发给最近的缓存服务器或源服务器,并将响应返回给客户端。这种方式可以加速内容传输,提高网站的可用性和可靠性。
  3. 负载均衡: CDN 通常包含多个缓存节点,Nginx 可以作为负载均衡器,将客户端的请求分发到多个缓存节点上,以提高系统的性能和可用性。它支持多种负载均衡算法,如轮询、IP Hash、最少连接等,并可以根据节点的健康状态进行动态调整。
  4. SSL/TLS 终端: Nginx 支持 SSL/TLS 加密,可以用于安全地传输内容和保护用户隐私。在 CDN 中,Nginx 可以作为 SSL/TLS 终端,对客户端进行 SSL 握手,并在缓存节点之间使用非加密的 HTTP 或 HTTPS 连接。
  5. 内容压缩: Nginx 支持内容压缩,可以减小传输数据的大小,提高内容的传输速度和节省带宽。在 CDN 中,Nginx 可以压缩静态和动态内容,并提供 Gzip 压缩、Brotli 压缩等功能。
  6. 安全防护: Nginx 提供了丰富的安全特性,如访问控制、反向代理防护、DDoS 防护等。在 CDN 中,Nginx 可以用于防止恶意攻击、保护网站安全,并提供安全日志和监控功能。

 

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Nginx的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/698290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot整合 Spring Cloud Gateway

1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架,旨在为微服务架构提供一种简单有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如:安全认证,监控,限流等等。 2.功能特征…

为什么很多计算机专业的同学毕业即失业❓

✅大部分计算机专业毕业生在就业时遇到困难,原因往往是多方面的,并非普遍情况,主要包括以下几点: 1.技能不匹配:学校所学知识可能与实际工作需求有一定差距,比如缺乏特定编程语言的深入掌握或实际项目经验。…

基于MetaGPT的LLM Agent学习实战(一)

前言 我最近一直在做基于AI Agent 的个人项目, 因为工作加班较多,设计思考时间不足,这里借着Datawhale的开源学习课程《MetaGPT智能体理论与实战》课程,来完善自己的思路,抛砖引玉,和各位开发者一起学习&am…

MySQL 8.4参考手册

5.1 连接到服务器和断开服务器连接 host 和 user 表示主机名,其中 MySQL服务器正在运行,并且您的MySQL帐户的用户名。 为您的设置替换适当的值。代表您的密码;输入它 当 MySQL 显示提示时。********Enter password: 5.2 输入查询 mysql> SELECT VERSI…

美国分析人工智能技术对网络格局的影响(中)

文章目录 前言三、剑更锋利,盾更坚固四、各国对于储存与披露已发现的漏洞有不同的国家级法规五、人工智能将如何改变网络安全的问题既是一个技术问题,也是一个政策问题前言 美国政府正在探索如何使用人工智能来增强其网络能力,如何使用人工智能来加强网络防御,以及如何最好…

照明灯具十大排名都有哪些?市面上比较流行的十大护眼台灯品牌推荐

照明灯具十大排名都有哪些?护眼台灯排名当中靠前的主要有书客、飞利浦、松下等品牌。照明灯具作为家居与办公环境中不可或缺的元素,其品质与选择直接关系到人们的视觉健康与舒适度。本文将为大家揭示照明灯具的十大排名,让大家了解市场上最受…

[QNX] BSP 网络性能优化:调优io-pkt和ClockPeriod提升网速

0 概要 本文介绍如何在QNX系统上优化网络性能,主要通过调整io-pkt和ClockPeriod参数来实现。通过优化,网络吞吐量可以得到显著提升。 1 优化方法 1.1 调整io-pkt的mclbytes参数: io-pkt是QNX系统中常用的网络协议栈,其mclbytes参数指定了…

HTML的使用(上)

文章目录 前言一、HTML是什么&#xff1f;二、使用内容 &#xff08;1&#xff09;换行标记<br>&#xff08;2&#xff09;加粗标记<b> </b>&#xff08;3&#xff09;段落标记<p> </p>&#xff08;4&#xff09;标题标记<h1>~<h6> …

韵搜坊(全栈)-- 前后端初始化

文章目录 前端初始化后端初始化 前端初始化 使用ant design of vue 组件库 官网快速上手&#xff1a;https://www.antdv.com/docs/vue/getting-started-cn 安装脚手架工具 进入cmd $ npm install -g vue/cli # OR $ yarn global add vue/cli创建一个项目 $ vue create ant…

运维基础(二)- 钉钉的使用

一、钉钉的介绍&#xff08;来自百度百科&#xff09; 免费沟通和协同的多端平台 帮助中国企业通过系统化的解决方案&#xff08;微应用&#xff09;&#xff0c;全方位提升中国企业沟通和协同效率。 钉钉&#xff08;Ding Talk&#xff09; 是阿里巴巴打造的企业级智能移动…

安利一个轻量级流程引擎compileflow

写在文章开头 今日推荐一个比较轻量级的工作流引擎——即阿里的compileflow&#xff0c;这款流程引擎算是笔者接触过流程引擎中相对轻量级、且性能和集成扩展表现都比较良好的框架&#xff0c;本文就会从几种常见的使用场景以及源码分析的角度介绍这款工具。 Hi&#xff0c;我…

邓闲小——生存、生活、生命|真北写作

人生有三个层次∶生存、生活、生命。 生存就是做必须做的事。生存的模式是邓&#xff0c;是交易&#xff0c;是买卖。别人需要的东西&#xff0c;你生产出来&#xff0c;卖给他。哪怕这个东西没啥用&#xff0c;也可以卖&#xff0c;情绪也可以卖。你需要的东西&#xff0c;你花…