Nginx-正向代理实现

正向代理简介

nginx不仅可以做反向代理,还能用作正向代理来进行上网等功能。如果把局域网外的 Internet想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理(也就是大家常说的,通过正向代理进行上网功能)

示例

如下图所示,内网机器 10.212.4.35处于办公内网中,无法访问外部 Internet;外网机器 10.211.1.6处于另一个网络环境中,也就是可以上互联网的机器。内网机器和外网机器之间的数据传输通过网闸进行摆渡。在下面图中的环境,已将网络打通,内网机器 10.212.4.35可以访问外网机器 10.211.1.68080端口。则内网机器如果想上互联网,则只能通过外网机器代理实现。

Nginx-正向代理实现

安装部署nginx

在外网机器安装部署 nginx、并配置代理。

  • 由于 nginx默认不支持 https的代理,故而需要额外先添加模块。
  • 插件地址:https://github.com/chobits/ngx_http_proxy_connect_module/
  • 插件和 nginx需对应,对应关系查看插件地址里面的介绍
  • 需要通过 patch命令打入补丁,通过 yum install patch进行安装

这里所使用的 nginx1.19.2,补丁版本为 1018

✏️ 下载模块

wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip

✏️ 解压

unzip v0.0.2.zip

✏️ 下载 nginx

wget http://nginx.org/download/nginx-1.19.2.tar.gz

✏️ 打入补丁包

tar xf nginx-1.19.2.tar.gz

cd nginx-1.19.2

patch -p1 < /root/tools/ngx_http_proxy_connect_module-0.0.2/patch/proxy_connect_rewrite_1018.patch

✏️ 编译安装 nginx

yum install gcc cmake make cmake unzip ncurses-devel gcc gcc-c++ -y

./configure --prefix=/usr/local/nginx --add-module=/root/tools/ngx_http_proxy_connect_module-0.0.2

make && make install

配置正向代理

✏️ 配置 nginx

cd /usr/local/nginx/conf/

cp nginx.conf{,.bak}

vim nginx.conf
    server {
        listen                           80;
        server_name                      localhost;
        resolver                         114.114.114.114;
        proxy_connect;
        proxy_connect_allow              443 80;
        proxy_connect_connect_timeout    10s;
        proxy_connect_read_timeout       10s;
        proxy_coneect_send_timeout       10s;
        location / {
            proxy_pass $scheme://$http_host$request_uri;
        }
    }

✏️ 编写 systemd启动脚本

cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF

✏️ 启动 nginx

systemctl daemon-reload
systemctl start nginx

✏️ 开放防火墙策略(这里由于是通过网闸出来的,所以源 IP发生了改变为 172.12.0.179

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.12.0.179" port protocol="tcp" port="8080" accept"

firewall-cmd --reload

测试验证

内网机器进行访问测试,并添加到环境变量

✏️ http的访问测试

curl -I --proxy 172.11.0.179:8080  http://www.baidu.com
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Sun, 05 Sep 2021 08:17:57 GMT
Content-Type: text/html
Content-Length: 277
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache

✏️ https的访问测试

curl -I --proxy 172.11.0.179:8080  https://www.baidu.com
HTTP/1.1 200 Connection Established
Proxy-agent: nginx

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Sun, 05 Sep 2021 08:18:17 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

✏️ 添加到环境变量,直接使用

vim /etc/profile
export http_proxy=172.11.0.179:8080
export https_proxy=172.11.0.179:8080

✏️ 添加完成后,变可以直接上网了

curl -I http://www.baidu.com
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Sun, 05 Sep 2021 08:26:35 GMT
Content-Type: text/html
Content-Length: 277
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache

curl -I https://www.baidu.com
HTTP/1.1 200 Connection Established
Proxy-agent: nginx

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Sun, 05 Sep 2021 08:26:14 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

Original: https://www.cnblogs.com/yanjieli/p/15229907.html
Author: 别来无恙-
Title: Nginx-正向代理实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543773/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 关于Springboot配置多数据源,这篇笔记太详细了!

    关于springboot配置多数据源,整理了这篇笔记,分享给有需要的小伙伴们,视频看的动力节点王鹤老师讲的springboot 目录结构 1. DataSourceConfigur…

    Java 2023年6月7日
    077
  • Ajax Upload上传插件

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/gr13811787801/p/12354982.htm…

    Java 2023年6月5日
    061
  • Java之取余操作 “%”

    取模运算与取余运算两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1、求 整数商 c =…

    Java 2023年6月6日
    067
  • 构造函数里面的条件验证

    构造函数里面的条件验证 public Gra(float l1, float l2, float l3) { if (l1 + l2 > l3 && l1 +…

    Java 2023年6月14日
    094
  • 抵达一颗安静的心

    素心免忧虑,心内止如水。俯仰观天地,信步采撷美。 ……其实啊,我只是像平常人一样,在工作和生活中探索和修行而已。 我喜欢漫步在宁静的自然中。花木草叶,鸟鸣溪…

    Java 2023年6月9日
    088
  • 转载:Spring+EhCache缓存实例

    转载来自:http://www.cnblogs.com/mxmbk/articles/5162813.html 一、ehcahe的介绍 EhCache 是一个纯Java的进程内缓存…

    Java 2023年5月30日
    080
  • Spring事务提交之后做些操作

    在使用spring事务时,我们通常会把事务内的所有操作当成是一个原子操作。也就是当整个事务内的所有代码都执行完成后, 才会将所有的数据落实到数据库中。这样做有时也会给我们造成麻烦。…

    Java 2023年5月30日
    068
  • Nginx_Windos本地部署

    安装跟配置 安装: 下载地址:nginx: download 下载完成后,在指定位置解压缩,不要直接双击nginx.exe。 配置: server { listen 10700; …

    Java 2023年5月30日
    094
  • 浅谈Spring Data ElasticSearch

    Spring Data Spring Data 帮助我们避免了一些样板式代码,比如我们要定义一个接口,可以直接继承接口ElasticSearchRepository接口,这样Spr…

    Java 2023年5月30日
    074
  • Mysql 日期格式化 复杂日期区间查询

    最近在做项目涉及到 Mysql的复杂日期查询,日期查询其实在数据库中查询其实还是用的挺多的,比如查询开始日期到结束日期的区间信息,查询日期小于有效日期的信息,查询当天的日期,明天的…

    Java 2023年6月13日
    078
  • Vim编辑器以及linux常用命令

    Shift+G tar -xvf *.tar firewall-cmd –list-ports firewall-cmd –reload systemctl…

    Java 2023年6月8日
    071
  • Linux测试端口的连通性

    在日常开发过程中,有时会遇到需要测试测试某些端口是否可以连通的问题,常用的方法有以下 1、telnet ip port ip是指测试主机的ip port是指测试主机的端口 [roo…

    Java 2023年6月8日
    094
  • ORA-31623: a job is not attached to this session via the specified handle

    在使用Oracel Datapump API时碰到ORA-31623(a job is not attached to this session via the specified…

    Java 2023年5月30日
    087
  • 在PDF指定位置添加数据

    第一种方案 使用itext填充静态PDF模板 然后生成PDF新文件 1 使用Adobe Acrobat 编辑原PDF 添加文本域 itext依赖 com.itextpdf itex…

    Java 2023年6月8日
    088
  • Spring-IOC学习笔记

    Spring 是轻量级的开源的 JavaEE 框架。 Spring有两个核心部分IOC 和 Aop IOC(Inversion of Control):控制反转,把创建对象过程交给…

    Java 2023年6月8日
    081
  • Spring Boot 入门(八)部署RabbitMQ

    RabbitMQ Erlang 版本对照表:https://www.rabbitmq.com/which-erlang.html 安装erlang 由于rabbitmq是基于erl…

    Java 2023年6月5日
    0129
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球