厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。注册帐户,不仅可以享受无广告的清爽界面!
您需要 登录 才可以下载或查看,没有账号?注册
×
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配置文件
|