nginx如何端口复用
发布时间 - 2019-06-11 00:00:00 点击率:次nginx-1.15.2 版本新增了$ssl_preread_protocol 变量,通过该变量可以使用 stream 反向代理时预先判断连接是否为ssl/tls协议或者为非ssl/tls协议,从而实现同一个端口来转发不同的业务。
stream_ssl_preread模块检查初始ClientHello在SSL或TLS连接消息,并且提取其可用于管理连接几个值。$ssl_preread_protocol版本1.15.2中添加的变量从消息client_version字段中捕获最新的SSL / TLS版本号ClientHello。如果消息中supported_versions存在扩展名ClientHello,则变量设置为TLSv1.2/TLSv1.3。
实例:在一台反向代理服务器上运行Nginx,并监听443端口,后端有两组服务,一个为HTTPS(开启TLS1.2/1.3)网站服务,另一个为SSH 服务,我们要实现这两组服务运行在同一个端口上(配置的443端口)--入口请求由Nginx自动区分。
为简便,我这时直接使用 docker环境
nginx 版本
# docker exec -it nginx nginx -V nginx version: nginx/1.15.10 built by gcc 8.2.0 (Alpine 8.2.0) built with OpenSSL 1.1.1b 26 Feb 2019 ...<省略若干行>...
目录文件
# tree ./nginx-with-L4-reuse/./nginx-with-L4-reuse/ ├── config│ └── nginx │ ├── conf.d │ │ └── default.conf │ ├── fastcgi.conf │ ├── fastcgi_params │ ├── mime.types │ └── nginx.conf └── docker-compose.yaml 3 directories, 6 files
docker-compose.yaml
# docker-compose.yaml
version: "2.4"
services:
nginx:
container_name: nginx
image: nginx:alpine
network_mode: host
volumes:
- ./config/nginx:/etc/nginx/:ro
ports:
- "443:443"
restart: alwaysnginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
log_format stream '{"@access_time":"$time_iso8601",'
'"clientip":"$remote_addr",'
'"pid":$pid,'
'"pro":"$protocol",'
'"ssl_pro": "$ssl_preread_protocol"',
'"pro":"$protocol",'
'"stus":$status,'
'"sent":$bytes_sent,'
'"recv":$bytes_received,'
'"sess_time":$session_time,'
'"up_addr":"$upstream_addr",'
'"up_sent":$upstream_bytes_sent,'
'"up_recv":$upstream_bytes_received,'
'"up_conn_time":$upstream_connect_time,'
'"up_resp_time":"$upstream_first_byte_time",'
'"up_sess_time":$upstream_session_time}';
upstream ssh {
server 192.168.50.212:22;
}
upstream web {
server 192.168.50.215:443;
}
map $ssl_preread_protocol $upstream {
d
efault ssh;
"TLSv1.2" web;
"TLSv1.3" web;
}
# SSH and SSL on the same port
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
access_log /var/log/nginx/stream_443.log stream;
}
}$ssl_preread_protocol 实现IP层实现了不同业务配置,在某种需求上很有意义--虽然存在功能限制。然而Tengine-2.3.0已经实现的IP层基于域名转发,或许这一特性会引入到Nginx。
更多Nginx相关技术文章,请访问Nginx使用教程栏目进行学习!
# nginx
# 两组
# 几个
# 这一
# 一台
# 扩展名
# 可以使用
# 有意义
# 设置为
# 上很
# 后端
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Python函数文档自动校验_规范解析【教程】
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
EditPlus中的正则表达式实战(5)
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何在IIS管理器中快速创建并配置网站?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何确保FTP站点访问权限与数据传输安全?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
高防服务器租用首荐平台,企业级优惠套餐快速部署
大型企业网站制作流程,做网站需要注册公司吗?
Laravel如何处理异常和错误?(Handler示例)
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
详解阿里云nginx服务器多站点的配置
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
js实现获取鼠标当前的位置
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何自定义建站之星模板颜色并下载新样式?
网易LOFTER官网链接 老福特网页版登录地址
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
简单实现jsp分页
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
如何生成腾讯云建站专用兑换码?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
制作旅游网站html,怎样注册旅游网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
微信小程序 wx.uploadFile无法上传解决办法
Laravel中的withCount方法怎么高效统计关联模型数量
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
个人网站制作流程图片大全,个人网站如何注销?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何快速生成可下载的建站源码工具?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID


efault ssh;
"TLSv1.2" web;
"TLSv1.3" web;
}
# SSH and SSL on the same port
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
access_log /var/log/nginx/stream_443.log stream;
}
}