关于nginx做正向代理的那些事

声明:该文章只是用于技术探索的实践与讨论,没有其他用途。

准备:

  1. 一台能访问外网的服务器;
  2. 一个域名,映射到上面的服务器;
  3. https的证书及密钥;
  4. nginx安装包;

协议使用:

开搞:

  1. 安装nginx,并使用第三方模块(ngx_http_proxy_connect_module,该模块用于https转发时,接收并创建CONNECT请求,用于后续的隧道传输数据,都是基于TCP的),具体步骤如下:
    1. 下载并解压ngx_http_proxy_connect_module模块(wget https://gitcode.net/mirrors/chobits/ngx_http_proxy_connect_module/-/archive/master/ngx_http_proxy_connect_module-master.tar.gz);
    2. 到nginx目录(类似nginx-1.24.0),执行命令:
      patch -p1 < /opt/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch
      
      ./configure --add-dynamic-module=/opt/ngx_http_proxy_connect_module-master --with-http_ssl_module
      
      make && make install

        2.  配置nginx.conf文件,增加如下配置:

  • 增加全局配置:load_module /usr/local/nginx/modules/ngx_http_proxy_connect_module.so;
  • 增加如下server配置:

    server {
        listen 6060 ssl;
        server_name 域名(对应准备中的域名);
        charset utf-8;
        resolver 8.8.8.8;
        client_max_body_size 50m;
        access_log logs/access_proxy.log;

        proxy_connect;
        proxy_connect_allow     443 563;
        proxy_connect_timeout   20s;
        proxy_read_timeout      20s;
        proxy_send_timeout      20s;

        ssl_certificate     /path/xxx.pem(对应准备中的证书);
        ssl_certificate_key /path/xxx.key(对应准备中的密钥);

        location / {
            proxy_pass $scheme://$http_host$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;

            proxy_redirect off;
            proxy_buffers 256 4k;
        }
    }

        3. 启动nginx;

说明:

  1. 为什么client与proxy之间需要https?因为这样可以使CONNECT请求基于ssl进行发送,保护了请求域名,否则对于google.com这种host,会被劫持;

  2. 这个正向代理的原理是什么?基于http的CONNECT方法,建立client到proxy、proxy到server的隧道,后面发送数据都是proxy直接进行转发,保证数据安全;

结果:

可以通过该nginx的正向代理的方式,去访问google这样的网站。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

neo4j网页无法打开,启动一会儿后自动关闭,查看neo4j status显示Neo4j is not running.

目录 前情提要User limit of inotify watches reached无法访问此网站 前情提要 公司停电&#xff0c;服务器未能幸免&#xff0c;发现无法访问此网站&#xff0c;http://0.0.0.0:7474 在此之前都还好着 User limit of inotify watches reached (base) [rootlocalhost ~]# n…

ctf_show笔记篇(web入门---sql注入)171-189

sql注入 171&#xff1a;简单的sql注入&#xff0c;尝试万能密码直接过 172&#xff1a;基础联合查询可过 173&#xff1a;过滤flag那就利用substr少取几个flag的名字或者replace 174&#xff1a;两种方法&#xff0c;使用盲注或者利用replace嵌套替换&#xff0c;然后在逆…

新 树莓派4B 温湿度监测 基于debian12的树莓派OS

前言 本文旨在完成通过外接温湿度传感器至树莓派使得树莓派不断记录并存储温湿度数据 这个领域有很多文章&#xff0c;但是部分文章已经缺乏了时效性&#xff0c;在最新系统不适用&#xff0c;本文目前适用 硬件 硬件连接 温湿度传感器常选用DHT11和DHT22&#xff0c;淘宝…

No transform from [base_footprint] to [base_link]

需要查看这两个坐标系之间的转换 果然&#xff0c;demo05_car_base中父坐标系是base_footprint&#xff0c;意思是从base_footprint到base_link的转换&#xff0c;而不是从固定坐标系base_link到base_footprint 修改&#xff1a; 父坐标系修改成base_link即可

1356:计算(calc)

【算法分析】解法1&#xff1a;中缀表达式直接求值 1、设数字栈、运算符栈。设数组表示运算符优先级&#xff0c;其中(优先级最高&#xff0c;)优先级最低。 从左向右扫描表达式字符串&#xff1a; 2、遇到数字时&#xff0c;入数字栈。 3、遇到运算符时&#xff0c;入栈条件为…

20240314一种各向同性负泊松比多孔材料的设计

Design of a porous material with isotropic negative Poisson’s ratio DOI&#xff1a;http://dx.doi.org/10.1016/j.mechmat.2016.02.012 摘要&#xff1a;本文提出了一种具有全方位负泊松比的二维多孔体的设计方法。孔隙的六边形周期性分布使力学性能&#xff08;泊松比…

计算机msvcr120.dll丢失怎样修复,教你5种方法轻松搞定

我们在玩游戏运行软件的时候&#xff0c;电脑系统提示无法启动此程序&#xff0c;因为计算机中丢失MSVCR120.dll&#xff0c;尝试重新安装该程序以解决此问题。究其原因&#xff0c;是由于在我们的计算机系统中&#xff0c;发现缺失了一个至关重要的动态链接库文件——MSVCR120…

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…

rtsp流实现web端实时播放(海康+大华)

最近的电力项目需要嵌入海康摄像头画面&#xff0c;之前没有做过类似的流媒体播放&#xff0c;所以有些懵&#xff1b; 海康开放平台的webAPI&#xff0c;有插件还是无插件&#xff0c;都不适合自研web系统的嵌入&#xff0c;所以需要自己进行解流&#xff1b; 首先&#xff0c…

火山引擎VeDI:A/B实验如何应用在APP推荐系统中?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在移动互联网飞速发展的时代&#xff0c;用户规模和网络信息量呈现出爆炸式增长&#xff0c;信息过载加大了用户选择的难度&#xff0c;这样的背景下&#xff0c;推…

在IDE中配置tomcat服务器

目录 一、新建一个java项目二、添加web框架三、配置tomcat服务器四、运行访问发布的项目 前言&#xff1a;在 IntelliJ IDEA 中配置 Tomcat 服务器是 Java Web 开发的基础步骤&#xff0c;以下是如何在 IDEA 中设置 Tomcat 并部署 Web 项目的简要指南。 一、新建一个java项目 新…

Hadoop大数据应用:Linux 部署 MapReduce 与 Yarn

目录 一、实验 1.环境 2.Linux 部署 MapReduce 3.Linux 部署 Yarn 4.Linux 调用大数据集群分析数据 二、问题 1.hadoop 的启动和停止命令 2.HDFS 使用命令 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xf…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

【Ubuntu】gonme桌面的 gdm 和 lightdm 区别

总结&#xff1a;都可以 gdm: 【Gnome Display Manager】 完整&#xff0c;体积大 lightdm: 【Light Display Manager】 轻量

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中&#xff0c;最常见的基本类型就是字符串了&#xff0c;哪哪都能见到&#xff0c;如输入语句&#xff0c;输出语句等&#xff01;那么&#xff0c;什么是字符串呢&#xff0c;字符串就是String类&#xff0c;String类是Ja…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

颠覆传统!D 咖无人咖啡机再添新动作

D 咖无人咖啡机&#xff0c;作为国内领先的无人自助咖啡机品牌&#xff0c;一直以来都在不断创新和升级&#xff0c;以满足消费者日益增长的咖啡需求。近日&#xff0c;D 咖智能饮品机再添新动作&#xff0c;推出了一系列令人期待的新功能和服务&#xff0c;再次引领便捷咖啡新…

[MYSQL数据库]- 索引

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识索…

C#快速入门基础

本篇文章从最基础的C#编程开始学习&#xff0c;经过非常优秀的面向对象编程思想和方法的学习&#xff0c;为C#编程打下基础。 第 01 章 C#开发环境之VS使用和.NET平台基础 1.1 Visual Studio 开发环境 1.1.1 硬件环境 i5CPUi5CPU&#xff08;建议 4核 4线程或以上 &#xff0…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…