Nginx核心功能

目录

前言:

一:正向代理

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

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

二:反向代理

1.配置nginx七层代理

(1)后端服务器配置

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

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

[三.Nginx 缓存](#三.Nginx 缓存)

[1. 缓存功能的核心原理和缓存类型](#1. 缓存功能的核心原理和缓存类型)

2.代理缓存功能设置

总结


前言:

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

一:正向代理

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

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

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

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

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

1.配置正向代理

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

css 复制代码
  #[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)后端服务器配置
css 复制代码
 dnf -y install httpd
 [root@localhost ~]# echo "zheshi ho duan zhu ji" >/var/www/html/index.html   
 [root@localhost ~]# systemctl start httpd
 ​
(2)配置nginx七层代理转发
css 复制代码
 [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)验证代理转发的效果
css 复制代码
 [root@localhost ~]# nginx -t
 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 [root@localhost ~]# nginx -s reload
 [root@localhost ~]# curl 192.168.10.100
 zheshi ho duan zhu ji
 ​

2.配置四层代理

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

(1)配置四层代理

css 复制代码
[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 -t
 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 [root@localhost ~]# nginx -s reload
 ​
复制代码
 ​

(2)验证四层模型

css 复制代码
root@localhost ~]# ssh root@192.168.10.100 -p2222
 [root@localhost ~]# ip a
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever
     inet6 ::1/128 scope host noprefixroute 
        valid_lft forever preferred_lft forever
 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
     link/ether 00:0c:29:2a:00:36 brd ff:ff:ff:ff:ff:ff
     inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens160
        valid_lft forever preferred_lft forever
     inet6 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)反向代理配置

css 复制代码
 [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) 设置缓存功能

css 复制代码
[root@localhost ~]#mkdir -p /data/nginx/cache     #创建缓存目录
 [root@localhost ~]#chown nginx:nginx /data/nginx/cache -R
 [root@localhost ~]#vim /usr/local/nginx/conf/nginx.conf
 http {
     # 定义缓存路径和参数
     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)验证缓存功能

css 复制代码
 [root@localhost ~]# curl -I 192.168.10.101
 HTTP/1.1 200 OK
 Server: nginx/1.26.3
 Date: Tue, 04 Mar 2025 12:45:44 GMT
 Content-Type: text/html
 Content-Length: 19
 Connection: keep-alive
 Last-Modified: Mon, 03 Mar 2025 12:39:32 GMT
 ETag: "67c5a304-13"
 X-Cache-Status: MISS    #MISS 表示没有命中缓存
 Accept-Ranges: bytes
 ​
 ​
 [root@localhost ~]# curl -I 192.168.10.101
 HTTP/1.1 200 OK
 Server: nginx/1.26.3
 Date: Tue, 04 Mar 2025 12:45:50 GMT
 Content-Type: text/html
 Content-Length: 19
 Connection: keep-alive
 Last-Modified: Mon, 03 Mar 2025 12:39:32 GMT
 ETag: "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 缓存等类型,文中给出了代理缓存的

相关推荐
大树8813 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质14 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush414 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52014 小时前
Linux 11 动态监控指令top
linux
Inhand陈工15 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智15 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩15 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_16 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈16 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix