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

nginx 核心功能 02

目录

1. 正向代理

1.1  编译安装 Nginx

1.2 配置正向代理

2. 反向代理

2.1 配置nginx七层代理

2.2 配置nginx四层代理

3. Nginx 缓存

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

3.2 代理缓存功能设置

4. Nginx rewrite 和正则

4.1 Nginx正则

4.2 nginx location

4.3 Rewrite


1. 正向代理

正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端Nginx 的 正向代理 充当客户端的“中间人”,代表用户访问外部资源并隐藏真实 IP。它是企业内网管控、安全审计与加速访问的核心工具。用于场景一般是:

  • 内网访问控制:限制员工访问特定网站(如社交媒体)
  • 匿名访问:通过代理服务器隐藏用户真实身份。
  • 资源缓存加速:缓存公共资源(如软件包、镜像文件),减少外网带宽消耗。

1.1  编译安装 Nginx

安装支持软件

在安装 Nginx 之前,你得先安装一些必要的支持软件,以确保编译过程顺利进行。

dnf install -y gcc make pcre-devel zlib-devel openssl-develperl-ExtUtils-MakeMaker git wget tar

创建运行用户、组和日志目录

创建一个专门用于运行 Nginx 的用户和组,同时创建日志目录并设置相应的权限:

# 创建nginx用户和组
groupadd nginx
useradd -r -g nginx -s /sbin/nologin nginx# 创建日志目录
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx

编译安装 Nginx

下载 Nginx 源码包,解压后进行编译和安装:

# 下载Nginx源码
wget http://nginx.org/download/nginx-1.22.1.tar.gz# 解压源码包
tar -zxvf nginx-1.22.1.tar.gz
cd nginx-1.22.1# 配置编译选项
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \
--with-http_ssl_module --with-http_gzip_static_module \
--with-stream --with-stream_ssl_module \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log# 编译并安装
make && make install

添加Nginx 系统服务

创建一个 systemd 服务文件,方便对 Nginx 进行管理:

cat <<EOF > /etc/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF# 重新加载systemd管理器配置
systemctl daemon-reload# 启动Nginx并设置开机自启
systemctl start nginx
systemctl enable nginx

1.2 配置正向代理

编辑主配置文件添加正向代理相关配置

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

http {# 其他配置...server {listen 8080;resolver 8.8.8.8;  # 使用Google的公共DNS服务器location / {proxy_pass http://$host$request_uri;proxy_set_header Host $host;}}
}

验证正向代理

重新加载 Nginx 配置:

systemctl reload nginx

通过 curl 命令验证正向代理是否正常工作

curl -x http://127.0.0.1:8080 https://www.example.com

2. 反向代理

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

  • 负载均衡:将流量分发至多台后端服务器,避免单点故障。
  • 动静分离:静态资源(图片、CSS/JS)由 Nginx 直接响应,动态请求(PHP、API)转发至Apache/Tomcat.
  • 灰度发布:根据请求特征(如IP、Header)将部分流量导向新版本服务。

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

  • 数据库代理:对外暴露统一端口,内部转发至 MySQL、Redis 集群。
  • 游戏服务器:代理 UDP 协议,实现实时数据包负载均衡。
  • SSH 跳板机:通过端口映射安全访问内网服务器。
  • 高可用服务:TCP服务(如 MQTT)的主备切换与健康检查。

反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的-种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

2.1 配置nginx七层代理

通过配置nginx七层代理实现转发nginx请求至后端的httpd服务,通过该转发也能实现nginx+httpd的动静分离

配置nginx七层代理转发

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

http {# 其他配置...upstream backend {server 192.168.1.100:8080;  # 后端服务器地址和端口}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;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

验证转发效果

重新加载 Nginx 配置:

systemctl reload nginx

在浏览器中访问http://example.com,若能正常访问后端服务器的内容,则说明转发配置成功。

2.2 配置nginx四层代理

配置四层代理

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

stream {upstream backend {server 192.168.1.100:3306;  # 后端服务器地址和端口}server {listen 3307;proxy_pass backend;}
}

验证四层代理

重新加载 Nginx 配置:

systemctl reload nginx

使用数据库客户端连接到127.0.0.1:3307,若能正常连接到后端数据库服务器,则说明四层代理配置成功。

3. Nginx 缓存

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

Nginx 缓存的核心原理是将客户端请求的响应内容存储在本地磁盘或内存中,当有相同请求到来时,直接从缓存中获取响应,从而减少后端服务器的负载和响应时间。Nginx 支持的缓存类型主要有内存缓存和磁盘缓存。

3.2 代理缓存功能设置

反向代理配置

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

http {# 其他配置...proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;upstream backend {server 192.168.1.100:8080;  # 后端服务器地址和端口}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;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_cache my_cache;proxy_cache_key "$scheme$request_method$host$request_uri";proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}
}

设置缓存功能

上述配置中,proxy_cache_path用于定义缓存的存储路径、缓存区域名称、缓存大小等参数;proxy_cache指定使用的缓存区域;proxy_cache_key定义缓存的键;proxy_cache_valid定义不同响应状态码的缓存时间。

验证缓存功能

重新加载 Nginx 配置:

systemctl reload nginx

4. Nginx rewrite 和正则

在云计算与分布式架构的时代,Nginx凭借其高性能、高并发处理能力以及模块化设计,已成为现代Web服务的核心组件之一。它不仅是负载均衡、反向代理的首选工具,更是实现流量调度、安全防护和动态路由的关键枢纽。而在这其中,Rewrite模块作为Nginx的“规则引擎”,扮演着至关重要的角色--它赋予开发者精准控制URL的能力,让请求的流转不再受限于物理路径,而是通过逻辑规则灵活适配业务需求。

4.1 Nginx正则

下表中列举出一些常用的正则表达式元字符:

字符描述
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次。如“o!“能匹配“。“及“o”、"oIF”
+匹配前面的字符一次或多次。如“ol+”能匹配"o!及"ol"、"o",但不能匹配”o”
?匹配前面的字符零次或一次,例如"do(es)?"能匹配“do"或者-does","?等效于”(0,1}
`匹配除"n"之外的任何单个字符,若要匹配包括"n"在内的任意字符,请使用诸如“[\n]之类的模式
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如"\㎡匹配一个换行符,而“S"则匹配$"
\d匹配纯数字
{n}重复n次
{n,}重复n次或更多次
[c]匹配单个字符c
[a-z]匹配 a-z 小写字母的任意一个
[a-zA-Z]匹配 a-z小写字母或 A-Z 大写字母的任意一个

4.2 nginx location

location 的语法

location [ = | ~ | ~* | ^~ ] /uri/ {# 配置指令
}
  • =:精确匹配 URI。
  • ~:区分大小写的正则匹配。
  • ~*:不区分大小写的正则匹配。
  • ^~:前缀匹配,若匹配成功则不再进行正则匹配。

location 验证

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

http {# 其他配置...server {listen 80;server_name example.com;location = /exact {return 200 "Exact match!";}location ~ /regex [a-z]+ {return 200 "Regex match!";}location ^~ /prefix {return 200 "Prefix match!";}}
}

重新加载 Nginx 配置:

systemctl reload nginx

使用 curl 命令分别访问http://example.com/exacthttp://example.com/regexabchttp://example.com/prefixabc,验证不同类型的 location 匹配效果。

4.3 Rewrite

Rewrite语法

rewrite regex replacement [flag];
  • regex:正则表达式,用于匹配 URL。
  • replacement:替换后的 URL。
  • flag:可选参数,常见的 flag 有last(停止当前配置块中的后续 rewrite 指令,重新发起一个新的请求)、break(停止当前配置块中的后续 rewrite 指令,不再重新发起请求)、redirect(返回 302 临时重定向)、permanent(返回 301 永久重定向)

rewrite flag验证

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加以下内容:

http {# 其他配置...server {listen 80;server_name example.com;location /old {rewrite ^/old(.*)$ /new$1 last;}location /new {return 200 "New URL!";}}
}

重新加载 Nginx 配置:

systemctl reload nginx

使用 curl 命令访问http://example.com/old/abc,观察响应结果,验证last flag 的效果。

rewrite中的捕获组

在 rewrite 指令中,可以使用括号()来捕获匹配的内容,并在替换后的 URL 中使用$1$2等变量来引用捕获的内容。例如:

rewrite ^/article/(\d+)$ /article.php?id=$1 last;

nginx中的set指令

在 Nginx 中,set 指令用于定义变量并赋值,这些变量可以用于后续的条件判断、日志记录、重写规则等场景。它提供了灵活的动态配置能力,尤其在处理复杂的请求逻辑时非常有用。

语法:

set $variable value;

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

相关文章:

  • 【项目篇之统一硬盘操作】仿照RabbitMQ模拟实现消息队列
  • C++入门小馆:继承
  • 数据库-数据类型,表的约束和基本查询操作
  • SONiC-OTN代码详解(具体内容待续)
  • set autotrace报错
  • K8S的使用(部署pod\service)+安装kubesphere图形化界面使用和操作
  • 【机器学习案列-22】基于线性回归(LR)的手机发布价格预测
  • 【iOS】消息流程探索
  • 基于python的task--时间片轮询
  • 为了结合后端而学习前端的学习日志——【黑洞光标特效】
  • VMware-centOS7安装redis分布式集群
  • 《Java高级编程:从原理到实战 - 进阶知识篇五》
  • 统计学中的p值是什么?怎么使用?
  • Ray开源程序 是用于扩展 AI 和 Python 应用程序的统一框架。Ray 由一个核心分布式运行时和一组用于简化 ML 计算的 AI 库组成
  • 初识 iOS 开发中的证书固定
  • flink常用算子整理
  • QT | 常用控件
  • 个人文章不设置vip
  • MySQL复合查询全解析:从基础到多表关联与高级技巧
  • 【Hive入门】Hive与Spark SQL深度集成:Metastore与Catalog兼容性全景解析
  • 视频转GIF
  • 网狐系列三网通新钻石娱乐源码全评:结构拆解、三端实测与本地部署问题记录
  • ResNet改进(37):DenseBlock模块实现
  • 游戏引擎学习第257天:处理一些 Win32 相关的问题
  • 【Python】一直没搞懂迭代器是什么。。
  • 【Linux】SELinux 的基本操作与防火墙的管理
  • C++负载均衡远程调用学习之上报功能与存储线程池
  • QT对象树
  • C++日志系统实现(二)
  • 三种方式存图分别输出“无向无权图”的“DFS序列”