trojan相关

nginx配置

trojan是采用https模拟的协议, 在交互的时候采用了ssl证书的加密。

所以trojan自己在接收请求的时候, 会直接开始验证ssl证书。

寻常在部署单网站的时候, 就直接把trojan作为443端口的监听者就好了。

但是在部署多域名共享ip的时候, 又回想起了nginx “Server Blocks”的好。

nginx.conf

因为trojan需要保留ssl证书加密的状态, 所以不能在nginx层直接解开加密。

需要使用nginx的stream模块进行转发。

user  www-data www-data;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

stream {
        map $ssl_preread_server_name $backend_name {
                *.* trojan; # 需要和trojan所使用的证书相同
                default web;
        }
        upstream trojan {
                server 127.0.0.1:43986; # 转发至trojan所在端口
        }
        upstream web {
                server 127.0.0.1:1443; # 需要将其他web端口错开
        }
        server {
                listen 443 reuseport;
                listen [::]:443 reuseport;
                proxy_pass $backend_name;
                ssl_preread on;
        }
}

http { # 在http中引入其他web服务的配置
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /nginxweb/nginx-access.log;
    error_log /nginxweb/nginx-error.log;

    sendfile        on;
    keepalive_timeout  120;
    client_max_body_size 20m;
    gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

其他web服务

在 /etc/nginx/conf.d/ 中, 我们可以写其他的web配置。

server {
        listen 80;
        listen [::]:80;
        server_name *.*;  # 替换为你的域名
        rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    listen 1443 ssl;  # 可以根据
    server_name *.*;  # 替换为你的域名
    root /home/ubuntu/blog/webroot;

    # 这里替换为ssl证书的位置
    ssl_certificate **;
    ssl_certificate_key **; 

    # 转发的服务内容
    location / { 
        proxy_pass http://localhost:5006/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}