Install and deploy Trojan-Go in Docker with Nginx as a companion for multi-domain requests.
Prepare
- Open 80、443 ports for the server to external.
- Nginx occupies 80, 443, and 1443 ports.
- Trojan-Go occupies 25550 ports.
Request sorts: client request to Nginx that matched to Trojan-Go, if not matched then to another domain.
Note: Please notice server ports whether open, I suggest you limit ports.
# Check the server's firewall status
sudo ufw status
# Allow ports able request
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
# Open firewall
sudo ufw enable
Install Docker
sudo apt update
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
Note
Need to create the directory in your server corresponding to the docker container, then to the directory for running the docker container command. For example, create a named ’nginx’ directory and cd nginx to run the docker container command.
Free SSL website: https://www.sslforfree.com/
Nginx
Running container
Need settings the nginx.conf file and SSL certificates to upload to nginx/conf directory before running the container.
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
Suppose xxx.tk is an example, request www.xxx.tk domain forward to trojan-go to handle nor default forward 1443 port to handle. Note: mainly listening to 443 port then to forward.
Add server 1443 listening chunk if you have other domains that need to settings.
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;
}
}
Description
xxx.tk domain responsibility for open-show website content, www.xxx.tk this sub-domain responsibility communication between trojan-go.
First of all, settings nginx.conf file finished then you need a insure xxx.tk domain able to request.
Trojan-Go
Running container
SSL certificates upload to the running command’s directory and need settings config.json file
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: test, type: trojan, server: www.xxx.tk, port: 443, password: 123456, skip-cert-verify: true}