当前位置: 首页 > backend >正文

Nginx核心功能

目录

前言:

一:正向代理

(1)编辑主配置文件添加正向代理相关配置:

(2)客户机配置代理,并验证

二:反向代理

1.配置nginx七层代理

(1)后端服务器配置

(2)配置nginx七层代理转发

(3)验证代理转发的效果

三.Nginx 缓存

1. 缓存功能的核心原理和缓存类型

2.代理缓存功能设置

总结


前言:

nginx 作为高性能的 Web 服务器、反向代理及负载均衡工具,其核心功能涵盖 HTTP/HTTPS 协议处理、反向代理与负载均衡、动静资源分离、高并发连接管理、URL 重写与 rewrite 规则配置、缓存机制优化等关键领域,深度支撑现代 Web 应用的稳定性、可靠性与高效性,本内容将围绕其核心功能展开全面解析与实践探讨。

一:正向代理

正向代理(Forward Proxy)‌是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端

Nginx 的 正向代理 充当客户端的“中间人”,代表用户访问外部资源并隐藏真实 IP。它是企业内网管控、安全审计与加速访问的核心工具。用于场景一般是:

内网访问控制:限制员工访问特定网站(如社交媒体)

匿名访问:通过代理服务器隐藏用户真实身份。

资源缓存加速:缓存公共资源(如软件包、镜像文件),减少外网带宽消耗。

1.配置正向代理

(1)编辑主配置文件添加正向代理相关配置:

  #[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf​server {listen       # 代理监听端口​server_name  proxy.example.com;​charset UTF-8;resolver 8.8.8.8 114.114.114.114;  # 多个 DNS 用空格分隔#access_log  logs/host.access.log  main;proxy_connect;   #启用代理服务proxy_connect_allow 443 80;   # 允许代理到 80 和 443 端口proxy_connect_connect_timeout 10s;proxy_connect_read_timeout 10s;proxy_connect_send_timeout 10s;location / {root   html;index  index.html index.htm;proxy_pass $scheme://$http_host$request_uri;   # 动态协议proxy_set_header Host $http_host;# 优化缓冲区proxy_buffers 256 4k;proxy_max_temp_file_size 0;#保持连接proxy_http_version 1.1;proxy_set_header Connction "";}
 ​​

(2)客户机配置代理,并验证

二:反向代理

Nginx 的七层(应用层)反向代理基于 HTTP/HTTPS 协议,深度解析应用层内容(如 URL、Header、Cookie),将客户端请求精准转发至后端服务器。作为企业级架构的“智能调度器”,它实现了负载均衡、安全隔离与性能优化的核心能力。应用场景一般是:

负载均衡:将流量分发至多台后端服务器,避免单点故障。

动静分离:静态资源(图片、CSS/JS)由 Nginx 直接响应,动态请求(PHP、API)转发至 Apache/Tomcat。

SSL 终端:统一处理 HTTPS 加密/解密,降低后端服务器计算压力。

灰度发布:根据请求特征(如 IP、Header)将部分流量导向新版本服务。

Nginx 的四层(网络层)反向代理基于 TCP/UDP 协议,直接转发原始数据流,不解析应用层内容。它专为高性能、低延迟的传输层场景设计,是数据库、游戏服务器等非 HTTP 服务的理想选择。应用场景一般是:

数据库代理:对外暴露统一端口,内部转发至 MySQL、Redis 集群。

游戏服务器:代理 UDP 协议,实现实时数据包负载均衡。

SSH 跳板机:通过端口映射安全访问内网服务器。

高可用服务:TCP 服务(如 MQTT)的主备切换与健康检查。

1.配置nginx七层代理

通过配置nginx七层代理实现转发nginx请求至后端的httpd服务

(1)后端服务器配置
 dnf -y install httpd[root@localhost ~]# echo "zheshi ho duan zhu ji" >/var/www/html/index.html   [root@localhost ~]# systemctl start httpd​
(2)配置nginx七层代理转发
 [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf​http {upstream backend {        #后端地址池设置server 192.168.10.102:80 ;  # 后端主机设置}​server {listen 80;server_name example.com;​location / {proxy_pass http://backend;  # 请求转发proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
 
(3)验证代理转发的效果
 [root@localhost ~]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost ~]# nginx -s reload[root@localhost ~]# curl 192.168.10.100zheshi ho duan zhu ji​

2.配置四层代理

SSH**协议是基于TCP协议的**,配置nginx的四层代理,实现代理ssh请求至后端服务器,用以登录内网服务器场景

(1)配置四层代理

[root@localhost ~]#vi /usr/local/nginx/conf/nginx.conf stream {                                                                        upstream ssh_cluster {  #定义后端地址池server 192.168.10.102:22;    #设置后端地址和服务端口}​server {listen 2222;proxy_pass ssh_cluster;  proxy_connect_timeout 5s;  # 连接超时时间proxy_timeout 1h;         # 长连接保持时间}}[root@localhost ~]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost ~]# nginx -s reload​
 ​

(2)验证四层模型

root@localhost ~]# ssh root@192.168.10.100 -p2222[root@localhost ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:2a:00:36 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe2a:36/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@localhost ~]# 
 ​

三.Nginx 缓存

Nginx 的缓存功能是其核心能力之一,主要用于加速内容响应和降低后端服务器负载。它的缓存功能主要基于反向代理(Proxy Cache),但也可用于其他场景(如 FastCGI 缓存)。以下是详细解析:

1. 缓存功能的核心原理和缓存类型

缓存类型作用场景
代理缓存反向代理模式下缓存后端服务器(如 Tomcat、Apache)的响应内容。
FastCGI 缓存缓存 PHP/Python 等通过 FastCGI 协议处理的动态内容(需配合 PHP-FPM 使用)。
uWSGI/SCGI 缓存类似 FastCGI,用于其他后端协议。
静态资源缓存通过 expires 指令设置客户端浏览器缓存(非服务端缓存)。

代理缓存原理:

第一步:客户端第一次向Nginx请求数据A;

第二步:当Nginx发现缓存中没有数据A时,会向服务端请求数据A;

第三步:服务端接收到Nginx发来的请求,则返回数据A到Nginx,并且缓存在Nginx;

第四步:Nginx返回数据A给客户端应用;

第五步:客户端第二次向Nginx请求数据A;

第六步:当Nginx发现缓存中存在数据A时,则不会请求服务端;

第七步:Nginx把缓存中的数据A返回给客户端应用。

2.代理缓存功能设置

因代理缓存功能需在反向代理模式下缓存后端服务器(如 Tomcat、Apache)的响应内容。需要先配置七层反向代理

(1)反向代理配置

 [root@localhost ~]#/usr/local/nginx/conf/nginx.conf http {upstream backend {        #后端地址池设置server 192.168.10.102:80 ;  # 后端主机设置}​server {listen 80;server_name example.com;​location / {proxy_pass http://backend;  # 请求转发proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}}[root@localhost ~]#nginx -t[root@localhost ~]#nginx -s reload​

(2)设置缓存功能

[root@localhost ~]#mkdir -p /data/nginx/cache     #创建缓存目录[root@localhost ~]#chown nginx:nginx /data/nginx/cache -R[root@localhost ~]#vim /usr/local/nginx/conf/nginx.confhttp {# 定义缓存路径和参数proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g use_temp_path=off;​server {listen 80;server_name example.com;​location / {proxy_pass http://backend;# 启用缓存区proxy_cache my_cache;# 定义缓存键(URL + 请求方法 + 协议)proxy_cache_key "$scheme$request_method$host$request_uri";# 缓存有效期(不同状态码不同时间)proxy_cache_valid 200 302 10m;  # 200/302 状态码缓存10分钟proxy_cache_valid 404      1m;  # 404 缓存1分钟proxy_cache_valid any      5s;   # 其他状态码缓存5秒# 添加缓存状态头(调试用)add_header X-Cache-Status $upstream_cache_status;}}}​

(3)验证缓存功能

 [root@localhost ~]# curl -I 192.168.10.101HTTP/1.1 200 OKServer: nginx/1.26.3Date: Tue, 04 Mar 2025 12:45:44 GMTContent-Type: text/htmlContent-Length: 19Connection: keep-aliveLast-Modified: Mon, 03 Mar 2025 12:39:32 GMTETag: "67c5a304-13"X-Cache-Status: MISS    #MISS 表示没有命中缓存Accept-Ranges: bytes​​[root@localhost ~]# curl -I 192.168.10.101HTTP/1.1 200 OKServer: nginx/1.26.3Date: Tue, 04 Mar 2025 12:45:50 GMTContent-Type: text/htmlContent-Length: 19Connection: keep-aliveLast-Modified: Mon, 03 Mar 2025 12:39:32 GMTETag: "67c5a304-13"X-Cache-Status: HIT  #再次请求发现已经命中,说明数据已经被缓存Accept-Ranges: bytes​[root@localhost ~]#ls /data/nginx/cache 查看缓存目录发现已缓存数据​
 ​​

总结

本文围绕 Nginx 核心功能展开全面解析与实践探讨。Nginx 作为高性能的 Web 服务器、反向代理及负载均衡工具,核心功能涵盖 HTTP/HTTPS 协议处理等关键领域。正向代理可将客户端请求转发给目标服务器,用于内网访问控制、匿名访问和资源缓存加速,需编辑主配置文件并配置客户机代理。反向代理分七层和四层,七层基于 HTTP/HTTPS 协议,用于负载均衡、动静分离等;四层基于 TCP/UDP 协议,适用于数据库代理等场景,分别介绍了两者的配置与验证方法。Nginx 缓存功能主要基于反向代理,可加速内容响应和降低后端服务器负载,包含代理缓存、FastCGI 缓存等类型,文中给出了代理缓存的

http://www.xdnf.cn/news/8218.html

相关文章:

  • 【Linux系统】冯诺依曼体系结构 和 操作系统的介绍
  • Ctrl+鼠标滚动阻止页面放大/缩小
  • QFileDialog::getSaveFileName导致系统崩溃
  • Go语言gopacket库的HTTP协议分析工具实现
  • 学习人工智能:从0到1的破局指南与职业成长路径
  • vue3+vue-flow实现拖拽矩形框,端点连线,自定义宽高
  • BGP为什么要配置对等IP?
  • PyInstaller入门
  • 如何看navicat数据库连接的密码
  • C++效率掌握之STL库:unordered_map unordered_set底层剖析
  • JavaScript【8】异步请求与本地存储
  • 巢票赛演协议逆向分析
  • 建设工程窝工、停工损失案件庭审发问提纲
  • [Dify] 在Dify中优雅处理本地部署LLM的Token超限问题
  • TransMorph:用于无监督医学图像配准的变压器
  • 网络编程中的 Protobuf 和 JsonCpp 全面解析
  • 视频监控管理平台EasyCVR结合AI分析技术构建高空抛物智能监控系统,筑牢社区安全防护网
  • Dify-4:API 后端架构
  • C#学习11——集合
  • 电机试验平台:实现高效精密测试的关键工具
  • 蓝桥杯 10. 安全序列
  • 今日行情明日机会——20250522
  • Linux 部署 RocketMQ
  • 基于江协标准库所出现的定时器5678以及串口45等无法使用的问题解析
  • 写实交互数字人在AI招聘中的应用方案
  • UE5 Va Res发送请求、处理请求、json使用
  • React 如何封装一个可复用的 Ant Design 组件
  • 学习日记-day13-5.22
  • Dockers Compose常用指令介绍
  • matlab实现无线通信组