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;
}
}