搜索
缓存时间02 现在时间02 缓存数据 现在的我挺好,虽然没有谈恋爱,但日子过得有声有色,看书,写字,知道自己想要什么不想要什么,更喜欢动物,一直以来都想养条狗,虽然有时会觉得孤单,并不会孤独。唯一遗憾并愧疚的是父母对我婚姻的担忧。还是许个愿吧,希望我能遇到个合适的人让我重新信任,依赖,并对日后生活充满期待。
查看: 127|回复: 1

宝塔nginx stream模块的sni分流实现443端口复用

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。注册帐户,不仅可以享受无广告的清爽界面!

您需要 登录 才可以下载或查看,没有账号?注册

×

1. stream配置

宝塔安装的nginx默认已经开启了stream模块,并且已经在主配置文件/www/server/nginx/conf/nginx.conf 中已经引入了,仅在默认配置文件中引入自定义配置。

# nginx.conf 

# ...其他配置不动

stream {

    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';

    access_log /www/wwwlogs/tcp-access.log tcp_format;

    error_log /www/wwwlogs/tcp-error.log;

    include /www/server/panel/vhost/nginx/tcp/*.conf;

    # 引入自定义的stream.conf文件

    include /www/server/nginx/conf/stream.conf;
#...其他配置不动

新建一个/www/server/nginx/conf/stream.conf文件专门配置stream,减少对原默认配置的修改。

# stream.conf
# map将sni服务器名称(请求SSL证书的域名)映射为$backend(随便自己起啥名字都行)参数
# 下面配置的意思是,当sni为 www.你要伪装的域名.com 时映射为"reality"的自定义名称
# 其他协议可以自己加,然后剩余的其他域名 映射为 "web_backend"的自定义名称统一处理
map $ssl_preread_server_name $backend {
   www.你要伪装的域名.com        reality;
   # 其他所有域名转发到网站服务
   default    web_backend;

}

# reality服务入栈端口
upstream reality {
   server 127.0.0.1:25772;
}

# 用其他一个非443端口统一处理你正常的网站
upstream web_backend {
   server 127.0.0.1:25773;
}

server {
   # 复用443端口配置
   listen          443 reuseport;
   # 根据sni分流到不同的负载均衡处理器
   proxy_pass      $backend;
   # 获取TLS握手信息,也就是可以获取SNI的信息用于分流
   ssl_preread     on;
   # 开启代理协议,获取客户端的真实信息
   proxy_protocol  on;
}

# udp转发到443
server {
   listen 443 udp;
   proxy_pass 127.0.0.1:443;
}

2. 自己正常网站反代的处理

2.1 随便生成一个自签证书

mkdir /www/server/panel/vhost/cert/0.default && cd /www/server/panel/vhost/cert/0.default

生成自签证书

openssl genrsa -out privkey.pem 2048

随便生成一个10年的证书(这个证书只用于默认的拒绝服务器块(返回444)证书不会被实际的 HTTPS 连接使用,因为真实的域名都会匹配到它们自己的服务器块和证书。即使过期也不会影响实际网站的运行。)

openssl req -new -x509 -key privkey.pem -out fullchain.pem -days 3650 -subj "/CN=default.local"

2.2 接管正常网站所在配置文件目录的https流量

为了不重复修改每个反代网站的配置文件中的很多配置,修改/www/server/panel/vhost/nginx/0.default.conf ,因为0.default.conf 在字母顺序上排在最前面,这样它会被最先加载

# 0.default.conf
# 处理 HTTP 流量
server {
    listen 80;
    server_name _;
    index index.html;
    root /www/server/nginx/html;
}

# 处理 HTTPS 流量
server {
    listen 25773 ssl http2 quic proxy_protocol;

    listen [::]:25773 ssl quic http2 proxy_protocol;
    # _是一个特殊的通配符标记,表示这是一个默认服务器块,当请求的 Host 头不匹配任何其他 server_name 时,请求会被这个默认服务器处理,通常用于处理未知域名的访问请求
    server_name _;
    # SSL 证书配置 - 使用一个默认证书
    ssl_certificate    /www/server/panel/vhost/cert/0.default/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/0.default/privkey.pem;

    # 因为启用了 proxy_protocol,下面两行识别客户端的真实 IP
    set_real_ip_from 127.0.0.1; # 告诉 Nginx 从哪个 IP 来的流量可以信任其 proxy_protocol 头 stream 模块(监听在 443)和 http 模块(监听在 25773)之间的本地转发
    real_ip_header proxy_protocol;

    return 444;  # 拒绝未知域名的 HTTPS 请求
}

2.3 修改具体网站的配置文件

# 删除下面这两行
listen 443 ssl;
listen 443 quic;

2.4 完

重载nginx配置文件

爱生活,爱奶昔~
发表于 前天 12:35 | 显示全部楼层
学习一下,顺便捞点积分升级
[发帖际遇]: saobi123 发帖时在路边捡到 5 点数,偷偷放进了口袋. 幸运榜 / 衰神榜
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

Powered by Nyarime. Licensed

GMT+8, 2025-1-12 02:44 , Processed in 0.045406 second(s), 14 queries , Gzip On, Redis On
发帖际遇 ·手机版 ·小黑屋 ·RSS ·奶昔网 | 沪ICP备13020230号-1 |  沪公网安备 31010702007642号

登录切换风格
快速回复 返回顶部 返回列表