当前位置: 首页 > news >正文

nginx正向代理https

一、需求

公司内部服务器向外访问腾讯接口:https://qyapi.weixin.qq.com/cgi-bin,不能使用http直接访问。并且不支持域名,还需要设置互联网出口-出向白名单ip。
如何在尽量少改动代码的情况下实现应用的出向访问链接,考虑使用正向代理服务器实现SSL请求的隧道,支持https请求。

二、操作步骤

1. 确认服务器对外ip白名单已添加

先获取域名对应的ip地址:直接ping域名可以获取到qyapi.weixin.qq.com解析地址是117.185.253.167

C:\Users\Lenovo>ping qyapi.weixin.qq.com

正在 Ping qyapi.weixin.qq.com [117.185.253.167] 具有 32 字节的数据:
来自 117.185.253.167 的回复: 字节=32 时间=27ms TTL=46

如果服务器支持对外访问,curl可以收到返回值,

curl https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

服务器不支持,只能使用ip:

curl "https:// 117.185.253.167 /cgi-bin/gettoken?corpid=ID&corpsecret=SECRET" -H "Host:qyapi.weixin.qq.com" -k

能正常返回说明可以通。更简单的直接ping

2. 为nginx添加正向代理

2.1 下载ngx_http_proxy_connect_module模块

https://gitcode.com/gh_mirrors/ng/ngx_http_proxy_connect_module/tree/master
此模块提供了对连接(CONNECT)方法请求的支持。这种方法主要用于通过代理服务器实现SSL请求的隧道。

2.2 nginx安装模块

nginx版本和ngx_http_proxy_connect_module补丁文件的版本相关,按需下载nginx版本
我需要的是proxy_connect_rewrite_102101.patch,直接把proxy_connect_rewrite_102101.patch重命名为proxy_connect.patch

$ wget http://nginx.org/download/nginx-1.23.2.tar.gz
$ tar -xzvf nginx-1.23.2.tar.gz
$ cd nginx-1.23.2/
$ patch -p1 < /home/nginx/ngx_http_proxy_connect_module/patch/proxy_connect.patch
$ ./configure --add-dynamic-module=/home/nginx/ngx_http_proxy_connect_module --modules-path=/home/nginx/modules  --prefix=/home/nginx/nginx --with-http_ssl_module --with-http_realip_module --with-stream --with-stream_ssl_module
$ make && make install
nginx 版本启用重写阶段补丁文件
1.4.x ~ 1.12.x不启用proxy_connect.patch
1.4.x ~ 1.12.x启用proxy_connect_rewrite.patch
1.13.x ~ 1.14.x不启用proxy_connect_1014.patch
1.13.x ~ 1.14.x启用proxy_connect_rewrite_1014.patch
1.15.2启用proxy_connect_rewrite_1015.patch
1.15.4 ~ 1.16.x启用proxy_connect_rewrite_101504.patch
1.17.x ~ 1.18.x启用proxy_connect_rewrite_1018.patch
1.19.x ~ 1.21.0启用proxy_connect_rewrite_1018.patch
1.21.1 ~ 1.22.x启用proxy_connect_rewrite_102101.patch
1.23.x ~ 1.24.0启用proxy_connect_rewrite_102101.patch
1.25.0 ~ 1.25.x启用proxy_connect_rewrite_102101.patch

2.3 nginx配置文件

安装nginx后可以到modules文件下面查看是否生成了ngx_http_proxy_connect_module.so,
nginx.conf 中显式加载模块,注意要在events,http模块之前定义

load_module /path/to/modules/ngx_http_proxy_connect_module.so;

nginx配置文件修改

server {
    listen                         3128 ssl;

    # 正向代理使用的 DNS 解析器,这个可以找一个通用版,我是改为dns服务器的地址
    resolver                       8.8.8.8;

    # 对于 CONNECT 请求的正向代理
    proxy_connect;
    proxy_connect_allow            443;
    proxy_connect_connect_timeout  10s;
    proxy_connect_data_timeout     10s;

    # 非 CONNECT 请求的自定义配置(例如:非 CONNECT 请求的反向代理)
    location / {
        proxy_pass http://$host;
        proxy_set_header Host $host;
    }
}

如果服务器支持域名访问,到此配置结束,启动nginx验证效果

curl -x 127.0.0.0:3128 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

3. 本地服务器安装dns服务

在本地网络或服务器上搭建DNS服务器,实现域名到IP的自定义解析:
BIND9:功能全面,适合复杂需求(如内部域名系统、反向解析)。
dnsmasq:轻量级,适合简单场景(仅需解析少量域名,同时支持DHCP)。
场景简单搭建的是dnsmasq。

3.1 linux安装dnsmasq

需要使用root用户

# CentOS/RHEL
sudo yum install dnsmasq -y

# Ubuntu/Debian
sudo apt install dnsmasq -y

3.2 查看安装结果并配置

sudo vim /etc/dnsmasq.conf
应该有默认的文件夹设置,不用改:

conf-dir=/etc/dnsmasq.d/,*.conf

直接到/etc/dnsmasq.d/下创建配置文件test.conf
输入

address=/qyapi.weixin.qq.com/117.185.253.167

3.3 测试配置文件启动服务

dnsmasq --test

没问题启动服务

systemctl start dnsmasq

查看端口是否启动

netstat -nltp|grep 53

配置客户端使用本地DNS

# 临时修改(重启失效)
sudo echo "nameserver [你的Linux服务器IP]" > /etc/resolv.conf

# 永久修改(以NetworkManager为例)
sudo nmcli con modify [网卡名] ipv4.dns "[你的Linux服务器IP]"
sudo nmcli con up [网卡名]

验证解析结果

dig qyapi.weixin.qq.com @127.0.0.1

成功后修改nginx配置文件dns服务器地址,然后可以测试

curl  -x 127.0.0.0:3128  https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

3.4 扩展

启动服务并设置开机自启

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

dnsmasq.conf

# 指定本地解析文件路径
addn-hosts=/etc/dnsmasq.d/custom-hosts

# 禁用从上游DNS获取解析(仅使用本地配置)
no-resolv
# 或指定上游DNS(如同时需要公共解析)
# server=8.8.8.8

配置客户端使用本地DNS

# 临时修改(重启失效)
sudo echo "nameserver [你的Linux服务器IP]" > /etc/resolv.conf

# 永久修改(以NetworkManager为例)
sudo nmcli con modify [网卡名] ipv4.dns "[你的Linux服务器IP]"
sudo nmcli con up [网卡名]

防火墙配置

# CentOS/RHEL
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

# Ubuntu/Debian
sudo ufw allow 53/udp

常见问题排查
解析失败:

  1. 检查 /etc/dnsmasq.d/custom-hosts 文件格式是否正确。

  2. 查看日志:

journalctl -u dnsmasq --since "5 minutes ago"
  1. 确认防火墙允许UDP 53端口。

  2. 服务无法启动:
    检查配置文件语法:

dnsmasq --test

扩展功能

泛域名解析:
在 custom-hosts 中添加:

183.47.100.66  .weixin.qq.com  # 解析所有子域名

反向解析:
编辑 /etc/dnsmasq.conf,添加:

ptr-record=66.100.47.183.in-addr.arpa qyapi.weixin.qq.com

相关文章:

  • Java 大厂面试题 -- JVM 深度剖析:解锁大厂 Offe 的核心密钥
  • 0基础 | 硬件 | LM386芯片
  • 前端面试核心知识点整理:从 JavaScript 到 Vue 全解析
  • Mythical Beings:第八季即将回归,探索新的神话传承
  • 2021-10-26 C++完美身材
  • 记录学习的第二十三天
  • debian12安装mysql5.7.42(deb)
  • SeeGround: See and Ground for Zero-Shot Open-Vocabulary 3D Visual Grounding
  • 第二章:SQL 进阶操作与多表查询
  • 基于springboot+vue的课程管理系统
  • vue专题1---vue中绑定的自定义事件对应的事件处理函数,如何在传递参数的同时接收事件对象 event
  • LLaMA-Factory 数据集成从入门到精通
  • Kotlin学习
  • 数组的常见算法一
  • 数据库死锁解决
  • OceanBase 推出单机版 ,为中小规模业务提供高性价比方案
  • 基于TRIZ创新方法论的九屏法分析系统
  • [Linux系统编程]多线程—互斥
  • Android Material Design 3 主题配色终极指南:XML 与 Compose 全解析
  • C#调用Lua方法1+C#调用Lua方法2,3
  • 外国人可以在中国做网站吗/seo整站优化费用
  • iis7网站建设/站长工具流量统计
  • 潍坊网站建设客服/今日国际军事新闻头条
  • 个人建设网站维护费是多少/找竞价托管公司
  • 网站介绍的ppt怎么做/seo顾问服务深圳
  • 深圳网站建设 卓/760关键词排名查询