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

Nginx之正向代理配置示例和说明

一、NGINX正向代理功能简介

  Nginx的正向代理功能允许局域网中的客户端通过代理服务器访问Internet资源。具体来说,Nginx作为一种流行的Web服务器和反向代理服务器,在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点:

  1. 访问外部资源:在正向代理的配置下,Nginx作为代理服务器,帮助内部网络的用户访问外部互联网上的资源。
  2. 安全性:通过正向代理,可以对内部用户的上网行为进行监控和管理,提高网络安全性。
  3. 配置简便:客户端需要配置代理服务器的信息,以便通过Nginx访问指定网站。
  4. 提高访问速度:代理服务器可以缓存经常访问的资源,从而提高后续请求的响应速度。
  5. 隐藏客户端信息:正向代理可以隐藏客户端的真实IP地址,增加匿名性。
  6. 负载均衡:虽然不直接属于正向代理的功能,但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资源。具体来说&#xff0c;Nginx作为一种流行的Web服务器和反向代理服务器&#xff0c;在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点&#xff1a; 访问外…...

Linux文件与目录管理

#Linux系统基础 文件与目录管理 一、常用命令 文件、目录操作命令说明cd(cd …/ cd ~/ cd/ cd path)切换目录 cd ~等于 cd /rootls显示目录文件ls -l 或者 ll以详细信息的方式显示目录文件pwd查看当前工作目录cp &#xff08;-i -r&#xff09;复制文件或目录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款堪称神器的宝藏软件&#xff0c;每一个都非常好用&#xff0c;让你直呼相见恨晚。 1、知犀思维导图 知犀思维导图是大家组织信息、梳理思维的重要利器&#xff0c;它可以帮助我们以图形化的方式呈现思维过程&#xff0c;让整体思路变得清晰直观。通过使用知…...

为什么会选择厚膜作为芯片电阻?

引线键合 引线键合是集成电路 &#xff08;IC&#xff09; 或其他半导体器件与其封装之间互连的常见解决方案。它还可用于将IC连接到其他电子设备或将其他厚膜电路相互连接。引线键合通常被认为是最具成本效益和最灵活的互连技术&#xff0c;用于组装大多数半导体封装。引线键合…...

基本药物采购使用

--医院采购基本药物金额数 select sum(采购基本药物金额数) 采购基本药物金额数 from ( select sum(t.实收金额) 采购基本药物金额数 from 住院费用记录 t,药品规格 a where t.收费细目ida.药品id and t.记录状态1 and a.基本药物基药 and t.收费细目id not in( …...

k8s小型实验模拟

&#xff08;1&#xff09;Kubernetes 区域可采用 Kubeadm 方式进行安装。&#xff08;5分&#xff09; &#xff08;2&#xff09;要求在 Kubernetes 环境中&#xff0c;通过yaml文件的方式&#xff0c;创建2个Nginx Pod分别放置在两个不同的节点上&#xff0c;Pod使用hostPat…...

leetcode168:Excel表列名称

题目链接&#xff1a;168. Excel表列名称 - 力扣&#xff08;LeetCode&#xff09; 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框架中的一个轻量级组件&#xff0c;它提供了一种便捷的方式来显示弹出窗口&#xff08;如对话框、通知、选择器等&#xff09;。uni-popup可以帮助开发者在不同平台&#xff08;如Web、H5、小程序等&#xff09;上快速实现一致的用户体验&#xff0c;支持自定…...

torchmetrics,一个无敌的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - torchmetrics。 Github地址&#xff1a;https://github.com/Lightning-AI/torchmetrics 在深度学习和机器学习项目中&#xff0c;模型评估是一个至关重要的环节。为了准确…...

如何快速上手Python,成为一名数据分析师

如何快速上手Python&#xff0c;成为一名数据分析师 成为一名数据分析师需要掌握Python编程语言以及数据分析相关的知识和技能。以下是一些步骤和建议&#xff0c;帮助你快速上手Python并成为一名数据分析师&#xff1a; 学习Python基础知识&#xff1a;首先&#xff0c;你需要…...

MC服务器怎么搭建

MC服务器怎么搭建?随着《我的世界》&#xff08;Minecraft&#xff0c;简称MC&#xff09;的火爆&#xff0c;越来越多的玩家和社区开始搭建自己的MC服务器&#xff0c;与朋友共享创造的乐趣。但搭建一台稳定、高效的MC服务器并不是一件容易的事。今天&#xff0c;我们就来聊聊…...

JavaScript正则表达式

search()方法 用来检索与正则表达式相匹配的子字符串&#xff0c;并返回子字符串开始的位置。若结果为-1则表示没有与之匹配的子字符串例&#xff1a; var str"well pemper" var str1str.search(/em/g) console.log(str1) //返回6replace()方法 用于替换一个与正…...

Redis实战宝典:基础知识、实战技巧、应用场景及最佳实践全攻略

背景 在Java系统实现过程中&#xff0c;我们不可避免地会借助大量开源功能组件。然而&#xff0c;这些组件往往功能丰富且体系庞大&#xff0c;官方文档常常详尽至数百页。而在实际项目中&#xff0c;我们可能仅需使用其中的一小部分功能&#xff0c;这就造成了一个挑战&#…...

[FFmpeg学习]初级的SDL播放mp4测试

在之前的学习中&#xff0c;通过AVFrame来保存为图片来认识了AVFrame&#xff0c; [FFmpeg学习]从视频中获取图片_ffmpeg 获取图片-CSDN博客 在获取到AVFrame时&#xff0c;还可以调用SDL方法来进行展现&#xff0c;实现播放效果。 参考资料 SDL&#xff0c;ffmpeg实现简单…...

情景题之小明的Linux实习之旅:linux实战练习1(下)【基础命令,权限修改,日志查询,进程管理...】

小明的Linux实习之旅&#xff1a;基础指令练习情景练习题下 前景提要小明是怎么做的场景1&#xff1a;初识Linux&#xff0c;创建目录和文件场景2&#xff1a;权限管理&#xff0c;小明的权限困惑场景3&#xff1a;打包与解压&#xff0c;小明的备份操作场景4&#xff1a;使用G…...

k8s 证书更新

如何使用脚本更新Kubernetes集群证书 引言 Kubernetes集群中&#xff0c;由kubeadm初始化的证书有效期默认为一年。当这些证书接近或已经超过有效期时&#xff0c;它们必须被更新以保证集群的正常运作。本文将介绍如何使用特定脚本来更新这些证书&#xff0c;将它们的有效期延…...

Linux操作系统学习:day01

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试 day01 基础概念 Linux 是 UNIX 操作系统的一个克隆系统, 但是Linux是开源的。 Linux是一个基于文件的操作系统。操作系统需要和硬件进行交互…...

【Oracle生产运维】数据库服务器负载过高异常排查处理

说明 在Oracle数据库运维工作中&#xff0c;经常会遇到Oracle数据库服务器平均负载&#xff08;load average&#xff09;突然异常升高&#xff0c;如果放任不管&#xff0c;严重的情况下会出现数据库宕机、服务器重启等重大故障。因此&#xff0c;当发现数据库服务器平均负载…...

IIR和FIR两种滤波器有什么区别?

概念的区分 IIR&#xff08;Infinite Impulse Response&#xff0c;无限脉冲响应&#xff09;和FIR&#xff08;Finite Impulse Response&#xff0c;有限脉冲响应&#xff09;滤波器是两种常见的数字信号处理滤波器类型&#xff0c;它们在结构、性能和用途上有显著区别&#…...

让GNSSRTK不再难【第二天-第4部分】

第12讲 GNSS授时与PPS 12.1 为什么需要高精度时间 授时的传统理解就是时间传递或者对时。比如以前手机没这么方便时&#xff0c;大家还都使用石英钟手表看时间时&#xff0c;大家都习惯晚上七点准时对着中央一套的报时&#xff0c;来校准你家的机械钟或者挂钟&#xff0c;这就…...

「OC」UI练习(一)—— 登陆界面

「OC」登陆界面 明确要求 一个登陆界面的组成&#xff0c;用户名提示以及输入框&#xff0c;密码提示提示以及输入框&#xff0c;登陆按钮&#xff0c;以及注册按钮&#xff0c;根据以上要求我们将我们的组件设置为成员变量。 //viewControl.h #import <UIKit/UIKit.h>…...

基于机器学习和深度学习的NASA涡扇发动机剩余使用寿命预测(C-MAPSS数据集,Python代码,ipynb 文件)

以美国航空航天局提供的航空涡扇发动机退化数据集为研究对象&#xff0c;该数据集包含多台发动机从启动到失效期间多个运行周期的多源传感器时序状态监测数据&#xff0c;它们共同表征了发动机的性能退化情况。为减小计算成本&#xff0c;需要对原始多源传感器监测数据进行数据…...

计算机组成原理-常见计算题含IEE754

一、补码加减运算 二、溢出判断 采用一位符号位 采用双符号位 三、定点数的移位运算 算术右移 算数左移 反码的算术移位 补码的算术移位 四、浮点数的表示 一个右规的例子 五、IEEE754 移码...

InnoDB存储引擎非常重要的一个机制--MVCC(多版本并发控制)

Mysql是如何实现隔离性的&#xff1f;&#xff08;锁MVCC&#xff09; 隔离性是指一个事务内部的操作以及操作的数据对正在进行的其他事务是隔离的&#xff0c;并发执行的各个事务之间不能相互干扰。隔离性可以防止多个事务并发执行时&#xff0c;可能存在交叉执行导致数据的不…...

【DevOps】服务器硬件基础知识

目录 前言 1、处理器&#xff08;CPU&#xff09;&#xff1a;服务器的“大脑” 2、内存&#xff08;RAM&#xff09;&#xff1a;服务器的“工作台” 3、存储&#xff08;Storage&#xff09;&#xff1a;服务器的“仓库” 4、 网络接口&#xff08;NIC&#xff09;&…...

6.10 c语言

7.1 if-else语句 简化形式 if(表达式)语句块 阶梯形式 if(表达式1)语句块1 else if(表达式2&#xff09;语句块2 嵌套形式 if() if() 语句1 else 语句2 else if() 语句3 else 语句4 表达式一般情况下为逻辑表达式或关系表达式 #include <stdio.h>//从小到大排序,输出顺…...

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…...

网站每月流量/东莞做网站优化

2019独角兽企业重金招聘Python工程师标准>>> class Person_Tbl(models.Model): 定义人物类 name models.CharField(max_length254,default) #姓名 sex models.CharField(max_length125,default) …...

沈阳市三好街网站建设公司/seo效果最好的是

曲率半径&#xff1a;曲率的倒数就是曲率半径。曲线的曲率。平面曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率&#xff0c;通过微分来定义&#xff0c;表明曲线偏离直线的程度。Klim|Δα/Δs|&#xff0c;Δs趋向于0的时候&#xff0c;定义k就是曲率。曲率半径主…...

网站优化的意义/好用的种子搜索引擎

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022茶艺师&#xff08;中级&#xff09;考试练习题为茶艺师&#xff08;中级&#xff09;考题考前必练习题目&#xff01;2022年茶艺师&#xff08;中级&#xff09;考试模拟100题模拟考试平台操作依据茶艺师&#x…...

做网站的 简历/临沂做网络优化的公司

霍夫变换将笛卡尔坐标系的直线用统计展示坐标系A中的点坐标系B中的线坐标系A中的线坐标系B中的点A中多点的连线B中多曲线的交点先理解这样一个思维左边的x-y坐标系中&#xff0c;设定k,b定值&#xff0c;则有一系列x&#xff0c;y值组成直线。相应的在右边k-b坐标系中&#xff…...

集约化网站数据库建设规范/学it什么培训机构好

grep 是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来&#xff0c;本文主要给大家分享Linux grep与正则表达式的相关知识&#xff0c;感兴趣的朋友一起看看吧&#xff0c;希望能帮助到大家。grep简介grep 是一种强大的文本搜…...

做网站的备案/离我最近的电脑培训中心

MP3播放器的工作原理MP3播放器是利用数字信号处理器DSP来完成处理传输和解码MP3文件的任务的。DSP掌管播放器的数据传输&#xff0c;设备接口控制&#xff0c;文件解码回放等活动。MP3工作方框图&#xff08;图1&#xff09; 一个完整的MP3播放器要分几个部分&#xff1a;中央处…...