#来源
https://github.com/XTLS/Xray-core/discussions/4118
#准备两个域名
reality.yourdomain1.com (用于reality,关闭小云朵)
cdn.yourdomain2.com(用于过CDN,打开小云朵)
#cloudflare要打开ws和grpc
#安装必要组件
apt install -y curl sudo
#安装xray
bash -c “$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)” @ install -u root
#xray配置
{ "log": { "loglevel": "info" }, "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ { "type": "field", "ip": [ "geoip:cn", "geoip:private" ], "outboundTag": "block" } ] }, "inbounds": [ { "listen": "0.0.0.0", "port": 443, "protocol": "vless", "settings": { "clients": [ { "id": "", // run `xray uuid` to generate "level": 0, "flow": "xtls-rprx-vision" } ], "decryption": "none", "fallbacks": [ { "dest": "8001", //可以修改,保持和第64行的端口一致 "xver": 0 } ] }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "show": false, "target": "8003", "xver": 0, "serverNames": [ "reality.yourdomain1.com" //reality的域名 ], "privateKey": "", // run `xray x25519` to generate "shortIds": [ "" // 0 to f, 必须双数,最长16位,可以留空 ] }, "sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"], "metadataOnly": false, "routeOnly": true } } }, { "listen": "127.0.0.1", "port": 8001, //和第35行的端口保持一致 "protocol": "vless", "settings": { "clients": [ { "id": "", // run `xray uuid` to generate,这是和上面不同的uuid "level": 0 } ], "decryption": "none" }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "host": "", "path": "/cdn", // 自行定义 "mode": "auto" }, "sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"], "metadataOnly": false, "routeOnly": true } } } ], "outbounds": [ { "protocol": "freedom", "tag": "direct" }, { "protocol": "blackhole", "tag": "block" } ] }
#测试配置
xray -test -config /usr/local/etc/xray/config.json
#重启服务
systemctl restart xray && systemctl status xray
#安装acme
apt install socat cron -y && curl https://get.acme.sh | sh && ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh && ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
#切换CA
acme.sh –set-default-ca –server letsencrypt
#申请证书
acme.sh –issue -d reality.yourdomain1.com -d cdn.yourdomain2.com –standalone
#安装证书(一次性申请多个证书的话,只要在下面输入第一个证书名字就可以了)(nginx在xray之后安装的话,第四行命令可以不要)
acme.sh –install-cert -d reality.yourdomain1.com –ecc \
–key-file /etc/ssl/private/private.key \
–fullchain-file /etc/ssl/private/fullchain.cer \
–reloadcmd “systemctl force-reload nginx”
#安装nginx
apt-get install -y gcc g++ libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev wget sudo make curl socat cron && wget https://nginx.org/download/nginx-1.27.3.tar.gz && tar -xvf nginx-1.27.3.tar.gz && cd nginx-1.27.3 && ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_v2_module && make && make install && cd && mkdir /var/log/nginx
#创建service
cat > /etc/systemd/system/nginx.service << EOF [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;' ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5 KillMode=mixed [Install] WantedBy=multi-user.target EOF
#启用service
systemctl daemon-reload && systemctl enable nginx.service
#nginx配置文件
/etc/nginx/nginx.conf
修改两个域名和两个回落域名
#nginx配置
user root; worker_processes auto; error_log /usr/local/nginx/logs/error.log notice; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 获取真实IP的设置 set_real_ip_from 127.0.0.1; map $http_cf_connecting_ip $real_client_ip { default $http_cf_connecting_ip; "" $remote_addr; } real_ip_header X-Real-IP; # 优化参数 sendfile on; server_tokens off; tcp_nodelay on; tcp_nopush on; client_max_body_size 0; gzip on; add_header X-Content-Type-Options nosniff; # SSL 通用配置 ssl_session_cache shared:SSL:16m; ssl_session_timeout 1h; ssl_session_tickets off; ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 1.1.1.1 8.8.8.8 valid=60s; resolver_timeout 2s; # 映射请求头 map $real_client_ip $proxy_forwarded_elem { ~^[0-9.]+$ "for=$real_client_ip"; ~^[0-9A-Fa-f:.]+$ "for=\"[$real_client_ip]\""; default "for=unknown"; } map $http_forwarded $proxy_add_forwarded { default "$proxy_forwarded_elem"; } map $http_upgrade $connection_upgrade { default upgrade; "" close; } server { listen 8003 ssl; http2 on; #reality的域名 server_name reality.yourdomain1.com; ssl_certificate /etc/ssl/private/fullchain.cer; ssl_certificate_key /etc/ssl/private/private.key; location / { proxy_pass https://www.stanford.edu; #第一个回落域名 proxy_set_header Host www.stanford.edu; #第一个回落域名 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; proxy_set_header X-Forwarded-Host $host; } } server { listen 8003 ssl; http2 on; #cdn的域名 server_name cdn.yourdomain2.com; ssl_certificate /etc/ssl/private/fullchain.cer; ssl_certificate_key /etc/ssl/private/private.key; location / { proxy_pass https://www.harvard.edu; #第二个回落域名 proxy_set_header Host www.harvard.edu; #第二个回落域名 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; proxy_set_header X-Forwarded-Host $host; } location /cdn { grpc_pass 127.0.0.1:8001; grpc_set_header Host $host; grpc_set_header X-Real-IP $real_client_ip; grpc_set_header Forwarded $proxy_add_forwarded; grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; grpc_set_header X-Forwarded-Proto $scheme; } } server { listen 80 default_server; server_name _; return 301 https://$host$request_uri; } }
#测试配置文件
nginx -t
#重启服务
systemctl restart nginx && systemctl status nginx
以下为extra配置
出站2:xhttp+Reality 上下行不分离 (上行为 stream-one 模式)
"host": "", "path": "/cdn"
出站3:上行 xhttp+TLS+CDN | 下行 xhttp+Reality
"downloadSettings": { "address": "x.x.x.x", //服务器IP "port": 443, "network": "xhttp", "security": "reality", "realitySettings": { "show": false, "serverName": "reality.yourdonamain1.com", //reality域名 "fingerprint": "chrome", "publicKey": "" //填写与服务端配套的公钥 }, "xhttpSettings": { "host": "", "path": "/cdn", "mode": "auto" } }
出站5:上行 xhttp+Reality | 下行 xhttp+TLS+CDN
"downloadSettings": { "address": "cdn.yourdomain2.com", //cdn的域名 "port": 443, "network": "xhttp", "security": "tls", "tlsSettings": { "serverName": "cdn.yourdomain2.com", //cdn的域名 "allowInsecure": false, "alpn": ["h2"], "fingerprint": "chrome" }, "xhttpSettings": { "host": "cdn.yourdomain2.com", //cdn的域名 "path": "/cdn", "mode": "auto" } }