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

Nginx核心功能2

一:正向代理

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

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

1.编译安装

(1)安装支持软件

在编译安装 Nginx 之前,需要安装一些必要的支持软件。以常见的 Linux 系统(如 CentOS)为例:

  • gcc:GNU 编译器套件,用于编译 Nginx 的 C 代码,可通过 yum install gcc 安装。
  • pcre(Perl Compatible Regular Expressions):Perl 兼容正则表达式库,Nginx 对 URL 等的正则匹配依赖它,安装命令为 yum install pcre pcre-devel
  • zlib:用于数据压缩,Nginx 对 HTTP 响应的压缩会用到,安装指令是 yum install zlib zlib-devel
  • openssl:提供加密功能,当你需要配置 HTTPS 时会用到,安装方式为 yum install openssl openssl-devel

(2)创建运行用户,组和日志目录

为了安全和权限管理,不建议以 root 用户运行 Nginx。

  • 创建用户组:groupadd nginx
  • 创建用户并加入用户组:useradd -r -g nginx nginx
  • 创建日志目录:mkdir /var/log/nginx
  • 设置目录权限:chown -R nginx:nginx /var/log/nginx

(3)编译安装Nginx 

  1. 下载 Nginx 源码包,可从官方网站获取。
  2. 解压源码包:tar -zxvf nginx-x.x.x.tar.gzx.x.x 为版本号)
  3. 进入解压后的目录:cd nginx-x.x.x
  4. 配置编译选项,例如:
    ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
    其中 --user 和 --group 指定运行 Nginx 的用户和组;--prefix 指定安装目录;--with-http_ssl_module 表示启用 HTTPS 模块。
  5. 编译并安装:
    make
    make install

(4)添加Nginx系统服务

为了方便管理 Nginx 的启动、停止和重启,可将其添加为系统服务。以 CentOS 7 为例,创建 /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=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target

2.配置正向代理

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

打开 Nginx 配置文件(默认在 /usr/local/nginx/conf/nginx.conf),在 http 块中添加如下配置示例:

http {upstream target_server {server target.example.com:80;  # 目标服务器地址和端口}server {listen 8080;  # 本地监听端口location / {proxy_pass http://target_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

(2)验证正向代理:

      配置完成后,重启 Nginx 服务。在客户端设置代理服务器为运行 Nginx 的服务器地址和监听端口(如 8080),然后访问目标服务器资源,查看 Nginx 日志(/var/log/nginx/access.log)确认请求是否通过正向代理成功转发。

二:反向代理

      反向代理是指代理服务器接受客户端请求,然后将请求转发到后端的多个服务器,并将后端服务器的响应返回给客户端,隐藏了后端服务器的真实地址

1.配置nginx七层代理

(1)环境安装

    确保已安装好 Nginx 及相关依赖,安装过程同正向代理部分的编译安装步骤。

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

在 Nginx 配置文件的 http 块中配置后端服务器组和代理规则,示例如下:

http {upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

(3)验证转发效果

       重启 Nginx 服务后,通过客户端访问 Nginx 服务器的 IP 和端口,查看请求是否正确转发到后端服务器,可查看后端服务器的日志确认请求到达情况。

2.配置nginx四层代理

(1)配置四层代理

在 Nginx 配置文件中使用 stream 块进行四层代理配置,示例如下:

stream {upstream tcp_backend_servers {server backend1.example.com:3306;server backend2.example.com:3306;}server {listen 3306;proxy_pass tcp_backend_servers;}
}

(2)验证四层代理

      使用客户端连接到 Nginx 服务器的四层代理端口(如 3306),检查是否能正确连接到后端服务器,可通过后端服务器的连接日志进行确认。

三:Nginx缓存

      使用客户端连接到 Nginx 服务器的四层代理端口(如 3306),检查是否能正确连接到后端服务器,可通过后端服务器的连接日志进行确认。

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

缓存功能的核心原理

Nginx 将用户请求的响应数据存储在本地缓存中,当有相同请求再次到来时,直接从缓存中返回数据,而无需再次向后端服务器请求。

缓存类型
  • 代理缓存:用于代理请求时,缓存后端服务器的响应内容。
  • 浏览器缓存:通过设置 HTTP 响应头(如 Cache-ControlExpires 等),让浏览器缓存资源,减少重复请求。

2.代理缓存功能设置

(1)反向代理配置

在反向代理的基础上,添加缓存相关配置,示例如下:

http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}
}

(2)设置缓存功能

    proxy_cache_path 指令定义了缓存路径、层级结构、缓存区域名称、大小、非活动缓存的过期时间等。proxy_cache 指定使用的缓存区域,proxy_cache_valid 设置不同响应状态码的缓存有效期。

(3)验证缓存功能

      重启 Nginx 服务后,多次请求相同资源,查看 Nginx 日志(/var/log/nginx/access.log)中的缓存命中情况,也可查看缓存目录下的文件变化来确认缓存是否生效。

四:Nginx rewrite和正则

1.Nginx正则

      Nginx 支持 Perl 兼容正则表达式(PCRE),用于匹配 URL、请求头等字符串。常见的正则表达式元字符包括 .(匹配任意单个字符)、*(匹配前面的字符零次或多次)、+(匹配前面的字符一次或多次)、^(匹配字符串开头)、$(匹配字符串结尾)等。

2.nginx location

(1)location 的语法

location [= | ~ | ~* | ^~] /uri/ { ... }

  • =:精确匹配 URL,优先级最高。
  • ~:区分大小写的正则匹配。
  • ~*:不区分大小写的正则匹配。
  • ^~:以指定字符串开头的匹配,一旦匹配成功就不再进行正则匹配。

(2)location验证

      通过配置不同的 location 块,访问相应的 URL,查看 Nginx 是否按照配置的规则进行处理,可通过查看 Nginx 日志(/var/log/nginx/error.log 和 access.log)来确认处理情况。

3.Rewrite

(1)Rewrite语法

rewrite regex replacement [flag];
regex 是用于匹配的正则表达式,replacement 是替换后的字符串,flag 是可选的标志,常见的有:

  • last:停止处理当前 server 块内后续的 rewrite 指令,重新匹配 location
  • break:停止处理当前 location 内后续的 rewrite 指令。
  • redirect:返回 302 临时重定向。
  • permanent:返回 301 永久重定向。

(2)rewrite flag验证

      配置不同 flag 的 rewrite 指令,访问相应的 URL,查看浏览器的地址栏变化和 Nginx 的日志记录,确认 flag 是否按预期工作。

(3)rewrite 中的捕获组

在正则表达式中使用括号 () 定义捕获组,在 replacement 中可以使用 $1$2 等引用捕获组的内容。例如:

rewrite ^/user/(\d+)$ /profile?id=$1 last;

(4)nginx中的set指令

set $variable value; 用于设置变量,可在 rewrite 等指令中使用设置的变量,增强配置的灵活性。例如:

set $new_uri /new_path;
rewrite ^/old_path$ $new_uri last;

相关文章:

  • 初始AI大模型-起源和发展
  • 解决DNS劫持问题
  • 7400MB/s5050TBW完美结合,全新希捷酷玩530R SSD体验评测
  • 【KWDB 创作者计划】_Ubuntu 22.04系统KWDB数据库安装部署使用教程
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)
  • 生成式AI服务内容被滥用的法律责任划分
  • 掌纹图像识别:解锁人类掌纹/生物识别的未来——技术解析与前沿数据集探索
  • 如何快速获取字符串的UTF-8或UTF-16编码二进制数据?数值转换成字符串itoa不是C标准?其它类型转换成字符串?其它类型转换成数值类型?
  • Java学习手册:Hibernate/JPA 使用指南
  • Python 矩阵运算:从理论到实践
  • 免费开源又全能,文件对比需求选他
  • (即插即用模块-Attention部分) 六十五、(2024 WACV) DLKA 可变形大核注意力
  • 方法:批量识别图片区域文字并重命名,批量识别指定区域内容改名,基于QT和阿里云的实现方案,详细方法
  • GGD独立站的优势
  • 如何判断cgroup的版本?
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)
  • SpringBoot实战:整合Knife4j
  • 前端懒加载(Lazy Loading)实战指南
  • 开元类双端互动组件部署实战全流程教程(第3部分:UI资源加载机制与界面逻辑全面解析
  • 金仓数据库 KingbaseES 在电商平台数据库迁移与运维中深入复现剖析
  • 证监会主席吴清:我们资本市场最重要的特征是“靠谱”
  • 大规模空袭也门一日后,以军又对也门萨那机场发出撤离警告
  • 上海虹桥高铁站拦门事件反转,谁在带偏网友?
  • 退休11年后,71岁四川厅官杨家卷被查
  • 新质观察|“模速空间”如何成为“模范空间”
  • 联合国秘书长古特雷斯呼吁印巴保持最大克制