当前位置: 首页 > 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;

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

相关文章:

  • Linux:权限的理解
  • 健康养生:从生活点滴启航
  • 解决pycharm检测不到已经装好的conda的pytorch环境
  • 项目成本管理_挣得进度ES
  • 网络:cookie和session
  • 【硬核攻坚】告别CUDA OOM!DeepSeek部署显存瓶颈终极解决方案:三大策略高效落地
  • [特殊字符]Git 操作实战:如何将本地项目提交到远程 Gitee 仓库
  • RocketMQ与Kafka的区别
  • Nuxt3还能用吗?
  • 直方图反向投影
  • Three.js + React 实战系列 - 项目展示区开发详解 Projects 组件(3D 模型 + 动效 + 状态切换)✨
  • android-ndk开发(2): macOS 安装 ndk
  • PyTorch_自动微分模块
  • 时间同步服务核心知识笔记:原理、配置与故障排除
  • 因为gromacs必须安装cuda(系统自带的NVIDIA驱动不行),这里介绍下如何安装cuda
  • 学习路线(机器人软件架构)
  • Java常用注解大全(基于JDK17+SpringBoot3)
  • 对ubuntu的简单介绍
  • Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
  • 题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置
  • SpringMVC 框架核心知识点详解与实战
  • 精益数据分析(41/126):深入解读移动应用商业模式的关键指标与策略
  • linux 高并发 文件句柄数 fs 及 tcp端口数调优
  • 泉州2025年首次网签备案登记的商品住宅并在本年度进行装修、改造及家装物品和材料购置的,在上述补贴额度的基础上上浮2万元,单个产权人补贴最高不超过5万元。
  • VScode中关于Copilot的骚操作
  • ByteArrayOutputStream 类详解
  • 基于yolov11的打电话玩手机检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • 一文说清-什么是强化学习
  • zst-2001 历年真题 程序设计语言
  • 代码随想录算法训练营 Day37 动态规划Ⅴ 完全背包 零钱兑换