Nginx 核心功能

news2025/5/23 7:38:09

目录

一:正向代理

1:编译安装 Nginx

(1)安装支持软件

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

(3)编译安装 Nginx

(4)添加 Nginx 系统服务

2:配置正向代理

二:反向代理

1:配置nginx七层代理

2:配置nginx四层代理

三:Nginx 缓存

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

2:代理缓存功能设置

四:Nginx rewrite和正则


一:正向代理

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

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

1:编译安装 Nginx

(1)安装支持软件

    Nginx 的配置及运行需要 pcre、zlib 等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保 Nginx 的安装顺利完成。

[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel
perl-ExtUtils-MakeMaker git wget tar

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

    Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确 地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为 nginx 的用户,不 建 立宿主文件夹,也禁止登录到 Shell 环境。

[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx:nginx /var/log/nginx

(3)编译安装 Nginx

    配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx; 启用 http_stub_status_module 模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定,配置前可参考“./configure --help”给出的说明。

[root@localhost ~]# tar zxf nginx-1.26.3_http_proxy.tar.gz
[root@localhost ~]# cd nginx-1.26.3
[root@localhost ~]# git clone
https://github.com/chobits/ngx_http_proxy_connect_module.git #(默认nginx不支持
转发https)下载第三方模块,用以支持正向代理https转发,提供的源码目录已提前放置该
模块,这里无需下载,仅作为介绍
[root@localhost nginx-1.26.3]#./configure --prefix=/usr/local/nginx --user=nginx
--group=nginx --with-http_ssl_module --with-http_v2_module
--with-http_realip_module --with-http_stub_status_module
--with-http_gzip_static_module --with-pcre --with-stream
--with-stream_ssl_module --with-stream_realip_module
--with-http_gzip_static_module --add-module=./ngx_http_proxy_connect_module
[root@localhost nginx-1.26.3]# make && make install
参数类别参数名称说明
用户/组user=nginx指定nginx运行用户
group=nginx指定nginx运行组
HTTP模块with=http_ssl_module支持HTTPS协议
with=http_v2_module支持HTTP/2协议
with=http_realip_module支持IP透传(获取客户端真实IP)
with=http_stub_status_module支持状态页面(用于监控nginx运行状态)
with=http_gzip_static_module支持静态文件压缩
with=pcre支持正则表达式
流模块with=stream支持TCP/UDP反向代理
with=stream_ssl_module支持TCP连接的SSL加密
with=stream_realip_module支持TCP连接的IP透传
第三方模块add=module=./ngx_http_proxy_connect_module支持HTTPS转发(默认nginx不支持,需添加此第三方模块)

    为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管 理员直接执行“nginx”命令就可以调用 Nginx 的主程序。

[root@localhost nginx-1.26.3]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

(4)添加 Nginx 系统服务

[root@localhost ~]# vi /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
User=root
Group=root

[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

2:配置正向代理

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
server {
    listen 8080;         # 代理监听端口
    server_name proxy.example.com;

    # 解析域名使用的 DNS
    resolver 8.8.8.8 1.1.1.1;     # 多个 DNS 用空格分隔

    # 启用代理 CONNECT 方法(支持 HTTPS)
    proxy_connect;
    proxy_connect_allow 443 80; # 允许代理到 80 和 443 端口
    proxy_connect_connect_timeout 10s;
    proxy_connect_read_timeout 10s;
    proxy_connect_send_timeout 10s;

    # 处理 HTTP/HTTPS 请求
    location / {
        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 Connection "";
    }
}
[root@localhost ~]#nginx -t
[root@localhost ~]#nginx -s reload

验证正向代理:

Windows中验证,使用火狐浏览器,设置http和https代理即可:

二:反向代理

    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)的主备切换与健康检查。

资源清单

本实验需要两台主机

操作系统

配置

IP

服务

OpenEuler

2C4G

192.168.10.101

Nginx

OpenEuler

2C4G

192.168.10.102

Httpd

1:配置nginx七层代理

(1)环境安装( 192.168.10.102上操作 )

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#dnf install httpd -y
[root@localhost ~]#echo "这是后端主机" >/var/www/html/index.html
[root@localhost ~]#systemctl start httpd

(3)配置nginx七层代理转发 ( 192.168.10.101上操作 )

[root@localhost ~]# vi /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

(4)验证转发效果

[root@localhost ~]# curl 192.168.10.101
这是后端主机

2:配置nginx四层代理

(1)配置四层代理 (192.168.10.101上操作)

[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; # 长连接保持时间
    }
}

注意:

stream需要与http{ }模块平级,不能在http{ }中嵌套

[root@localhost ~]#nginx -t
[root@localhost ~]#nginx -s reload
[root@localhost ~]#ss -nlpt | grep 2222
LISTEN 0 511 0.0.0.0:2222 0.0.0.0:*
users:(("nginx",pid=8404,fd=6),("nginx",pid=8403,fd=6))

(2)验证四层代理

[root@localhost ~]# ssh root@192.168.10.101 -p2222
[root@localhost ~]#ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.10.102 netmask 255.255.255.0 broadcast 192.168.10.255
    inet6 fe80::20c:29ff:fe9f:de15 prefixlen 64 scopeid 0x20<link>
    ether 00:0c:29:9f:de:15 txqueuelen 1000 (Ethernet)
    RX packets 389822 bytes 511828164 (488.1 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 104614 bytes 8588675 (8.1 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

三:Nginx 缓存

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

缓存类型作用场景特点
代理缓存缓存反向代理的后端服务器(如 Tomcat、Apache)的响应内容。需定义缓存路径、缓存键、有效期等;适合静态接口或变化较少的内容。
FastCGI 缓存缓存通过 FastCGI 协议处理的动态内容(如 PHP/Python 配合 PHP-FPM)。需与 FastCGI 服务配合使用;可加速动态页面响应。
uWSGI/SCGI 缓存缓存通过 uWSGI 或 SCGI 协议处理的后端内容(如 Python Flask/Django)。类似 FastCGI 缓存,但针对特定协议。
静态资源缓存通过客户端浏览器缓存静态资源(如 JS/CSS/图片),减少服务端请求。服务端不存储缓存,仅控制浏览器缓存行为;节省带宽但无法减少后端负载。

代理缓存原理:

第一步:客户端第一次向Nginx请求数据A;

第二步:当Nginx发现缓存中没有数据A时,会向服务端请求数据A;

第三步:服务端接收到Nginx发来的请求,则返回数据A到Nginx,并且缓存在Nginx;

第四步:Nginx返回数据A给客户端应用;

第五步:客户端第二次向Nginx请求数据A;

第六步:当Nginx发现缓存中存在数据A时,则不会请求服务端;

第七步:Nginx把缓存中的数据A返回给客户端应用。

2:代理缓存功能设置

(1)反向代理配置

[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)设置缓存功能

  • proxy_cache_path :定义缓存文件的存储路径
  • levels=1:2 :定义缓存目录的层级结构,levels=N:M,表示缓存文件路径的层级深度,
  • keys_zone=my_cache:10m :定义共享内存区域,用于存储缓存键(key)和元数据(如 过期时间),10m:共享内存区大小(通常每 1MB 可存储约 8000 个键) i
  • nactive=60m :定义缓存内容的闲置有效期。60分钟 内未被访问,将被自动删除
  • max_size=1g :定义缓存目录的最大磁盘空间。当缓存量达到 1GB 时,Nginx 启动 LRU (最近最少使用)算法清理旧缓存。
  • use_temp_path=off :控制临时文件的存储位置,推荐值:off(减少磁盘操作,提升性 能)

(3)验证缓存功能

[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

四:Nginx rewrite和正则

Rewrite的应用场景

  • 路径美化:将/product/123 转换为 /index.php?id=123
  • 旧链接迁移:将过期URL永久重定向(301)到新地址
  • 强制HTTPS/域名统一:自动跳转http://到https://,或合并www与非www域名
  • 动态路由:适配单页应用(SPA)、RESTful API路由
  • 灰度发布:按规则将部分流量导向新版本服务
Nginx rewrite 指令语法
语法格式说明示例
rewrite regex replacement [flag];将匹配 regex 的URL重写为 replacementrewrite ^/old/(.*)$ /new/$1 permanent;
flag 可选值
last重写后重新发起新请求(再次匹配location)rewrite ^/path /newpath last;
break重写后不再匹配其他规则,直接处理请求rewrite ^/path /newpath break;
redirect返回302临时重定向(浏览器地址栏变)rewrite ^/oldurl /newurl redirect;
permanent返回301永久重定向(浏览器地址栏变)rewrite ^/old /new permanent;
正则符号说明Nginx示例
^匹配字符串开头^/path 匹配以 /path 开头的URL
$匹配字符串结尾\.html$ 匹配以 .html 结尾的URL
.*匹配任意字符(除换行外)^/old/(.*)$ 匹配 /old/ 后的任意内容
\d匹配数字^/item/(\d+)$ 匹配如 /item/123
[abc]匹配括号内任意字符^/[abc]/ 匹配 /a//b/ 或 /c/
[^abc]不匹配括号内字符^/[^abc]/ 排除 /a//b//c/
(pattern)捕获分组,用于后续引用^/user/(\w+)$ 捕获用户名
\w匹配字母、数字、下划线^/user/(\w+)$ 匹配用户名
\s匹配空白字符(空格、制表符等)较少在URL中使用
+前一个字符1次或多次\d+ 匹配1个或多个数字
?前一个字符0次或1次^/page/? 匹配 /page 或 /page/
{n,m}前一个字符n到m次\d{2,4} 匹配2~4位数字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2383725.html

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

相关文章

【Canvas与图标】圆角方块蓝星CSS图标

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角方块蓝星CSS Draft1</…

机器学习 day05

文章目录 前言一、模型选择与调优1.交叉验证2.超参数搜索 前言 通过今天的学习&#xff0c;我掌握了机器学习中模型的选择与调优&#xff0c;包括交叉验证&#xff0c;超参数搜索的概念与基本用法。 一、模型选择与调优 模型的选择与调优有许多方法&#xff0c;这里主要介绍较…

C#新建打开文件对话框

这是Winform直接封装好的打开文件对话框 using System.Windows.Forms; public static string OpenFile(string path) {OpenFileDialog openFileDialog new OpenFileDialog();// 设置对话框属性openFileDialog.Title "选择文件";openFileDialog.InitialDirectory …

汇川PLC通过开疆智能Profinet转ModbusTCP网关读取西门子PLC数据案例

本案例是客户通过开疆智能Profient转ModbusTCP网关连接汇川PLC的配置案例 Modbus TCP主站即Modbus TCP客户端&#xff0c;Modbus TCP主站最多支持同时与31个Modbus TCP从站 。&#xff08;Modbus TCP服务器&#xff09;进行通信。 第一步设置PLC IP地址&#xff1b; 默认PLC…

零基础入门:MinerU 和 PyTorch、CUDA的关系

&#x1f4a1;一句话总结&#xff1a;MinerU 是一个用 PyTorch 跑模型的程序&#xff0c;PyTorch 支持多种加速方式&#xff08;如 CUDA、MPS&#xff09;&#xff0c;让它跑得快就需要依赖这些加速工具。 PyTorch官网安装教程&#xff08;可根据系统情况选择不同版本&#xf…

借助IEDA ,Git版本管理工具快速入门

01 引言 一直使用SVN作为版本管理工具&#xff0c;直到公司新来的一批同事&#xff0c;看到我们使用的SVN都纷纷吐槽&#xff0c;什么年代了&#xff0c;还使用SVN。聊下来&#xff0c;才知道人家公司早早就将SVN切成了Git工具&#xff0c;并吐槽SVN的各种弊端。 既然新的技术…

三维空间,毫秒即达:RTMP|RTSP播放器在Unity中的落地实现

有人问我&#xff1a;在 Unity 里做超低延迟的直播播放&#xff0c;是什么感觉&#xff1f; 我说&#xff0c;是把一帧帧流动的时间&#xff0c;嵌进一个三维的空间里。 它不属于现在&#xff0c;也不属于过去。 它属于“实时”——属于那一秒内刚刚发生&#xff0c;却已被你看…

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd 1.1.安装命令 sudo apt update sudo apt install vsftpd 1.2.备份原始配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 1.3.配置 vsftpd 编辑配置文件 /etc/vsftpd.conf&#xff1a; sudo vim /etc/vsftpd.conf 将以下参数修改为对应值&#xff…

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…

Java的Filter与Spring的Interceptor的比较

一、技术规范与框架依赖 维度FilterInterceptor所属规范Servlet 规范&#xff08;Java EE 标准组件&#xff09;Spring MVC 框架组件&#xff08;非 Java EE 标准&#xff09;框架依赖不依赖 Spring&#xff0c;仅需 Servlet 容器&#xff08;如 Tomcat&#xff09;依赖 Sprin…

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…

微服务架构中的多进程通信--内存池、共享内存、socket

目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中&#xff0c;不同线程之间的比如访问同一个内存&#xff0c;用的什么锁控制的 3.3 疑问&#xff1a;假如一个进程发送给了另外两个进程&#xff0c;然后另外两个进程都同…

电脑中所有word文件图标变白怎么恢复

电脑中的word文件图标变白&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.winR-->在弹出的运行窗口中输入“regedit”(如下图所示)&#xff0c;点击确定&#xff1a; 2.按照路径“计算机\HKEY_CLASSES_ROOT\Word.Document.12\DefaultIcon”去找到“&#xff0…

RK3568 OH5.1 源码编译及问题

安装编译器和二进制工具 在源码根目录下执行prebuilts脚本&#xff0c;安装编译器及二进制工具。 bash build/prebuilts_download.sh在源码根目录执行如下指令安装hb编译工具&#xff1a; python3 -m pip install --user build/hb使用build.sh脚本编译源码 进入源码根目录&…

Qt5、C++11 获取wifi列表与wifi连接

一、获取wifi列表 .h 文件内容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…

【KWDB 2025 创作者计划】_从部署开始了解KWDB

一、概述 KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品&#xff0c;支持同一实例同时建立时序库和关系库并融合处理多模数据&#xff0c;具备时序数据高效处理能力&#xff0c;具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、…

高等数学-微分

一、一元函数&#xff1a; 在实际应用中&#xff0c;经常需要近似计算函数yf(x)的增量Δyf(x)-f(x0)f(x0Δx)-f(x0),其中一种近似称为函数的微分。 定义&#xff1a;若函数yf(x)在点x0处的增量Δy可表达为自变量增量Δx的线性函数AΔx和Δx的高阶无穷小量之和&#xff0c;即Δ…

有没有开源的企业网盘,是否适合企业使用?

开源选项丰富、灵活定制能力强、需要额外运维投入、适合特定场景但不一定适合所有企业&#xff0c;是开源企业网盘的主要特征。从表面看&#xff0c;开源网盘往往具有免费或低成本优势&#xff0c;但企业要投入一定的人力与技术资源来完成安装、维护与升级&#xff0c;从而保障…

基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程

文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级&#xff1a;自定义的基础三、自定义页面模板&#xff1a;打造专属页面风格四、自定义文章模板&#xff1a;打造个性化文章呈现五、使用自定义字段和元数据&#xff1a;增强内容灵活性六、利用WordPress钩子&…

使用pm2 部署react+nextjs项目到服务器

记录一下 next.config.js中&#xff1a; output: standalone,package.json配置&#xff1a; "scripts": {"dev": "cross-env NODE_OPTIONS--inspect next dev","build": "next build","start": "cp -r .nex…