01 安装 trojan

使用 apt 安装 trojan:

1
apt install trojan

编辑 trojan 的配置文件:

1
vi /etc/trojan/config.json

主要需要修改:

  1. 端口
  2. 密码
  3. 证书地址

需要更改 /lib/systemd/system/trojan.service 文件:

1
2
# 修改[Service]中的user,不能是nobody
User=root

02 配置 nginx

配置 nginx 对443端口进行分流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
stream {
map $ssl_preread_server_name $name {
myproxy.mydomain.com my_proxy;
mywebdav.mydomain.com my_webdav;
default web;
}

upstream my_proxy {
server 127.0.0.1:?;
}

upstream my_webdav {
server 127.0.0.1:?;
}

upstream web {
server 127.0.0.1:?;
}

server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}

进入 sites-availiable 配置,参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
server_name myproxy.mydomain.com;

location / {
alias /home/xxx/xxx;
}

listen [::]:1234;
listen 1234;

# ssl_certificate /etc/letsencrypt/live/xuanyangxu.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/xuanyangxu.com/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

}server {

if ($host = myproxy.mydomain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot

server_name myproxy.mydomain.com;

listen 80;
listen [::]:80;

return 404; # managed by Certbot
}

注意,监听端口1234不能再有证书验证,不加 ssl:

1
2
3
4
5
6
7
# 如果certbot自动生成如下内容,那么需要删除一些内容
listen [::]:1234 ssl ipv6only=on; # managed by Certbot
listen 1234 ssl; # managed by Certbot

# 变成如下内容:
listen [::]:1234;
listen 1234;

更改完之后,reload nginx:

1
2
3
4
ln -s /etc/nginx/sites-available/myproxy.mydomain.com.conf /etc/nginx/sites-enabled/

nginx -t
nginx -s reload

03 配置文件夹权限

对于 html 文件所在的位置,需要要让 www-data 用户可读状态:

1
chmod -r 755 /home/xxx/xxx

04 注意事项

  1. 配置完 nginx 能跑通后,建议将 nginx配置文件用 git 跟踪。因为 nginx 端口配置时删除了ssl,以后用 certbot --nginx 会自动重写ngixn配置文件。自动改动后,nginx -t仍然返回ok,但其实已经有错误了。