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

news2024/12/24 20:15:55

一、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;		#设置代理服务器读取超时时间,默认60s
        proxy_send_timeout 30s;		#该参数用于设置向后端服务器发送数据时的超时时间,默认60s
        proxy_connect_timeout 30s;  #该参数用于设置与后端服务器建立连接时的超时时间,默认60s

        set $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这个中间节点流量转发和访问控制确定最终访问的内部服务这就是反向代理。白话文来说正向代理和反向代理就是一个流量方向的不同,正向代理是出向的流量代理,反向代理是入向的流量代理。

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

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

相关文章

【Linux】匿名管道的应用场景 --- 进程池

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

Makefile:从零开始入门Makefile

目录 1.前言 2.Makefile的简单介绍 3.Makefile中的指令规则 4.Makefile的执行流程 5.Makefile中的变量类型 6.Makefile中的模式匹配 7.Makefile中的函数 8.Makefile补充知识 前言 在Linux中编译CPP文件&#xff0c;我们能够使用GCC命令进行编译&#xff0c;但当项目文件多且繁杂…

OpenGauss数据库-5.数据更新

第1关&#xff1a;插入数据 gsql -d postgres -U gaussdb -W "passwd123123" create table student (id integer primary key,name char(20),age integer ); insert into student values(1,"lily",20),(2,lily,21),(3,marry,19); 第2关&#xff1a;删除数…

C51学习归纳9 --- I2C通讯学习(重点)

首先&#xff0c;我自己学习过以后的直观感觉&#xff0c;通信协议是单片机的灵魂之一&#xff0c;只有规定好了通信协议我们才能够正确的接收到信息&#xff0c;才能实现更加深入的研究。所以这一部分是需要好好学习的。 本节借助一个可存储的芯片AT24C02&#xff0c;进行在I2…

仿饿了么的谁去拿外卖游戏源码

源码介绍 喝酒 没有游戏玩&#xff1f; 懒得下床 不想出去 那么好 这个游戏会 满足你! 玩法 每人都选择一个序号 4 个人为例 张三选第 ① 李四选第 ② 王五选第 ③ 赵前选第 ④ 然后就按 4 下 其中最小的数对应的序号就是他输了就去拿外卖&#xff01; 源码下载 仿饿了么…

快速开始一个go程序(极简-快速入门)

一、 实验介绍 1.1 实验简介 为了能更高效地使用语言进行编码&#xff0c;Go 语言有自己的哲学和编程习惯。Go 语言的设计者们从编程效率出发设计了这门语言&#xff0c;但又不会丢掉访问底层程序结构的能力。设计者们通过一组最少的关键字、内置的方法和语法&#xff0c;最终…

IDEA创建SpringBoot项目的时候,如何使用Java8,怎么办?

在创建springboot项目的时候,IDEA提示&#xff0c;最低Java版本要求17&#xff0c;但是实际上我们可能不需要这么高的版本&#xff0c;怎么使用Java8呢&#xff1f; 解决办法 修改Server URL地址即可&#xff1a;https://start.aliyun.com

【PHP【实战训练】系统性学习】——最经典的web端头像上传,数据库内容安全精简

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势或改善自身的缺点&#xff0c;互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

算法——Floyd判圈算法

介绍 Floyd判圈算法用于判断一个链表中是否有环。 思想 使用快慢指针fast, slow&#xff0c;快指针每次走两步fast fast.next.next&#xff0c;慢指针每次走一步slow slow.next。当出现fast null || fast.next null时&#xff0c;说明链表不存在环&#xff0c;如果存在环…

【python报错】关于 xlrd.biffh.XLRDError: Excel xlsx file; not supported 解决方法【已解决】

【Python报错】关于xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方法【已解决】 在使用Python进行数据分析时&#xff0c;经常需要处理Excel文件。xlrd库是一个流行的用于读取Excel文件的库&#xff0c;但如果你在使用xlrd打开.xlsx文件时遇到了xlrd.biffh.XLRDE…

欢乐打地鼠小游戏html源码

这是一款简单的js欢乐打地鼠游戏&#xff0c;挺好玩的&#xff0c;老鼠出来用鼠标点击锤它&#xff0c;击中老鼠获得一积分。 欢乐打地鼠小游戏html源码

信息系统项目管理师0150:工具与技术(9项目范围管理—9.4收集需求—9.4.2工具与技术)

点击查看专栏目录 文章目录 9.4.2 工具与技术9.4.2 工具与技术 专家判断 收集需求过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组的意见,涉及的领域包括:可行性研究与评估;需求获取;需求分析;需求文件;以往类似项目的项目需求;图解技术;引导;冲…

这个国际档案日,大比武放榜、直播预约、课件下载,一样都不能少!

关注我们 - 数字罗塞塔计划 - 2024年6月9日第十七个国际档案日来临&#xff0c;数字罗塞塔计划放大招&#xff1a;第二届大比武活动榜单揭晓、ARCHE-2024上海智慧档案高峰论坛直播预约、2024上半年度课件大礼包下载。如此大礼&#xff0c;岂能错过&#xff1f; PART.01 榜单…

通过 Python+Nacos实现微服务,细解微服务架构

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 背景 一直以来的想法比较多&#xff0c;然后就用Python编写各种代码脚本。很多…

【线性代数】向量空间,子空间,向量空间的基和维数

向量空间 设V为n维向量的集合&#xff0c;如果V非空&#xff0c;且集合V对于向量的加法以及数乘两种运算封闭&#xff0c;那么就称集合V为向量空间 x&#xff0c;y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…

4.大模型微调技术LoRA

大模型低秩适配(LoRA)技术 现有PEFT 方法的局限与挑战 Adapter方法,通过增加模型深度而额外增加了模型推理延时。Prompt Tuning、Prefix Tuning、P-Tuning等方法中的提示较难训练,同时缩短了模型可用的序列长度。往往难以同时实现高效率和高质量,效果通常不及完全微调(f…

【每日算法】

算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归) 文章目录 算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归)一、层序遍历二、226. 翻转二叉树(优先掌握递归)三、101. 对…

小程序中实现自定义头部导航组件

在页面中实现自定义头部导航的组件&#xff0c;如果仅是单个页面中需要自定义可在页面的json文件中配置"navigationStyle": “custom”&#xff0c;如果是项目中所有页面都想使用自定义的组件&#xff0c;可在app.json的window中全局配置"navigationStyle"…

2024-6-9

今日安排&#xff1a; 学校的课程作业windows SEH 机制简单入门windows 用户态 pwn / 内核态入门 计网实验报告 && 网安实验报告继续审计 nf_tables 源码&#xff0c;主要看 active 相关逻辑。复现 CVE-2022-32250 这个漏洞【 && iptables 相关学习】♥♥♥♥…