Nginx+Trojan-go

写论文需要查询学术网站,为了加速国外网站访问速度,申请了云计算厂商的 ECS,配置了相关代码。本文就流行的 Nginx 和 Trojan-go 组合配置做了简单介绍。

Go 实现的 Trojan 服务,支持多路复用/路由功能/CDN中转/Shadowsocks混淆插件,多平台,无依赖。
官方 https://github.com/p4gefau1t/trojan-go
完整配置教程 https://p4gefau1t.github.io/trojan-go

ECS 准备

推荐 ECS 选用 Ubuntu 20.04 LTS,Debian 10 也可以。我个人更喜欢 Ubuntu,软件比较新,配置时遇到的问题较少。有人觉得 Ubuntu 占用系统资源太大,不用担心,我测试过 512M 内存的 ECS,够用了。

升级并安装必要软件

apt update && apt -y install socat wget
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


申请和安装域名证书

假如域名为 domain.com,我们申请 Let’s Encrypt SSL 的 Wildcard 泛域名证书。域名的 nameserver 推荐使用 Cloudflare,解析速度极快,千万别用 NameSilo 的域名解析,很可能申请泛域名证书时超时报错。

安装 acme.sh

wget -qO- get.acme.sh | bash 
source ~/.bashrc

设置 Cloudflare 的 Global API key

export CF_Key="xxxxxx"
export CF_Email="xxxxxx"

acme.sh 实现了 acme 协议支持的所有验证协议,一般有两种方式验证,http 和 dns 验证。由于 Wildcard 证书验证只支持 dns 验证,不支持 http 验证,所以要使用 dns api 模式。推荐申请 ECC 证书。

acme.sh --issue --dns dns_cf -d domain.com -d '*.domain.com' -k ec-256

安装证书

mkdir /etc/trojan-go
acme.sh --installcert -d domain.com --fullchain-file /etc/trojan-go/fullchain.cer --key-file /etc/trojan-go/domain.com.key --ecc


安装网盘服务

Nginx 需要一个网站,我推荐 Cloudreve 网盘,可以作为个人网络存储空间,非常实用。

mkdir /usr/local/bin/cloudreve && cd /usr/local/bin/cloudreve
wget https://github.com/cloudreve/Cloudreve/releases/download/3.2.1/cloudreve_3.2.1_linux_amd64.tar.gz
tar -zxvf cloudreve_3.2.1_linux_amd64.tar.gz
chmod +x ./cloudreve
./cloudreve

Cloudreve 在首次启动时,会创建初始管理员账号,请注意保管管理员密码,此密码只会在首次启动时出现。如果您忘记初始管理员密码,需要删除同级目录下的 cloudreve.db,重新启动主程序以初始化新的管理员账户。Cloudreve 默认会监听5212端口。你可以在浏览器中访问 http://服务器IP:5212 进入 Cloudreve。
接下来按 Ctrl+C 退出 Cloudreve,设置守护进程。

nano /usr/lib/systemd/system/cloudreve.service

# 输入以下代码
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

[Service]
WorkingDirectory=/usr/local/bin/cloudreve
ExecStart=/usr/local/bin/cloudreve/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

设置开机启动

systemctl start cloudreve
systemctl enable cloudreve

设置 Cloudreve 配置文件

nano /usr/local/bin/cloudreve/conf.ini

# 添加以下代码
[System]
Mode = master
Debug = false
Listen = :5212

[UnixSocket]
Listen = /run/cloudreve.sock


安装 Nginx & Trojan-Go

Nginx 和 Trojan-go 有 Docker版本,使用很方便。

# 安装 Docker
wget -qO- get.docker.com | bash
# 查看 Docker 版本
docker version
# 设置 Docker 开机启动
systemctl start docker
systemctl enable docker
# 拉取镜像 其中 watchtower 会自动监测并更新镜像
docker pull nginx
docker pull teddysun/trojan-go
docker pull containrrr/watchtower


配置 Trojan-go

Trojan-go 以 h2 协商连接,非 Trojan-go 的 https 连接回落给 Nginx。

nano /etc/trojan-go/config.json

# 添加以下代码
{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 82,
    "password": [
        " Your password"
    ],
    "disable_http_check": false,
    "udp_timeout": 60,
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "/etc/trojan-go/fullchain.cer",
        "key": "/etc/trojan-go/domain.com.key",
        "key_password": "",
   		"cipher": "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
    	"curves": "",
        "prefer_server_cipher": true,
        "sni": "domain.com",
        "alpn": [
            "h2"
        ],
        "session_ticket": true,
    	"reuse_session": true,
        "fallback_addr": "",
        "fallback_port": 3000
    }
}

cipher 字段也可以留空,Trojan-go 会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性,默认情况下,Trojan-go 将优先使用更安全的 TLS1.3。如果需要填写,密码学套件名用分号(“:”)分隔,按优先顺序排列。在上面的配置中,Trojan-go 只接受 TLS1.2 和 TLS1.3 连接。

上面的配置没有 Websocket 传输支持,想用 CDN 流量中转的可以自行修改。

配置 Nginx

Nginx 配置文件是 /etc/nginx/conf.d/default.conf

mkdir /etc/nginx && mkdir /etc/nginx/conf.d
nano /etc/nginx/conf.d/default.conf

# 添加以下代码
server {
    listen 80;
    listen [::]:80;
    server_name domain.com www.domain.com;
    return 301 https://domain.com$request_uri;
}
server {
    listen 127.0.0.1:82 http2;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri;
}
server {
    listen 127.0.0.1:82 http2;
    server_name domain.com;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    location / {
        proxy_pass http://unix:/run/cloudreve.sock;
        client_max_body_size 20000m; 
        proxy_set_header X-Forwarded-For 127.0.0.1;
        proxy_set_header Host 127.0.0.1:443;     
        proxy_redirect     off;
        proxy_buffer_size          64k; 
        proxy_buffers              32 32k; 
        proxy_busy_buffers_size    128k;  
    }
}
server {
	listen 127.0.0.1:3000;
	server_name _;
	return 400;
}


启动服务

运行 Docker Nginx

docker run --network host --name nginx -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /run/cloudreve.sock:/run/cloudreve.sock --restart=always -d nginx

运行 Docker Trojan-go

docker run --network host --name trojan-go -v /etc/trojan-go:/etc/trojan-go --restart=always -d teddysun/trojan-go

这里证书是存放在 /etc/trojan-go 文件夹里,所以不需单独挂载。如果最开始证书是安装在其它文件夹,需要单独挂载,比如证书安装在 /etc/ssl,那么运行 Docker Trojan-go 的命令会变成这样。

docker run --network host --name trojan-go -v /etc/trojan-go:/etc/trojan-go -v /etc/ssl/fullchain.cer:/etc/ssl/fullchain.cer -v /etc/ssl/domain.com.key:/etc/ssl/domain.com.key --restart=always -d teddysun/trojan-go

运行 Docker Watchtower 并自动监测更新软件

docker run --name watchtower -v /var/run/docker.sock:/var/run/docker.sock --restart unless-stopped -d containrrr/watchtower --cleanup

现在可以在浏览器里打开 domain.com,会自动跳转到 https://domain.com,页面就是 Cloudreve 网盘,用刚才保存的用户名和密码登录,可以配置 Cloudreve 网盘。

结束语

配置完成,下载 Trojan-go 客户端可正常连接。在 ssllab.com 检测证书,显示为 A+,完美!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇