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.mzph.cn/bicheng/79859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高定电视,一场关于生活方式的觉醒

需要有自己的工作室,雇用3个以上专职模特,至少15名全职员工和20名技术工匠‌; 每年都要参加巴黎高级时装周,展示至少50款原创设计; 使用的面料必须高质量、昂贵且不同寻常,设计上注重细节和个性&#x…

用PyTorch搭建卷积神经网络实现MNIST手写数字识别

用PyTorch搭建卷积神经网络实现MNIST手写数字识别 在深度学习领域,卷积神经网络(Convolutional Neural Network,简称CNN)是处理图像数据的强大工具。它通过卷积层、池化层和全连接层等组件,自动提取图像特征&#xff…

Tensorrt 基础入门

什么是tensorrt? 其他厂商: Qualcomm, Hailo, google TPU tensorrt的优劣势 使用tensorrt的pipeline tensorrt使用中存在的问题以及解决方案 tensorrt的应用场景 自动驾驶模型部署需要关注的问题: 边端硬件资源有限 散热(不能水冷) 实时性&…

Qt 显示QRegExp 和 QtXml 不存在问题

QRegExp 和 QtXml 问题 在Qt6 中 已被弃用; 1)QRegExp 已被弃用,改用 QRegularExpression Qt5 → Qt6 重大变更:QRegExp 被移到了 Qt5Compat 模块,默认不在 Qt6 核心模块中。 错误类型解决方法QRegExp 找不到改用 Q…

玩玩OCR

一、Tesseract: 1.下载windows版: tesseract 2. 安装并记下路径,等会要填 3.保存.py文件 import pytesseract from PIL import Image def ocr_local_image(image_path):try:pytesseract.pytesseract.tesseract_cmd rD:\Programs\Tesseract-OCR\tesse…

Dify 完全指南(一):从零搭建开源大模型应用平台(Ollama/VLLM本地模型接入实战)》

文章目录 1. 相关资源2. 核心特性3. 安装与使用(Docker Compose 部署)3.1 部署Dify3.2 更新Dify3.3 重启Dify3.4 访问Dify 4. 接入本地模型4.1 接入 Ollama 本地模型4.1.1 步骤4.1.2 常见问题 4.2 接入 Vllm 本地模型 5. 进阶应用场景6. 总结 1. 相关资源…

C++ Windows 打包exe运行方案(cmake)

文章目录 背景动态库梳理打包方案一、使用 Vcpkg 安装静态库(关键基础配置)1. 初始化 Vcpkg2. 安装静态库(注意 x64-windows-static 后缀) 二、CMakeLists.txt 关键配置三、编译四、验证 不同平台代码兼容\_\_attribute\_\_((pack…

Java学习手册:Hibernate/JPA 使用指南

一、Hibernate 和 JPA 的核心概念 实体(Entity) :实体是 JPA 中用于表示数据库表的 Java 对象。通过在实体类上添加 Entity 注解,JPA 可以将实体类映射到数据库表。例如,定义一个 User 实体类: import ja…

字符串匹配 之 拓展 KMP算法(Z算法)

文章目录 习题2223.构造字符串的总得分和3031.将单词恢复初始状态所需的最短时间 II 灵神代码模版 区别与KMP算法 KMP算法可用于求解在线性时间复杂度0(n)内求解模式串p在主串s中匹配的未知当然,由于在KMP算法中,预处理求解出了next数组,也就…

安全为上,在系统威胁建模中使用量化分析

*注:Open FAIR™ 知识体系是一种开放和独立的信息风险分析方法。它为理解、分析和度量信息风险提供了分类和方法。Open FAIR作为领先的风险分析方法论,已得到越来越多的大型组织认可。 在数字化风险与日俱增的今天,企业安全决策正面临双重挑战…

游戏引擎学习第259天:OpenGL和软件渲染器清理

回顾并为今天的内容做好铺垫 今天,我们将对游戏的分析器进行升级。在之前的修复中,我们解决了分析器的一些敏感问题,例如它无法跨代码重新加载进行分析,以及一些复杂的小问题。现在,我们的分析器看起来已经很稳定了。…

讯睿CMS模版常用标签参数汇总

一、模板调用标签 1、首页 网站名称:{SITE_NAME} 标题:{$meta_title}(列表页通用) Keywords:{$meta_keywords} Description:{$meta_description}2、列表页 迅睿cms调用本栏目基础信息标签代码 当前栏目…

【C#】Buffer.BlockCopy的使用

Buffer.BlockCopy 是 C# 中的一个方法,用于在数组之间高效地复制字节块。它主要用于操作字节数组(byte[]),但也可以用于其他类型的数组,因为它直接基于内存操作。 以下是关于 Buffer.BlockCopy 的详细说明和使用示例&…

记一次pdf转Word的技术经历

一、发现问题 前几天在打开一个pdf文件时,遇到了一些问题,在Win10下使用WPS PDF、万兴PDF、Adobe Acrobat、Chrome浏览器打开都是正常显示的;但是在macOS 10.13中使用系统自带的预览程序和Chrome浏览器(由于macOS版本比较老了&am…

在Laravel 12中实现4A日志审计

以下是在Laravel 12中实现4A(认证、授权、账户管理、审计)日志审计并将日志存储到MongoDB的完整方案(包含性能优化和安全增强措施): 一、环境配置 安装MongoDB扩展包 composer require jenssegers/mongodb配置.env …

链表高级操作与算法

链表是数据结构中的基础,但也是面试和实际开发中的重点考察对象。今天我们将深入探讨链表的高级操作和常见算法,让你能够轻松应对各种链表问题。 1. 链表翻转 - 最经典的链表问题 链表翻转是面试中的常见题目,也是理解链表指针操作的绝佳练…

架构思维:构建高并发读服务_使用懒加载架构实现高性能读服务

文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案:懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中,「读多写少」的业务场景占据主流:浏…

在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行

最近在学习Hadoop集群map reduce分布运算过程中,经多方面排查可能是电脑本身配置的原因导致每次运行都会报“No such file or directory”的错误,最后我是通过打包文件到虚拟机里运行得到结果,具体步骤如下: 前提是要保证maven已经…

软考-软件设计师中级备考 11、计算机网络

1、计算机网络的分类 按分布范围分类 局域网(LAN):覆盖范围通常在几百米到几千米以内,一般用于连接一个建筑物内或一个园区内的计算机设备,如学校的校园网、企业的办公楼网络等。其特点是传输速率高、延迟低、误码率低…

【C#】.net core6.0无法访问到控制器方法,直接404。由于自己的不仔细,出现个低级错误,这让DeepSeek看出来了,是什么错误呢,来瞧瞧

🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…