Docker安装部署trojan-go, 搭配nginx可配置多域名访问
准备
- 服务器对外开放80、443端口
- Nginx占用80、443、1443
- Trojan-Go占用22250端口
流程: 客户端请求到Nginx, Nginx匹配转发到Trojan-Go,未匹配到转发到其它域名
注意服务器端口开放, 建议开启防火墙:
# 检测防火墙开启状态
sudo ufw status
# 开启允许访问端口
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
# 开启防火墙
sudo ufw enable
安装Docker命令
sudo apt update
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
注意
执行运行容器命令之前需要创建好对应的目录, 再到对应的目录中执行命令, 比如创建nginx目录, cd nginx之后再执行命令
免费申请SSL证书的网站: https://www.sslforfree.com/
Nginx配置
运行容器
运行容器之前, 需要把nginx.conf配置好 以及 将SSL证书添加到nginx/conf目录
docker run --restart=always --name nginx -d --network host -v $(pwd)/html:/usr/share/nginx/html -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/logs:/var/log/nginx -v $(pwd)/conf:/etc/nginx/conf nginx:1.18.0
nginx.conf参考配置
在这里以xxx.tk域名为例, 访问到www.xxx.tk域名时候会转发请求trojan-go进行处理, 其它域名默认走1443端口, 注意, 这里监听的是443端口的转发
如果你有其他域名需要配置新增server 1443监听即可
stream {
map $ssl_preread_server_name $backend_name {
www.xxx.tk trojan;
default web;
}
upstream web {
server 127.0.0.1:1443;
}
upstream trojan {
server 127.0.0.1:22250;
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
http {
server {
listen 1443 ssl;
server_name xxx.tk;
client_max_body_size 1000M;
ssl_certificate /etc/nginx/conf/certificate.crt;
ssl_certificate_key /etc/nginx/conf/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
rewrite .* https://github.com;
}
server {
listen 80;
server_name xxx.tk;
client_max_body_size 1000M;
rewrite .* https://github.com;
}
}
说明
在这里xxx.tk域名负责公开显示网站内容, www.xxx.tk子域名通过trojan-go进行通信, 首先, 配置好nginx之后需要确保xxx.tk能正常请求再进行trojan-go的运行配置
Trojan-Go
运行容器
运行容器命令之前需要把SSL证书上传到执行命令的目录下, 以及把config.json文件创建配置好它
docker run \
--name trojango \
--restart=always \
-d \
-v $(pwd):/etc/trojan-go \
--network host \
p4gefau1t/trojan-go \
/etc/trojan-go/config.json
config.json参考配置
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 22250,
"remote_addr": "xxx.tk",
"remote_port": 80,
"password": [
"123456"
],
"ssl": {
"cert": "/etc/trojan-go/certificate.crt",
"key": "/etc/trojan-go/private.key",
"sni": "www.xxx.tk",
"fallback_addr": "127.0.0.1",
"fallback_port": 1443
},
"mux": {
"enabled": true
}
}
Clash proxies配置参考
{name: 测试, type: trojan, server: www.xxx.tk, port: 443, password: 123456, skip-cert-verify: true}