两个程序都要用同一个端口,怎么解?

云原生实验室

共 2420字,需浏览 5分钟

 · 2021-01-19


更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io

前言

你可能会碰到这个程序要用 443 端口,那个程序也要使用 443 的情况。这时候就要用到 nginx 的 stream 进行分流了。

假设有 web1,web2 两个都要用到 443 端口。则配置方法如下:

nginx.conf 配置文件

在 nginx 的末尾加上下面代码即可:

stream {
map $ssl_preread_server_name $upstream {
web1.moeelf.com web1;
web2.moeelf.com web2;
default web;
}

log_format stream '$remote_addr [$time_local] [$ssl_preread_server_name] [$upstream] $status $bytes_sent $bytes_received $session_time';
access_log /var/log/nginx/stream.log stream;

upstream web1 {
server web1:65531;
}
upstream web2 {
server web2:65532;
}
upstream web {
server nginx:4433;
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $upstream;
ssl_preread on;
}
}

虚拟主机配置文件

将下面代码保存为 sni.conf 文件,放到虚拟主机目录。nginx 安装方式不一样,放的位置会不一样。一般位于 /etc/nginx/conf.d//usr/local/nginx/conf/vhost/ 下面。

server {
listen 65531 ssl http2 reuseport;
server_name web1.moeelf.com;

ssl_certificate /etc/nginx/ssl/web1.moeelf.com/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/web1.moeelf.com/web1.moeelf.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;

#log_format stream '$remote_addr [$time_local] [$ssl_preread_server_name] [$route] $status $bytes_sent $bytes_received $session_time';
access_log /var/log/nginx/web1.moeelf.com.log;
}
server {
listen 65532 ssl http2 reuseport;
server_name web2.moeelf.com;

ssl_certificate /etc/nginx/ssl/web2.moeelf.com/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/web2.moeelf.com/web2.moeelf.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;

#log_format stream '$remote_addr [$time_local] [$ssl_preread_server_name] [$route] $status $bytes_sent $bytes_received $session_time';
access_log /var/log/nginx/web2.moeelf.com.log;
}


原文链接:https://www.moeelf.com/archives/296.html



你可能还喜欢

点击下方图片即可阅读

16 岁高中生成功在 iPhone 7 上安装 Ubuntu 20.04 桌面!

云原生是一种信仰 🤘



码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!



点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️
浏览 70
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报