Install v2ray binary by script # Install bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) # Remove bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --remove V2ray configuration mkdir -p /etc/v2ray ln -s /usr/local/etc/v2ray/config.json /etc/v2ray/config.json vim /etc/v2ray/config.json ----- { "log": { "loglevel": "warning", "error": "/var/log/v2ray/error.log", "access": "/var/log/v2ray/access.log" }, "inbounds": [ { "listen": "127.0.0.1", "port": 2001, "protocol": "vmess", "settings": { "clients": [ { "id": "46b1ad89-1234-5678-9012-fc537a66656c" } ] }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "path": "/fc537a66" } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } ], "routing": { "rules": [ { "type": "field", "protocol": [ "bittorrent" ], "outboundTag": "blocked" } ] }, "outbounds": [ { "protocol": "freedom", "settings": {} }, { "tag": "blocked", "protocol": "blackhole", "settings": {} } ] } ----- Systemd configuration systemctl daemon-reload systemctl enable --now v2ray.service Caddyfile vim /etc/caddy/Caddyfile ----- { acme_dns cloudflare <your-cf-key> order reverse_proxy before route admin off log { output file /var/log/caddy/error.log level ERROR } } :80 { redir https://{host}{uri} permanent } your-domain.com { tls { ciphers TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 curves x25519 secp521r1 secp384r1 secp256r1 alpn http/1.1 h2 } @vmess-websocket { path /fc537a66 header Connection *Upgrade* header Upgrade websocket } reverse_proxy @vmess-websocket 127.0.0.1:2001 @host { your-domain.com } route @host { header { Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" } reverse_proxy https://reverse-proxy-source-domain.com { header_up Host {upstream_hostport} header_up X-Forwarded-Host {host} } } } -----