server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen 443 quic;
    listen [::]:443 ssl;
    listen [::]:443 quic;
    http2 on;
    http3 on;
    http3_hq on;
    quic_retry on;
    quic_gso on;
    server_name id.zeph.my.id;
    ssl_certificate /etc/ssl/private/zeph.my.id.pem;
    ssl_certificate_key /etc/ssl/private/zeph.my.id.key;

    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Real-IP;

    access_log off;
    error_log /dev/null crit;
    # access_log /usr/local/openresty/nginx/logs/xray.access.log;
    # error_log /usr/local/openresty/nginx/logs/xray.error.log;

    add_header alt-svc 'h3=":$server_port"; ma=86400';
    add_header x-quic 'h3';

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location = /robots.txt {
        access_log off;
        log_not_found off;
    }

    location /meow {
        proxy_pass https://http.cat/$status;
    }

    location ~ ^/meow/(?<cat>.*)$ {
        proxy_pass https://http.cat/$cat/;
    }

    rewrite ^/v1/?$ /403.html break;

    location = /403.html {
        access_log off;
        error_log /dev/null crit;
        return 403;
    }

    location /generate_204 {
        access_log off;
        add_header Content-Length 0;
        add_header X-Real-IP $remote_addr;
        return 204;
    }

    location / {
        root /usr/local/openresty/nginx/html;
        index index.html;
    }

    location /vless/ {
        if ($request_uri = "/") {
            return 406;
        }
        rewrite ^/vless/.* /vless-ws break;
        proxy_http_version 1.1;
        proxy_ignore_client_abort on;
        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;
        proxy_set_header X-Forwarded-Server $hostname;
        proxy_set_header Forwarded $proxy_add_forwarded;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_send_timeout 3600s;
        proxy_read_timeout 3600s;
        proxy_connect_timeout 3600s;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 0;
        proxy_pass http://vless-ws;
    }

    location /vmess/ {
        if ($request_uri = "/") {
            return 406;
        }
        rewrite ^/vmess/.* /vmess-ws break;
        proxy_http_version 1.1;
        proxy_ignore_client_abort on;
        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;
        proxy_set_header X-Forwarded-Server $hostname;
        proxy_set_header Forwarded $proxy_add_forwarded;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_send_timeout 3600s;
        proxy_read_timeout 3600s;
        proxy_connect_timeout 3600s;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 0;
        proxy_pass http://vmess-ws;
    }

    location /trojan/ {
        if ($request_uri = "/") {
            return 406;
        }
        rewrite ^/trojan/.* /trojan-ws break;
        proxy_http_version 1.1;
        proxy_ignore_client_abort on;
        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;
        proxy_set_header X-Forwarded-Server $hostname;
        proxy_set_header Forwarded $proxy_add_forwarded;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_send_timeout 3600s;
        proxy_read_timeout 3600s;
        proxy_connect_timeout 3600s;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 0;
        proxy_pass http://trojan-ws;
    }
}
