From 651cff5d79bdc665d438ae31a79996e91f7faa73 Mon Sep 17 00:00:00 2001 From: Samuel Huang Date: Sun, 25 Aug 2024 13:44:41 +1000 Subject: [PATCH] Initial support for SPLITHTTP --- Dockerfile | 4 ++-- run.sh | 48 +++++++++++++++++++++++------------------------ site-ssl.conf.tpl | 2 ++ 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index d78ab62..1235eb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,13 +10,13 @@ RUN git clone https://github.com/XTLS/Xray-core.git . && \ go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main -FROM alpine:3.20 +FROM nginx:stable-alpine3.20 ARG ACMEVER='2.9.0' COPY --from=builder /go/src/XTLS/Xray-core/xray /usr/local/bin/ -RUN apk add --no-cache bash nginx openssl curl socat jq moreutils +RUN apk add --no-cache bash openssl curl socat jq moreutils RUN cd /root; curl -sSL "https://github.com/acmesh-official/acme.sh/archive/refs/tags/${ACMEVER}.tar.gz"|tar zxvf - RUN cd /root; ln -s acme.sh-${ACMEVER} acme.sh; mkdir .acme.sh diff --git a/run.sh b/run.sh index cd9c373..b38cf95 100755 --- a/run.sh +++ b/run.sh @@ -9,31 +9,31 @@ XCONF=/tmp/server-xray.json usage() { echo "server-xray " - echo " --ltx [p=443,]d=domain.com,u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]]" - echo " --ltt [p=443,]d=domain.com,u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]]" - echo " --lttw [p=443,]d=domain.com,u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" - echo " --ltpw [p=443,]u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" - echo " --lttg [p=443,]d=domain.com,u=id[:level[:email]],s=svcname" - echo " --ltpg [p=443,]u=id[:level[:email]],s=svcname" - echo " --mtt [p=443,]d=domain.com,u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]]" - echo " --mttw [p=443,]d=domain.com,u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" - echo " --mtpw [p=443,]u=id[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" - echo " --ttt [p=443,]d=domain.com,u=psw[:level[:email]][,f=[fb-host]:fb-port:[fb-path]]" - echo " --tttw [p=443,]d=domain.com,u=psw[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" - echo " --ttpw [p=443,]u=psw[:level[:email]][,f=[fb-host]:fb-port:[fb-path]],w=/webpath" -# echo " --ssa [port=443,]user=password1:method1[,user=password2:method2]" -# echo " --sst [port=443,]user=passwd,method=xxxx" - echo " --ng-opt [p=443,]d=domain0.com[,d=domain1.com][...]" - echo " --ng-proxy [d=domain0.com,][d=domain1.com][...][h=127.0.0.1,]p=port-backend,l=location,n=ws|grpc" - echo " -u|--user u=id0[:level[:email]][,u=id1][...]" - echo " -k|--hook [Optional] DDNS update or notifing URL to be hit" - echo " -r|--request-domain [Optional] Domain name to request for letsencrypt cert" - echo " -c|--cert-home [Optional] Reading TLS certs from folder //" - echo " -i|--stdin [Optional] Read config from stdin instead of auto generation" - echo " -d|--debug [Optional] Start in debug mode with verbose output" + echo " --lx [p=443,]d=domain.com,u=id[:level[:email]]" + echo " --lt [p=443,]d=domain.com,u=id[:level[:email]]" + echo " --ltw [p=443,]d=domain.com,u=id[:level[:email]],w=/wspath" + echo " --lpw [p=443,]u=id[:level[:email],]w=/wspath" + echo " --ltg [p=443,]d=domain.com,u=id[:level[:email]],s=svcname" + echo " --lpg [p=443,]u=id[:level[:email]],s=svcname" + echo " --lts [p=442,]d=domain.com,u=id[:level[:email]],p=/path" + echo " --lps [p=442,]u=id[:level[:email],]p=/path" + echo " --mt [p=443,]d=domain.com,u=id[:level[:email]]" + echo " --mtw [p=443,]d=domain.com,u=id[:level[:email]],w=/webpath" + echo " --mpw [p=443,]u=id[:level[:email]],w=/webpath" + echo " --tt [p=443,]d=domain.com,u=psw[:level[:email]]" + echo " --ttw [p=443,]d=domain.com,u=psw[:level[:email]],w=/webpath" + echo " --tpw [p=443,]u=psw[:level[:email]],w=/webpath" + echo " --ng-opt [p=443,]d=domain0.com[,d=domain1.com][...]" + echo " --ng-proxy [d=domain0.com,][d=domain1.com][...][h=127.0.0.1,]p=port-backend,l=location,n=ws|grpc|splt" + echo " -u|--user u=id0[:level[:email]][,u=id1][...]" + echo " -k|--hook [Optional] DDNS update or notifing URL to be hit" + echo " -r|--request-domain [Optional] Domain name to request for letsencrypt cert" + echo " -c|--cert-home [Optional] Reading TLS certs from folder //" + echo " -i|--stdin [Optional] Read config from STDIN instead of auto generation" + echo " -d|--debug [Optional] Start in debug mode with verbose output" } -TEMP=`getopt -o u:k:r:c:di --long user:,hook:,request-domain:,cert-home:,ltx:,ltt:,lttw:,ltpw:,mtt:,mttw:,mtpw:,ttt:,tttw:,ttpw:,lttg:,ltpg:,ssa:,sst:,ng-opt:,ng-proxy:,stdin,debug -n "$0" -- $@` +TEMP=`getopt -o u:k:r:c:di --long user:,hook:,request-domain:,cert-home:,lx:,lt:,ltw:,lpw:,mt:,mtw:,mpw:,tt:,ttw:,tpw:,ltg:,lpg:,ng-opt:,ng-proxy:,stdin,debug -n "$0" -- $@` if [ $? != 0 ] ; then usage; exit 1 ; fi eval set -- "$TEMP" @@ -63,7 +63,7 @@ while true ; do UOPT+=("$2") shift 2 ;; - --ltx|--ltt|--lttw|--ltpw|--lttg|--ltpg|--mtt|--mttw|--mtpw|--ttt|--tttw|--ttpw) + --lx|--lt|--ltw|--lpw|--ltg|--lpg|--mt|--mtw|--mpw|--tt|--ttw|--tpw) SVC=`echo $1|tr -d '\-\-'` SVCMD+=("${DIR}server-${SVC}.sh $2") shift 2 diff --git a/site-ssl.conf.tpl b/site-ssl.conf.tpl index 0b6fed8..126b7ea 100644 --- a/site-ssl.conf.tpl +++ b/site-ssl.conf.tpl @@ -1,4 +1,5 @@ server { + listen NGPORT quic reuseport; listen NGPORT ssl; listen [::]:NGPORT ssl; http2 on; @@ -7,6 +8,7 @@ server { ssl_certificate_key PRVKEYFILE; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; + add_header Alt-Svc 'h3=":443"; ma=86400'; client_header_timeout 1071906480m; keepalive_timeout 1071906480m;