-
Notifications
You must be signed in to change notification settings - Fork 0
/
2_nginx.conf
153 lines (131 loc) · 6.94 KB
/
2_nginx.conf
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#user nobody nogroup; #表示以默认用户(root)运行。若取消注释,注意修改为相应权限的用户与组。
worker_processes auto;
error_log /var/log/nginx/error.log; #错误日志的文件地址
pid /run/nginx.pid;
events {
worker_connections 1024;
}
stream {
map $ssl_preread_server_name $backend_name {
zv.xx.yy vless; #zv.xx.yy 为对应 VLESS+Vision+TLS 的域名,修改为自己的。
zt.xx.yy trojan; #zt.xx.yy 为对应 Trojan+TCP+TLS 的域名,修改为自己的。
zh.xx.yy http2; #zh.xx.yy 为对应 HTTP/2 server 的域名,修改为自己的。
}
upstream vless {
server unix:/dev/shm/vless.sock; #转给 VLESS+Vision+TLS 监听进程
}
upstream trojan {
server unix:/dev/shm/trojan.sock; #转给 Trojan+TCP+TLS 监听进程
}
upstream http2 {
server unix:/dev/shm/http2.sock; #转给 HTTP/2 server 监听进程
}
server {
listen 443;
listen [::]:443; #无 IPv6,此项可删除。
ssl_preread on;
proxy_pass $backend_name;
proxy_protocol on; #启用 PROXY protocol 发送(全局模式)
}
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #访问日志的文件地址
sendfile on;
keepalive_timeout 65;
server {
listen 80;
listen [::]:80; #无 IPv6,此项可删除。
return 301 https://$host$request_uri; #HTTP 自动跳转 HTTPS,让网站看起来更真实。
}
server {
listen unix:/dev/shm/h2c.sock http2 proxy_protocol; #使用 H2C server 监听进程,且开启 PROXY protocol 接收。(仅版本小于 v1.25.1 配置,否则必须删除。)
listen unix:/dev/shm/h1h2c.sock proxy_protocol; #使用 H2C server 及 HTTP/1.1 server 监听进程,且开启 PROXY protocol 接收。(仅版本不小于 v1.25.1 配置,否则必须删除。)
http2 on; #仅版本不小于 v1.25.1 配置,否则必须删除。
set_real_ip_from unix:;
real_ip_header proxy_protocol;
location /SALdGZ9k { #与 Shadowsocks+gRPC 应用中 serviceName 对应
if ($request_method != "POST") {
return 404;
} #POST 协商失败时返回 404
client_body_buffer_size 1m;
client_body_timeout 1h;
client_max_body_size 0;
grpc_pass grpc://127.0.0.1:2011; #转发给本机 Shadowsocks+gRPC 监听端口
grpc_read_timeout 1h;
grpc_send_timeout 1h;
grpc_set_header Host $host;
grpc_set_header X-Real-IP $remote_addr;
}
location / {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; #启用 HSTS
root /var/www/html; #修改为自己存放的 WEB 文件路径
index index.html index.htm;
}
}
server {
listen unix:/dev/shm/h1.sock proxy_protocol; #使用 HTTP/1.1 server 监听进程,且开启 PROXY protocol 接收。
set_real_ip_from unix:;
real_ip_header proxy_protocol;
location / {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; #启用 HSTS
root /var/www/html; #修改为自己存放的 WEB 文件路径
index index.html index.htm;
}
} #仅版本小于 v1.25.1 配置,否则必须删除。
server {
listen unix:/dev/shm/http2.sock ssl http2 proxy_protocol; #使用 HTTP/2 server 监听进程,且开启 PROXY protocol 接收。(仅版本小于 v1.25.1 配置,否则必须删除。)
#listen unix:/dev/shm/http2.sock ssl proxy_protocol; #使用 HTTP/2 server 监听进程,且开启 PROXY protocol 接收。(仅版本不小于 v1.25.1 配置,否则必须删除。)
#http2 on; #仅版本不小于 v1.25.1 配置,否则必须删除。
set_real_ip_from unix:;
real_ip_header X-Forwarded-For;
ssl_certificate /home/tls/zh.xx.yy/zh.xx.yy.crt; #换成自己的证书,绝对路径。
ssl_certificate_key /home/tls/zh.xx.yy/zh.xx.yy.key; #换成自己的密钥,绝对路径。
ssl_protocols TLSv1.2 TLSv1.3; #若使用 OpenSSL 库,TLSv1.3 需要 OpenSSL 库的版本不小于 1.1.1 编译才支持。
ssl_prefer_server_ciphers on; #优先使用服务端的密码套件。(对如下 TLSv1.2 协议的密码套件有效)
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305; #若证书为 RSA 证书,所有 ECDSA 改为 RSA。
ssl_ecdh_curve secp521r1:secp384r1:secp256r1:x25519; #若使用 OpenSSL 库,此项的配置参数需要 OpenSSL 库的版本不小于 3.0.0 编译才支持。
location = /HALdGZ9k { #与 VMess+WebSocket 应用中 path 对应
if ($http_upgrade != "websocket") {
return 404;
} #WebSocket 协商失败时返回 404
proxy_redirect off;
proxy_pass http://unix:/dev/shm/vmessws.sock; #转发给本机 VMess+WebSocket 监听进程
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /SALdGZ9k { #与 Shadowsocks+gRPC 应用中 serviceName 对应
if ($request_method != "POST") {
return 404;
} #POST 协商失败时返回 404
client_body_buffer_size 1m;
client_body_timeout 1h;
client_max_body_size 0;
grpc_pass grpc://127.0.0.1:2011; #转发给本机 Shadowsocks+gRPC 监听端口
grpc_read_timeout 1h;
grpc_send_timeout 1h;
grpc_set_header Host $host;
grpc_set_header X-Real-IP $remote_addr;
}
location / {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; #启用 HSTS
root /var/www/html; #修改为自己存放的 WEB 文件路径
index index.html index.htm;
}
}
}
#备注:
#1、本示例使用 XTLS Vision 配置(zv.xx.yy)、非 AES 算法的密码套件配置(zt.xx.yy)、套 CDN(zh.xx.yy) 来避免被封。
#2、本示例使用不同域名来实现介绍中各应用,其办法如下:
#1)、VLESS+Vision+TLS 仅使用 zv.xx.yy 域名。
#2)、Trojan+TCP+TLS 仅使用 zt.xx.yy 域名。
#3)、VMess+WebSocket+TLS 仅使用 zh.xx.yy 域名。
#4)、Shadowsocks+gRPC+TLS 可随意使用 zt.xx.yy 域名与 zh.xx.yy 域名。
#3、本示例的 SNI 分流自带限定域名连接(包括禁止以 IP 方式访问网站)。