Nginx之正向代理配置示例和说明
一、NGINX正向代理功能简介
Nginx的正向代理功能允许局域网中的客户端通过代理服务器访问Internet资源。具体来说,Nginx作为一种流行的Web服务器和反向代理服务器,在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点:
- 访问外部资源:在正向代理的配置下,Nginx作为代理服务器,帮助内部网络的用户访问外部互联网上的资源。
- 安全性:通过正向代理,可以对内部用户的上网行为进行监控和管理,提高网络安全性。
- 配置简便:客户端需要配置代理服务器的信息,以便通过Nginx访问指定网站。
- 提高访问速度:代理服务器可以缓存经常访问的资源,从而提高后续请求的响应速度。
- 隐藏客户端信息:正向代理可以隐藏客户端的真实IP地址,增加匿名性。
- 负载均衡:虽然不直接属于正向代理的功能,但Nginx还可以用作负载均衡器,分散到多个服务器上,提高网站的可用性和稳定性。
博主将通过实验介绍nginx正向代理的配置和应用,实验环境说明如下:
- 操作系统:centos7.6
- nginx版本:1.26.0
二、NGINX正向代理配置
1、实验环境规划
实验环境规划如下,client和nginx server位于同一个局域网内,client无法之间访问外网,通过nginx server提供的正向代理访问互联网。

2、nginx server主机安装nginx
[root@s76 yum.repos.d]# yum install -y nginx
…
[root@s76 yum.repos.d]# nginx -Version
nginx version: nginx/1.26.0
3、添加百度网站正向代理配置
[root@s76 conf.d]# cat test.conf
server {listen 8888; # 监听端口server_name localhost;#设置DNS解析器的地址为114.114.114.114,并且设置了解析器的缓存时间为300秒(这样每隔300s就会重新解析一次)resolver 114.114.114.114 valid=300 ipv6=off;resolver_timeout 3s; # 设置解析DNS的超时时间为3秒proxy_read_timeout 30s; #设置代理服务器读取超时时间,默认60sproxy_send_timeout 30s; #该参数用于设置向后端服务器发送数据时的超时时间,默认60sproxy_connect_timeout 30s; #该参数用于设置与后端服务器建立连接时的超时时间,默认60sset $url "www.baidu.com"; #这里设置url变量指向百度location / {proxy_pass http://$url; # 将请求转发到由 $url 变量表示的地址,如果目标网站服务是特定断开,可以使用http://$url:port方式proxy_buffers 256 4K; # 设置用于缓存后端响应的缓冲区大小为256个,每个大小为4K。proxy_max_temp_file_size 0; # 设置Nginx暂存响应数据的最大临时文件大小为0,即不使用临时文件。proxy_cache_valid 200 302 1m; # 针对状态码为200和302的响应,设置缓存有效期为1分钟。proxy_cache_valid 301 1h; # 针对状态码为301的响应,设置缓存有效期为1小时。proxy_cache_valid any 1m; # 对于其他任何响应状态码,设置缓存有效期为1分钟。}
}
4、热加载nginx配置
[root@s76 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@s76 conf.d]# nginx -s reload
5、禁止client访问外网
博主这里采用的是去掉DNS参数配置,模拟client主机无法访问互联网网站。
[root@localhost]~# vim /etc/resolv.conf
[root@localhost]~# ping www.baidu.com
ping: unknown host www.baidu.com
[root@localhost]~# curl -I http://www.baidu.com
curl: (6) Couldn’t resolve host ‘www.baidu.com’
6、client通过nginx正向代理访问百度
如下验证结果所示,client终端本来无法访问百度,通过局域网nginx正向代理地址实现了访问百度网站的需求。

7、添加访问日志记录
添加access_log参数,记录访问日志,重新热加载配置,访问记录日志就会被记录下来。这就是nginx正向代理的主要用途,用于严格管控和审计需要严格限制访问外网的终端用户。但是这种方式有一个大弊端,就是如果有多个网站都需要单独配置,配置就多而繁琐。对于https访问支持也不友好。
[root@s76 conf.d]# cat test.conf
…
access_log /var/log/nginx/test.access.log;
…
二、NGINX正向代理插件安装和使用
1、下载nginx源码文件
我们已经通过yum安装了nginx,安装正向代理插件ngx_http_proxy_connect_module模块,我们需要下载源码文件,将插件模块通过编译添加到nginx中。下载并解压软件包。该插件最新支持版本为1.25.x,所以我们下周上一个稳定版本。
[root@s76 opt]# wget https://nginx.org/download/nginx-1.25.5.tar.gz
…
[root@s76 opt]# tar -zxvf nginx-1.25.5.tar.gz
2、下载ngx_http_proxy_connect_module模块
[root@s76 opt]# wget --no-check-certificate https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/heads/master.zip
…
[root@s76 opt]# unzip master.zip
…
3、打补丁
[root@s76 nginx-1.25.5]# patch -p1 < /opt/ngx_http_proxy_connect_module-master/patch/proxy_connect.patch
…
4、安装依赖包
[root@s76 nginx-1.25.5]# yum install -y pcre pcre-devel openssl-devel
5、执行configure
[root@s76 nginx-1.25.5]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-dynamic-module='/opt/ngx_http_proxy_connect_module'
6、执行make
[root@s76 nginx-1.25.5]# make
…
make[1]: Leaving directory `/opt/nginx-1.25.5’
7、验证nginx版本

8、替换nginx二进制文件
[root@s76 nginx-1.25.5]# make install
…
9、重新启动nginx
[root@s76 nginx-1.25.5]# systemctl start nginx
10、nginx配置文件加载正向代理插件模块
我们可以通过nginx -V查看modules的文件路径,这里博主实验证明需要make install才会生成.so文件,有些博文说的替换二进制文件的时候modules目录下是空的。make install的时候在日志记录中可以看到生成文件目录位置信息。
[root@s76 conf.d]# ll /usr/lib64/nginx/modules/
total 176
-rwxr-xr-x. 1 root root 178736 May 13 09:22 ngx_http_proxy_connect_module.so
[root@s76 conf.d]# cat /etc/nginx/nginx.conf
#配置文件最外层添加如下行
load_module /usr/lib64/nginx/modules/ngx_http_proxy_connect_module.so;
11、添加正向代理配置
[root@s76 conf.d]# cat zxdl.conf
# 参考https://github.com/chobits/ngx_http_proxy_connect_module
server {listen 9090;resolver 114.114.114.114 valid=60s ipv6=off;resolver_timeout 30s;proxy_connect ;proxy_connect_allow 443 80;proxy_connect_connect_timeout 10s;proxy_connect_read_timeout 10s;proxy_connect_send_timeout 10s;location / {proxy_pass $scheme://$http_host$request_uri;proxy_set_header Host $host;proxy_http_version 1.1;proxy_ssl_server_name on;}
}
12、验证配置并重新加载nginx配置
[root@s76 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@s76 conf.d]# nginx -s reload
13、客户端设置http代理
[root@localhost]~# export http_proxy=‘192.168.10.76:9090’
[root@localhost]~# export https_proxy=‘192.168.10.76:9090’
14、代理上网验证
如下图所示该终端本来是无法访问互联网的,通过nginx的正向代理就实现了代理上网的需求。通过这个代理插件不仅可以访问百度还可以访问任意http和https网站。博主这里是通过取消DNS配置模拟无法上网,这种情况下yum安装是无法正常使用的,但是在配置了http_proxy之后我们就可以通过nginx的正向代理正常使用yum安装软件包了。

四、QA
1、执行configure的时候报错
- 报错信息:./configure: error: no =/opt/ngx_http_proxy_connect_module/config was found
- 报错原因:命令中多了一个“=”符号
- 解决方案:修改参数为–add-dynamic-module=‘/opt/ngx_http_proxy_connect_module’
2、执行configure的时候报错
- 报错信息:./configure: error: the HTTP rewrite module requires the PCRE library.
- 报错原因:系统未安装pcre依赖包
- 解决方案:执行yum install -y pcre pcre-devel安装pcre依赖包
3、执行configure的时候报错
- 报错信息:./configure: error: SSL modules require the OpenSSL library.
- 报错原因:未安装openssl库
- 解决方案:执行yum install -y openssl-devel安装openssl库
五、总结
其实不管是正向代理还是反向代理,代理的都是浏览器和真实服务器之间的流量,正向代理代理的是内部服务器出去的流量,客户端或者浏览器都通过nginx这个中间节点后访问互联网上真实服务器,这就是正向代理。互联网的终端或者浏览器通过nginx这个中间节点流量转发和访问控制确定最终访问的内部服务这就是反向代理。白话文来说正向代理和反向代理就是一个流量方向的不同,正向代理是出向的流量代理,反向代理是入向的流量代理。
相关文章:
Nginx之正向代理配置示例和说明
一、NGINX正向代理功能简介 Nginx的正向代理功能允许局域网中的客户端通过代理服务器访问Internet资源。具体来说,Nginx作为一种流行的Web服务器和反向代理服务器,在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点: 访问外…...
Linux文件与目录管理
#Linux系统基础 文件与目录管理 一、常用命令 文件、目录操作命令说明cd(cd …/ cd ~/ cd/ cd path)切换目录 cd ~等于 cd /rootls显示目录文件ls -l 或者 ll以详细信息的方式显示目录文件pwd查看当前工作目录cp (-i -r)复制文件或目录mkdir创建目录,…...
08.组件间通信-插槽
1.默认插槽 父组件 <template><div class"father"><h3>父组件</h3><div class"content"><Category title"热门游戏列表">//默认插槽内容<ul><li v-for"g in games" :key"g.id&quo…...
在AWS上运行的EKS Elastic Kubernetes Service 创建集群Cluster,Node group, Nodes
1. 前提条件 AWS Account: https://aws.amazon.com/free/Installing KubeCtl CLI https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.htmlEKS Cluster RoleIAM Role for Node GroupVPCEC2 Key Pair which can be used to SSH to the worker nodesAWS …...
10款堪称神器的宝藏软件,相见恨晚
今天给大家带来10款堪称神器的宝藏软件,每一个都非常好用,让你直呼相见恨晚。 1、知犀思维导图 知犀思维导图是大家组织信息、梳理思维的重要利器,它可以帮助我们以图形化的方式呈现思维过程,让整体思路变得清晰直观。通过使用知…...
为什么会选择厚膜作为芯片电阻?
引线键合 引线键合是集成电路 (IC) 或其他半导体器件与其封装之间互连的常见解决方案。它还可用于将IC连接到其他电子设备或将其他厚膜电路相互连接。引线键合通常被认为是最具成本效益和最灵活的互连技术,用于组装大多数半导体封装。引线键合…...
基本药物采购使用
--医院采购基本药物金额数 select sum(采购基本药物金额数) 采购基本药物金额数 from ( select sum(t.实收金额) 采购基本药物金额数 from 住院费用记录 t,药品规格 a where t.收费细目ida.药品id and t.记录状态1 and a.基本药物基药 and t.收费细目id not in( …...
k8s小型实验模拟
(1)Kubernetes 区域可采用 Kubeadm 方式进行安装。(5分) (2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上,Pod使用hostPat…...
leetcode168:Excel表列名称
题目链接:168. Excel表列名称 - 力扣(LeetCode) class Solution { public:string convertToTitle(int columnNumber) {string ss1;int MOD 0;if(columnNumber < 26){ss1 (columnNumber A - 1);return ss1;}while(columnNumber){int MO…...
排课系统1
参考:https://gitee.com/lequal/CourseArrange 软件技术栈 当然,我会逐一解释这些技术栈的含义:### 前端技术栈1. **Vue2.x**:- Vue.js 是一个流行的前端 JavaScript 框架,用于构建用户界面和单页应用程序(SPA)。- 2.x 表示 Vue.js 的第二个主要版本,它提供了一套响应…...
uni-popup
UniPopup是uni-app框架中的一个轻量级组件,它提供了一种便捷的方式来显示弹出窗口(如对话框、通知、选择器等)。uni-popup可以帮助开发者在不同平台(如Web、H5、小程序等)上快速实现一致的用户体验,支持自定…...
torchmetrics,一个无敌的 Python 库!
更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个无敌的 Python 库 - torchmetrics。 Github地址:https://github.com/Lightning-AI/torchmetrics 在深度学习和机器学习项目中,模型评估是一个至关重要的环节。为了准确…...
如何快速上手Python,成为一名数据分析师
如何快速上手Python,成为一名数据分析师 成为一名数据分析师需要掌握Python编程语言以及数据分析相关的知识和技能。以下是一些步骤和建议,帮助你快速上手Python并成为一名数据分析师: 学习Python基础知识:首先,你需要…...
MC服务器怎么搭建
MC服务器怎么搭建?随着《我的世界》(Minecraft,简称MC)的火爆,越来越多的玩家和社区开始搭建自己的MC服务器,与朋友共享创造的乐趣。但搭建一台稳定、高效的MC服务器并不是一件容易的事。今天,我们就来聊聊…...
JavaScript正则表达式
search()方法 用来检索与正则表达式相匹配的子字符串,并返回子字符串开始的位置。若结果为-1则表示没有与之匹配的子字符串例: var str"well pemper" var str1str.search(/em/g) console.log(str1) //返回6replace()方法 用于替换一个与正…...
Redis实战宝典:基础知识、实战技巧、应用场景及最佳实践全攻略
背景 在Java系统实现过程中,我们不可避免地会借助大量开源功能组件。然而,这些组件往往功能丰富且体系庞大,官方文档常常详尽至数百页。而在实际项目中,我们可能仅需使用其中的一小部分功能,这就造成了一个挑战&#…...
[FFmpeg学习]初级的SDL播放mp4测试
在之前的学习中,通过AVFrame来保存为图片来认识了AVFrame, [FFmpeg学习]从视频中获取图片_ffmpeg 获取图片-CSDN博客 在获取到AVFrame时,还可以调用SDL方法来进行展现,实现播放效果。 参考资料 SDL,ffmpeg实现简单…...
情景题之小明的Linux实习之旅:linux实战练习1(下)【基础命令,权限修改,日志查询,进程管理...】
小明的Linux实习之旅:基础指令练习情景练习题下 前景提要小明是怎么做的场景1:初识Linux,创建目录和文件场景2:权限管理,小明的权限困惑场景3:打包与解压,小明的备份操作场景4:使用G…...
k8s 证书更新
如何使用脚本更新Kubernetes集群证书 引言 Kubernetes集群中,由kubeadm初始化的证书有效期默认为一年。当这些证书接近或已经超过有效期时,它们必须被更新以保证集群的正常运作。本文将介绍如何使用特定脚本来更新这些证书,将它们的有效期延…...
Linux操作系统学习:day01
内容来自:Linux介绍 视频推荐:Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试 day01 基础概念 Linux 是 UNIX 操作系统的一个克隆系统, 但是Linux是开源的。 Linux是一个基于文件的操作系统。操作系统需要和硬件进行交互…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...


