Nginx之正向代理与反向代理进阶(支持https)

news2024/10/5 19:19:20

在【Nginx之正向代理与反向代理】一文中我们实现了将Nginx服务器作为正向代理服务器和反向代理服务器,但美中不足的是仅支持http协议,不支持https协议

我们先看看看http和https的区别:

  • http协议:协议以明文方式发送数据,不提供任何方式的数据加密。不适合传输一些敏感信息,例如密码。其使用的端口是80
  • https协议:在http协议的基础上,加入了SSL(Secure Sockets Layer),用于对数据进行加密。其使用的端口为443

现在,我们要完成Nginx对https协议的支持。

1.Nginx正向代理(http)

我们来回顾一下Nginx作为正向代理服务器支持http协议的配置。

代理服务器:192.168.110.101

代理服务器配置:

server {
	listen 8080;
	server_name localhost;
	# 解析域名时需要配置
	resolver 8.8.8.8;
	location / {
		proxy_pass http://$host$request_uri;
	}
}

客户端配置:

我们使用Windows系统作为客户端环境。

访问http://nginx.org/en/index.html,可以正常访问。

访问https://www.baidu.com,则无法正常访问了。

查看代理服务器的error.log,发现其报400错误码。

这是因为,Nginx作为正向代理服务器时,默认仅支持http协议,是不支持https协议的。

2.Nginx正向代理(https)

那么怎么让Nginx作为正向代理服务器的时候支持https协议呢?

我们可以使用第三方模块ngx_http_proxy_connect_module

下载地址:https://github.com/chobits/ngx_http_proxy_connect_module

我们知道如果要为Nginx添加第三方模块,需要在配置configure时添加--add-module。从Nginx1.9.11版本开始,支持load_module指令来动态加载模块。

我们这里使用--add-module进行模块的添加。

1)查看Nginx版本以及configure信息

nginx -V

nginx version: nginx/1.22.1
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) 
configure arguments: --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module

2)下载模块

下载地址:https://codeload.github.com/chobits/ngx_http_proxy_connect_module/zip/refs/heads/master

3)重新编译

这里我们两种添加第三方模块的方式都尝试一下。

使用--add-module

cd /home/stone/nginx-1.22.1

# 1、添加patch
patch -p1 < /home/stone/nginx-1.22.1/module/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch

# 2、configure
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --add-module=/home/stone/nginx-1.22.1/module/ngx_http_proxy_connect_module

# 3、make
make

# 4、备份旧的nginx可执行文件,复制编译之后的可执行文件
mv /usr/local/nginx/nginx /usr/local/nginx/nginx.old
cp objs/nginx /usr/local/nginx/nginx

# 5、升级
make upgrade

使用load_module,需要将--add-module替换为--add-dynamic-module

cd /home/stone/nginx-1.22.1

# 1、添加patch
patch -p1 < /home/stone/nginx-1.22.1/module/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch

# 2、configure
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --add-dynamic-module=/home/stone/nginx-1.22.1/module/ngx_http_proxy_connect_module

# 3、make
make

# 4 创建module文件夹,并将编译生成的ngx_http_proxy_connect_module.so拷贝过去
mkdir /usr/local/nginx/module
cp /home/stone/nginx-1.22.1/objs/ngx_http_proxy_connect_module.so /usr/local/nginx/module

# 5、备份旧的nginx可执行文件,复制编译之后的可执行文件
mv /usr/local/nginx/nginx /usr/local/nginx/nginx.old
cp objs/nginx /usr/local/nginx/nginx

# 6、升级
make upgrade

4)修改配置文件

# --add-dynamic-module动态添加第三方模块时使用
# load_module module/ngx_http_proxy_connect_module.so;

http {
	server {
		listen 8080;
		server_name localhost;
		resolver 114.114.114.114 ipv6=off;
		proxy_connect;
		proxy_connect_allow 443 80;
		proxy_connect_connect_timeout  10s;
		proxy_connect_data_timeout     10s;
		# 指定代理日志
		access_log logs/access_proxy.log main;
		location / {
			proxy_pass $scheme://$host$request_uri;
		}
	}
}

此时访问https://www.baidu.com,在access_proxy.log产生如下日志,说明https代理成功。

3.Nginx反向代理(http)

同样的,Nginx作为反向代理服务器,默认也是只支持http协议,我们来回顾一下Nginx作为反向代理服务器支持http协议的配置。

server {
	listen       80;
	server_name  localhost;
    location /proxy {
    	proxy_set_header X-Real-IP $remote_addr;
    	proxy_pass http://192.168.110.98;
    }
}

可以看到,我们配置的server_namelocalhost,但在实际项目中,我们是使用域名绑定Nginx服务器的IP,并且使用https协议进行访问,配置的server_name就是指定的域名,例如www.aaa.com

Nginx为我们提供了ngx_http_ssl_module来支持https协议,并且在提供的默认配置文件里已经给出了示例。

4.Nginx反向代理(https)

添加ngx_http_ssl_module的步骤和添加ngx_http_proxy_connect_module的步骤一致,只是这是Nginx提供的模块,因此在configure时使用--with-http_ssl_module 即可。

我们再来看看采用https协议时的配置:

server {
	listen       443 ssl;
	server_name  www.aaa.com;
	
	# 申请ssl证书后,会提供cert.pem和cert.key
	ssl_certificate      cert.pem;
	ssl_certificate_key  cert.key;

	ssl_session_cache    shared:SSL:1m;
	ssl_session_timeout  5m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location /proxy {
		proxy_pass http://192.168.110.98;
	}
}

我们需要去为指定的域名申请ssl证书,然后将证书中的cert.pemcert.key放到指定文件,并在配置文件中指定。例如我们这里指定的server_namewww.aaa.com,所以我们就需要为www.aaa.com申请ssl证书。

后续我们访问https://www.aaa.com/proxy就可以被代理到指定服务端了。

以上就是Nginx实现正向代理和反向代理支持https协议的全部内容,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django ORM框架(操作数据库)【正在更新中...】

一、ORM框架介绍 ORM框架&#xff0c;把类和数据进行映射&#xff0c;通过类和对象操作它对应表格中的数据&#xff0c;进行增删改查&#xff08;CRUD) ORM框架中 数据库&#xff1a;需要提前手动创建数据库 数据表&#xff1a;与OMR框架中的模型类对应 字段&#xff1a;模…

C++基础STL-deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque 容器和 vecotr 容器有很多相似之处&#xff0c;比如&#xff1a; deque 容器也擅长在序列尾部添加或删除元素&#xff08;时间复杂度为O(1)&#xff09;&#xff0c;而不擅长在序列中间添加或删除元素。deque 容器也可…

图解LeetCode——240. 搜索二维矩阵 II

一、题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 二、示例 2.1> 示例 1&#xff1a; 【输入】matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,1…

软件工程开发文档写作教程(08)—需求分析书的编制目标

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 需求分析定义 需求分析的基本任务是要准确地定义新系统的目标&#xff0c;为了满足用户需求…

seleniumplaywright获取网站Authorization鉴权实现伪装requests请求

文章目录 selenium&playwright获取网站Authorization鉴权实现伪装requests请求需求背景知识点&#xff1a;selenium获取已登录网站的用户鉴权信息知识点&#xff1a;playwright获取cookie知识点&#xff1a;playwright获取storage_state提取cookie秃发状况windows禁止chrom…

OpenCV实现提取水平线和垂直线,提取验证码

1.提取水平线和垂直线 在之前的博客中&#xff0c;我们介绍了很多形态学操作。其中&#xff0c;膨胀与腐蚀操作可以使用任意的结构元素&#xff0c;例如矩形、圆、直线等各种自定义形状。 提取水平线和垂直线的具体步骤见下&#xff1a; 1.1.步骤一&#xff1a;读入原始图像…

提速YOLOv7:用MobileNetV3更换骨干网络加速目标检测

目录 前言一、MobileNetV3的介绍1、MobileNetV3的原理和特点2、MobileNetV3的结构 二、YOLOv7的介绍1、YOLOv7的结构和流程2、YOLOv7的性能指标 三、MobileNetV3替换YOLOv7的骨干网络1、替换骨干网络2、修改neck部分3、微调模型 四、实验结果与分析1、数据集和实验设置2、实验结…

【Prompting】ChatGPT Prompt Engineering开发指南(3)

ChatGPT Prompt Engineering开发指南3 总结文字使用单词/句子/字符限制进行总结以运输和交付为重点进行总结以价格和价值为重点进行总结 尝试“extract”而不是“summarize”总结多个产品评论内容来源 本文承接上文&#xff1a;ChatGPT Prompt Engineering开发指南2&#xff0c…

RK3588平台开发系列讲解(进程篇)图解linux netlink

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、netlink协议簇二、netlink初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 netlink 协议是一种进程间通信(Inter Process Communication,IPC)机制,为的用户空间和内核空间以及内核的某些部分之间…

解决FTD2000 麒麟系统下计算机属性中显示的内存比实际内存少

FTD2000 麒麟系统下计算机属性中显示的内存比实际内存少,首先确认问题点,判断是飞腾D2000的bios问题,还是麒麟系统问题 可以用如下方式做出判断 1、D2000 log打印进入shell 后 exit 在弹出来的界面中选 bios set 选项、进入bios 设置界面,如下图 可以看到 bios 下,Tota…

总结851

每周小结 英语背了3篇文章 高数一直刷关于一元积分的题目&#xff0c;一共150道左右&#xff0c;平均一天20道左右&#xff0c;强化课看到第2讲数列。 每日必复习&#xff08;5分钟&#xff09; 线性代数 向量组 学习内容&#xff1a; 暴力英语&#xff1a;继续背诵《The kin…

YOLOv5:解读yolo.py

YOLOv5&#xff1a;解读yolo.py 前言前提条件相关介绍yolo.pyparse_model()函数Detect类Model类 参考 前言 记录一下自己阅读yolo.py代码的一些重要点&#xff0c;方便自己查阅。特别感谢&#xff0c;在参考里&#xff0c;列举的博文链接&#xff0c;写得很好&#xff0c;对本人…

康耐视智能相机insight主从触发以及康耐视insight视觉系统之间数据特有交互方式

1、一个相机设置为主系统,指定自己的名称,下方可以指定发给从系统的数据,触发方式不要设置 成网络 2、另外一个相机触发方式设置成网络,然后下方指定主系统的名称 3、主系统每触发一次,就会带动从系统触发,同时指定的数据会发送到从系 统,从系统使用函数getstring获取…

【数据结构】图的创建和深度(DFS)广度(BFS)优先遍历

一、图 1.图的概念 图是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通过表示为G(V,E)&#xff0c;其中&#xff0c;G标示一个图&#xff0c;V是图G中 顶点的集合&#xff0c;E是图G中 边的集合。 2.图的种类 图分为无向图和有向图 无向图&#xff1a;若顶点V…

用于OOD预测的稳定学习

当测试数据和训练数据共享相似的分布时&#xff0c;基于深度神经网络的方法取得了惊人的性能&#xff0c;但在其他情况下可能会失败。因此&#xff0c;消除训练和测试数据之间分布变化的影响对于构建有前景的深度模型至关重要。作者考虑了一个更具挑战性的情况。通过训练样本的…

大数据Doris(二十一):Bloom Filter索引以及Doris索引总结

文章目录 Bloom Filter索引以及Doris索引总结 一、Bloom Filter索引 1、BloomFilter索引原理 2、BloomFilter索引语法 3、注意事项 二、Doris索引总结 Bloom Filter索引以及Doris索引总结 一、Bloom Filter索引 1、BloomFilter索引原理 BloomFilter是由Bloom在1970年提…

移动机器人运动规划---基于图搜索的基础知识---广度优先遍历与深度优先遍历

移动机器人运动规划---基于图搜索的基础知识---广度优先遍历与深度优先遍历 广度优先搜索&#xff08;BFS&#xff09;深度优先搜索&#xff08;DFS&#xff09;BFS vs DFS 图搜索优化的方向就是&#xff1a; 按照什么规则去访问节点&#xff0c;按照什么规则弹出节点&#xff…

快速了解 TypeScript

目录 1、简介 2、安装TypeScript 3、编译代码 4、类型注解 5、接口 6、类 7、运行TypeScript Web应用 1、简介 TypeScript是JavaScript类型的超集&#xff0c;它可以编译成纯JavaScript。 TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行&#xff0c;并且…

【哈士奇赠书活动 - 23期】-〖你好 ChatGPT〗

文章目录 ⭐️ 赠书 - 《你好 ChatGPT》⭐️ 内容简介⭐️ 作者简介⭐️ 精彩书评⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《你好 ChatGPT》 ⭐️ 内容简介 人工智能&#xff08;AI&#xff09;时代已经来临&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;正在进一步…

【精选】各种节日祝福(C语言,可修改),Easyx图形库应用+源代码分享

博主&#xff1a;命运之光✨✨ 专栏&#xff1a;Easyx图形库应用&#x1f4c2; 目录 ✨一、程序展示 范例一&#xff1a;❤新年祝福❤ 范例二&#xff1a;❤母亲节祝福❤ ✨二、项目环境 简单介绍一下easyx图形库应用 Easyx图形库 ✨三、运行效果展示&#xff08;视频&am…