Docker安装部署trojan-go, 搭配nginx可配置多域名访问

准备

流程: 客户端请求到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}

2f4dc1c3d8b13768c5d79caa36ce7a501933a7ac.png