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

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

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

相关文章

使用手机做PC机摄像头

准备工作&#xff1a; 带摄像头的安卓手机一部模拟相机软件&#xff1a;Iriun 、DroidCam 、IP摄像头pythonopencv 一、Iriun 1、分别在PC和手机上安装 2、手机和PC在同一个局域网 3、分别打开PC和手机端软件&#xff0c;电脑端就可以使用手机相机 ​ 二、 DroidCam 1、…

开发小Tips:切换淘宝,腾讯,官方,yarn,cnpm镜像源,nrm包管理工具的具体使用方式(方便切换镜像源)

由于开发中经常要下载一些软件或者依赖&#xff0c;且大多数的官方源的服务器都在国外&#xff0c;网速比较慢&#xff0c;国内为了方便&#xff0c;国内一些大厂就建立一些镜像&#xff0c;加快下载速度。 1.各大镜像源的切换&#xff1a; 切换淘宝镜像源&#xff1a; npm …

数据挖掘丨轻松应用RapidMiner机器学习内置数据分析案例模板详解(上篇)

RapidMiner 案例模板 RapidMiner 机器学习平台提供了一个可视化的操作界面&#xff0c;允许用户通过拖放的方式构建数据分析流程。 RapidMiner目前内置了 13 种案例模板&#xff0c;这些模板是预定义的数据分析流程&#xff0c;可以帮助用户快速启动和执行常见的数据分析任务。…

Zabbix6.0自动发现Linux服务器并添加主机

文章目录 一、整体流程二、操作过程 一、整体流程 Zabbix自动发现主机功能是Zabbix监控系统的一个重要功能&#xff0c;它能够自动发现并添加新的主机到监控系统中&#xff0c;从而减少人为繁琐的操作&#xff01; 步骤操作1️⃣ 第一步创建自动发现规则2️⃣ ​第二步创建自…

安卓事件交互(按键事件、触摸事件、手势识别、手势冲突处理)

本章介绍App开发常见的以下事件交互技术&#xff0c;主要包括&#xff1a;如何检测并接管按键事件&#xff0c;如何对触摸事件进行分发、拦截与处理&#xff0c;如何根据触摸行为辨别几种手势动作&#xff0c;如何正确避免手势冲突的意外状况。 按键事件 本节介绍App开发对按…

[qt] qt程序打包以及docker镜像打包

目录 一 环境准备: 1.1 qt环境 1.2 linuxdeplouqt打包工具 二 qt包发布: 2.1 搜索链接库 2.2 应用程序APP打包 2.3 发布 三 docker镜像包发布 3.1 环境准备 3.2 镜像生产脚本 3.3 加载镜像并运行docker容器 一 环境准备: qt环境linuxdeployqt打包工具docker环境 1…

demo xshell (程序替换 工作目录 内建命令)

1.程序替换 在学习完一些列的进程替换接口之后我们大概就能知道&#xff0c;我们的环境变量以及命令行参数是如何传递给子进程的&#xff0c;这些参数是我们在调用进程替换时就传给了子进程的数据。 那么如果我们自己要实现一个简单的命令行解释器&#xff0c;我们是不是首先…

stm32MP135裸机编程:使用USB/UART烧录程序到SD卡并从SD卡启动点亮一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32CubeProgrammer v2.16.0 烧录需要的二进制文件1 烧录到SD卡需要哪些文件 参考《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》&#xff0c;烧录需要的SD卡文件如下&#xff1a; &a…

教育的数字化转型——Kompas.ai如何变革学习体验

引言 在现代教育中&#xff0c;数字化转型逐渐成为提升学习效果的重要手段。随着科技的进步&#xff0c;人工智能&#xff08;AI&#xff09;在教育领域的应用越来越广泛。本文将探讨教育数字化转型的发展趋势&#xff0c;并介绍Kompas.ai如何通过AI技术变革学习体验。 教育数…

LNMP配置

文章目录 一、相关概念CGI的由来FastCGIPHP-FPM 二、编译安装编译安装nginxyum安装mysql编译安装php配置nginx支持php解析增加数据库安装论坛 一、相关概念 CGI的由来 最早的Web服务器只能简单地响应浏览器发来的HTTP请求&#xff0c;并将存储在服务器上的HTML文件返回给浏览器…

gdb 【Linux】

程序发布方式&#xff1a;  1、debug版本&#xff1a;程序会被加入调试信息&#xff0c;以便于进行调试。  2、release版本&#xff1a;不添加任何调试信息&#xff0c;是不可调试   确定一个可执行程序是debug&#xff0c;还是release [cxqiZ7xviiy0goapxtblgih6oZ test_g…

python科研做图系列之时序图的绘制——对比折线图

参考知乎 折线图 我需要从两个不同的excel都读取第一列作为时间列,第二列作为编码列。 在同一张图上画出两条时间序列的折线图 横坐标是分钟,纵坐标是编码 帮我画的好看一些,记得解决中文乱码问题 英文版折线图 ,先搞个英文版,导师要求中文的话,再换成中文版 impor…

[Algorithm][动态规划][完全背包问题][零钱兑换][零钱兑换Ⅱ][完全平方数]详细讲解

目录 1.零钱兑换1.题目链接2.算法原理详解3.代码实现 2.零钱兑换 II1.题目链接2.算法原理详解3.代码实现 3.完全平方数1.题目链接2.算法原理详解3.代码实现 1.零钱兑换 1.题目链接 零钱兑换 2.算法原理详解 思路&#xff1a; 确定状态表示 -> dp[i][j]的含义 dp[i][j]&am…

QSqlDatabase、QSqlQuery、QSqlRecord、Sqlite用法

使用QSqlDatabase、QSqlQuery、QSqlRecord、Sqlite数据库实现一个简单的界面查询 1. 创建Sqlite数据库&#xff0c;表 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "QSqlDatabase" #include "QSqlQuery&q…

【计算机毕业设计】273基于微信小程序的刷题系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

MySQL8基于GTID以及VIP实现高可用主从架构

jdbc客户端配置高可用以及故障切换 jdbc客户端实现故障切换 MySQL Connector/J 支持服务器故障转移。当底层活动连接发生与连接相关的错误时&#xff0c;就会发生故障转移 参考官网地址 jdbc:mysql://[primary host][:port],[secondary host 1][:port] jdbc客户端实现故障切…

vAttention:用于在没有Paged Attention的情况下Serving LLM

文章目录 0x0. 前言&#xff08;太长不看版&#xff09;0x1. 摘要0x2. 介绍&背景0x3. 使用PagedAttention模型的问题0x3.1 需要重写注意力kernel0x3.2 在服务框架中增加冗余0x3.3 性能开销0x3.3.1 GPU上的运行时开销0x3.3.2 CPU上的运行时开销 0x4. 对LLM服务系统的洞察0x5…

自动驾驶跟驰仿真

联合仿真需求分析报告 一、项目背景 随着汽车技术的快速发展&#xff0c;自动驾驶和智能网联汽车已成为行业发展的重要趋势。为确保自动驾驶车辆在复杂交通环境中的安全性和可靠性&#xff0c;进行联合仿真测试显得尤为重要。本报告旨在明确联合仿真的具体需求&#xff0c;为…

Springboot结合redis实现关注推送

关注推送 Feed流的模式 Timeline:不做内容筛选&#xff0c;简单的按照内容发布时间排序。常用于好友与关注。例如朋友圈的时间发布排序。 优点:信息全面&#xff0c;不会有缺失。并且实现也相对简单 缺点:信息噪音较多&#xff0c;用户不一定感兴趣&#xff0c;内容获取效率…

佳能5DMARK IV mov视频覆盖的恢复方法

5DMARK IV算是佳能比较经典的一款摄像机&#xff0c;是佳能早期使用MOV的摄像机之一&#xff0c;MOV是当初佳能高端机的象征&#xff0c;当然现在佳能已经不在通过MOV和MP4来区分硬件级别了。下边这个案例是文件拍摄时断电&#xff0c;结果变成0字节&#xff0c;然后覆盖了部分…