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

nginx 正向代理 https

问题背景

因为网络环境受限,应用服务器无法直接访问外网,需要前置机上中转一下,这种情况可在应用服务器修改/etc/hosts文件指向前置机,在前置机上的nginx设置四层代理,从而出站。

方案

根据How to Use NGINX as an HTTPS Forward Proxy Server,nginx支持正向代理https,有L7(应用层,使用http connect)和L4(传输层)两种方式,L7和L4对客户端是有感知的,L7代理需要显式设置客户端的代理,L4要修改DNS解析(linux上/etc/hosts文件),因为我的nginx支持L4代理,使用nginx -V查看加载的模块,加载了以下几个模块即可

  • –with-stream
  • –with-stream_ssl_module
  • –with-stream_ssl_preread_module

博客中的写法

stream {resolver 114.114.114.114;server {listen 443;ssl_preread on;proxy_connect_timeout 5s;proxy_pass $ssl_preread_server_name:$server_port;}
}

但我使用此种方式不行,怀疑$ssl_preread_server_name$server_port这俩变量有问题,写死域名和端口后就好了。注意:stream块与http块是平级的,切勿嵌套。

http{//something else
}
stream {server {listen 443;ssl_preread on;proxy_pass www.baiducom:443;}
}

测试SSL时,可使用openssl s_client,详情可参考openssl s_client工具详解

openssl s_client -connect www.baidu.com:443 -debug

或者

openssl s_client -connect www.baidu.com:443 -msg

或者curl https://some.domain.com/some/path -v

上述解决方案只访问一个域名可以写死,如果访问多个域名该怎么办?老海给出了答案,也可参考官方文档Module ngx_stream_ssl_preread_module样例

stream {map $ssl_preread_server_name $target {a.com a-network;b.com b-network;}upstream a-network {server a.com:443;}upstream b-network {server b.com:443;}server {listen 443;ssl_preread on;proxy_pass $target;}

客户端访问a.com,最终会代理到upstream a-network块中的 a.com:443

思考

经同事提醒,同一个nginx不能同时正向和反向代理443端口;想想为什么?

http://www.lryc.cn/news/326848.html

相关文章:

  • vue3从其他页面跳转页面头部组件菜单el-menu菜单高亮
  • python 条件循环语句
  • CIM搭建实现发送消息的效果
  • C++第十三弹---内存管理(下)
  • Python爬虫学习完整版
  • JavaScript中的继承方式详解
  • Git基础(23):Git分支合并实战保姆式流程
  • 为什么有些前端一直用 div 当按钮,而不是用 button?
  • python实战之基础篇(一)
  • 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(补题)
  • 蓝桥杯刷题--python-32
  • 单例模式如何保证实例的唯一性
  • IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)
  • 【教程】iOS如何抓取HTTP和HTTPS数据包经验分享
  • 基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告
  • Spring Cloud Gateway Server MVC
  • 建立动态MGRE隧道的配置方法
  • 【MySQL】9. 内置函数
  • 芯片工程系列(5)2.5D 3D封装
  • KubeSphere简单介绍及安装使用
  • Java零基础-集合:Java 8新增的集合操作
  • C++经典面试题目(七)
  • 让手机平板成为AI开发利器:AidLux
  • Python物理学有限差分微分求解器和动画波形传播
  • 游戏本续航@控制中心的省电模式效果如何
  • centOS 安装MySQL8.0
  • 力扣 1.两数之和
  • Occupancy field----其他应用
  • Spring_MVC
  • 【动手学深度学习】深入浅出深度学习之线性神经网络