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)

大家都在看

  • Java 将HTML转为XML

    本文介绍如何通过Java后端程序代码来展示如何将html转为XML。此功能通过采用Word API- Free Spire.Doc for Java 提供的 Document.sa…

    Java 2023年5月29日
    064
  • Java学习-第一部分-第三阶段-第四节:JDBC和数据库连接池

    JDBC和数据库连接池 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 下载会使用到的包 JDBC概述 基本介绍…

    Java 2023年6月15日
    058
  • Spring Security OAuth 2.x的刷新token接口/oauth/token自定义修改

    参考资料: Spring Security OAuth 2.x的刷新token方法自定义修改 使用maven依赖: 需求: 旧项目的其中一个前端页面会频繁调用token刷新方法。 …

    Java 2023年5月30日
    054
  • 【万字图文-原创】 | 学会Java中的线程池,这一篇也许就够了!

    碎碎念 关于JDK源码相关的文章这已经是第四篇了,原创不易,粉丝从几十人到昨天的 666人,真的很感谢之前帮我转发文章的一些朋友们。 从16年开始写技术文章,到现在博客园已经发表了…

    Java 2023年5月29日
    085
  • web 开发常用字符串表达式匹配

    记录一下 web 开发中常用的一些字符串模式,这是我遇到的一些,后面如果还有的话,欢迎大神提出,会继续更新。 这个主要用在前端的验证,nginx 路径匹配,shell 脚本文本处理…

    Java 2023年6月5日
    081
  • java中的集合

    数组的缺点引出集合的好处 数组有很多不足的地方 长度从一开始就必须指定的大小 元素的类型必须一致 使用数组的增删改查,代码比价多比较麻烦 集合的好处 可以动态的保存任意对象 提供了…

    Java 2023年6月6日
    067
  • 半同步半异步线程池框架代码实现

    cpp;gutter:true; SyncTaskQueue.h</p> <h1>pragma once</h1> <h1>incl…

    Java 2023年5月30日
    071
  • 【docker专栏6】详解docker容器状态转换管理命令

    docker容器有三种状态运行、停止、暂停,镜像可以创建、运行容器,镜像和容器也可以转换成tar压缩包进行存储。本文为大家介绍容器的状态转换命令及镜像创建运行容器、tar包导入导出…

    Java 2023年6月15日
    079
  • 中国DevOps平台市场,华为云再次位居领导者位置

    摘要:华为云软件开发生产线DevCloud在市场份额和发展战略两大维度均排名第一,再次位居领导者位置。 9月21日 ,国际权威分析师机构IDC发布《IDC MarketScape:…

    Java 2023年6月15日
    060
  • 随手翻

    不可变对象:对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化。 存在意义:①让并发编程变得更简单(不可变对象天生线程安全)②消除副作用 ③减少容器使用过程出错的…

    Java 2023年6月9日
    071
  • Vue自定义组件开发:使用v-model封装el-pagination组件

    1、前言 通过封装el-pagination组件开发自定义分页组件的类似文章网上已经有很多了,但看了一圈,总是不如意,于是决定还是自己动手搞一个。 2、背景 利用el-pagina…

    Java 2023年6月14日
    071
  • Thumbnails 图片处理

    Thumbnails 是由谷歌提供的图片处理包,目前版本0.4.8。 可以简洁的实现图片的 缩放、压缩、旋转、水印、格式转换等操作。 示例代码: Thumbnails 不能添加文字…

    Java 2023年6月6日
    063
  • 6.824 Spring 2020 feb14 Lab1MapReduce 笔记

    简介 这个实验要求我们使用 golang 自行实现一个支持并发和简单容错的 分布式 MR ,支持一个 master 多个 wokrer 的工作模式。 我做完实验之后去看了一下之前网…

    Java 2023年5月29日
    053
  • haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)

    文章转载自: haproxy+keepalived https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别 h…

    Java 2023年5月30日
    073
  • leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

    给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root = [2,1,3]输出: 1 示例 2…

    Java 2023年6月14日
    073
  • Java8之流Stream

    java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Ja…

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