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.confserver {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.confhttp {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 缓存等类型,文中给出了代理缓存的