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 [email protected] -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 缓存等类型,文中给出了代理缓存的

相关推荐
.小墨迹22 分钟前
Python学习——执行python时,键盘按下ctrl+c,退出程序
linux·开发语言·python·学习·自动驾驶
AI+程序员在路上32 分钟前
MIPI摄像头linux驱动开发步骤及说明
linux·c语言·开发语言·驱动开发
Strugglingler36 分钟前
Linux shell 正则表达式高效使用
linux·shell
Bonnie_121537 分钟前
01-jenkins学习之旅-window-下载-安装-安装后设置向导
运维·jenkins
曼汐 .1 小时前
企业网站架构部署与优化-Nginx核心功能
前端·nginx·架构
知星小度S1 小时前
Linux探秘:驾驭开源,解锁高效能——基础指令
linux·运维·服务器
小黑屋说YYDS2 小时前
Docker常用命令介绍
运维·docker·容器
zy happy2 小时前
黑马点评前端Nginx启动失败问题解决记录
java·运维·前端·spring boot·nginx·spring
王 富贵2 小时前
docker命令
运维·docker·容器
就叫飞六吧2 小时前
Docker 挂载策略:何时使用临时容器拷贝默认配置,何时直接挂载?
运维·docker·容器