本文最后更新于 1296 天前,其中的信息可能已经有所发展或是发生改变。
前言
- 出于去年搭建好后一直没有使用的使用 hexo 搭建的博客(使用 github page),网站打开速度过于迅速,即使按照网上所说使用 cloudflare 加速,依旧没有改善。虽然了解到可以通过 git 设置可以将 hexo 发布到自己的服务器上,但我想都用服务器了,还用静态网站,一想还是用 WP 重新搭一个,正好还了解一些其它的东西。
- 其中最大的问题是服务器只有一台(钱的问题),而我本来之前服务器就只是用来搭个梯子,顺带学习下 linux 的一些基础知识,而梯子我偏好使用 trojan,而 trojan 实现的方式又是通过模仿正常流量达到不被 GWF 发现,即使用 https。而恰好网站要使用安全认证,同样要使用 https。
- 即它们都要使用 443 端口,通过查找,网上已经有人实现过,便参照自己实现了一下,本文主要讲使用,详细原理请参照该文章。
以下部分资料引用自该博客,链接赋予文章末。
技术基础
工作架构
即通过 Nginx 代理实现识别 443 端口流量,进一步进行分发。
SNI
SNI(TLS 服务器名称指示),它要求在一个 IP 有多个 TLS 服务站点的情况下,客户端在初始 TLS 握手期间指定要连接到哪个站点,数据上的实现就是在 Client Hello 阶段里面新增一个 server_name 字段。
SNI 四层转发
Nginx 支持基于 SNI 的 4 层转发。简单说就是:识别 SNI 信息,然后直接转发 TCP/UDP 数据流。这个可以比 7 层的虚拟主机转发厉害太多了,该功能由 ngx_stream_ssl_preread_module 模块提供,但是 Nginx 默认不启用该模块,配置起来也很简单,需要注意的是该模块属于 stream ,不是大家常用的 http。
具体使用
核心-nginx 配置
stream {
# 这里就是 SNI 识别,将域名映射成一个配置名
map $ssl_preread_server_name $backend_name {
xycd.space web;
trojan.xycd.space trojan;
# 域名都不匹配情况下的默认值
default web;
}
# web,配置转发详情
upstream web {
server 127.0.0.1:44300;
}
# trojan,配置转发详情
upstream trojan {
server 127.0.0.1:43301;
}
# 监听 443 并开启 ssl_preread
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
在此处实现对 443 端口的监听以及对流量的分发
网站配置
server
{
listen 80;
listen 44300 ssl http2;
server_name xycd.space blog.xycd.space;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/xycd.space;
即修改网站端口,使之对应于 Nginx 分发的配置端口。
trojan 配置
{
"run_type": "server",
"local_addr": "127.0.0.1",
"local_port": 43301,
"remote_addr": "127.0.0.1",
"remote_port": 80,
即修改 trojan 端口,使之对应于 Nginx 分发的配置端口。
最终效果
最终所有服务在服务器上的运行情况