Nginx 如何反代 wss 连接? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Llesue
V2EX    NGINX

Nginx 如何反代 wss 连接?

  •  
  •   Llesue 2023-05-20 01:06:04 +08:00 2846 次点击
    这是一个创建于 875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我当前的设置时这样的,抄了很多教程,但是不懂原理感觉抄也是白抄,不管用。

    server { listen 86; server_name box.example.com file.example.com files.example.com pan.example.com; if ($scheme = http){ return 301 https://$server_name:88$request_uri; } } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 88 ssl http2; server_name box.example.com; error_page 497 301 =307 https://$host:$server_port$request_uri; ssl_certificate /etc/letsencrypt/live/box.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/box.example.com/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; location / { proxy_pass http://localhost:8687; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ""; proxy_max_temp_file_size 0; proxy_read_timeout 500s; proxy_connect_timeout 600; proxy_send_timeout 240; } location /api/command/ { proxy_pass http://localhost:8687; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 
    16 条回复    2023-06-08 16:13:19 +08:00
    om2mo
        1
    om2mo  
       2023-05-20 01:47:23 +08:00
    你连域名都没改怎么反代?看上去并没有看教程
    keegan
        2
    keegan  
       2023-05-20 01:55:21 +08:00
    要么自己看看懂,要么直接 问 GPT 吧
    as9567585
        3
    as9567585  
       2023-05-20 02:37:54 +08:00
    Llesue
        4
    Llesue  
    OP
       2023-05-20 08:40:53 +08:00
    @om2mo 域名是我替换的。
    Llesue
        5
    Llesue  
    OP
       2023-05-20 08:42:09 +08:00
    @keegan 我就是高强度 ChatGPT 用户。ChatGPT 回答不了这种问题……
    Llesue
        6
    Llesue  
    OP
       2023-05-20 08:44:04 +08:00
    @as9567585 你要是仔细看我贴出的配置,你会发现,我就是这么配置的。
    eudemonwind
        7
    eudemonwind  
       2023-05-20 09:28:33 +08:00 via Android
    同求,想反代谷狗,但是好像会被谷狗识别出来被 nginx 反代了,不给用
    NSAgold
        8
    NSAgold  
       2023-05-20 09:55:18 +08:00
    你这配置应该是没问题的。
    我以前的配法和#3 给的 bing 的是一样的(不过我的没有 set_header Host $host 那行,因为用不到,后端是个 tcp 转 ws 的程序),完全没问题。nginx 出去甚至还能再套层 cloudflare 。
    Llesue
        9
    Llesue  
    OP
       2023-05-20 10:22:09 +08:00
    其实我应该多补充一下:
    1 、不是常规端口,是 http 86 ,https 88 。
    2 、我用的是 filebrowser , 网页访问各项功能都正常,就是 filebrowser 有个命令行工具可以在网页上使用 shell 命令,这些 shell 命令是通过 websocket 传输的。这个功能无法使用,从浏览器调试看是请求不成功:
    ```
    commands.js:12 WebSocket connection to 'wss://box.hideurl.com:88/api/command/?auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoyLCJsb2NhbGUiOiJ6aC1jbiIsInZpZXdNb2RlIjoibGlzdCIsInNpbmdsZUNsaWNrIjpmYWxzZSwicGVybSI6eyJhZG1pbiI6dHJ1ZSwiZXhlY3V0ZSI6dHJ1ZSwiY3JlYXRlIjp0cnVlLCJyZW5hbWUiOnRydWUsIm1vZGlmeSI6dHJ1ZSwiZGVsZXRlIjp0cnVlLCJzaGFyZSI6dHJ1ZSwiZG93bmxvYWQiOnRydWV9LCJjb21tYW5kcyI6WyJ3YyIsImRmIiwicHdkIiwibG4iLCJndnNoYXJlIiwiYm94LXVzZyIsImxzIiwidHJlZSIsIm12IiwiY3AiLCJybSIsImNhdCIsInRhaWwiLCJncmVwIiwiY2QiLCJ0bGRyIiwibWtkaXIiLCJkdSIsImZpbmQiLCJjaG93biIsInZuc3RhdCIsIm1hbiIsIndnZXQiLCJyY2xvbmUiLCJpZmNvbmZpZyIsImRhdGUiLCJ3aG9hbWkiLCJuZXRzdGF0Il0sImxvY2tQYXNzd29yZCI6ZmFsc2UsImhpZGVEb3RmaWxlcyI6dHJ1ZSwiZGF0ZUZvcm1hdCI6ZmFsc2V9LCJpc3MiOiJGaWxlIEJyb3dzZXIiLCJleHAiOjE2ODQ1NTYwMjMsImlhdCI6MTY4NDU0ODgyM30.gRQ53CHiiESvt7YZN387h5u6pXrvI6jDwoVBTSW_qxg' failed:
    ```
    3 、我的配置里第一个 location 是 filebrowser 的。第二个 location 是 websocket 的。但是 wss 连接还是不通……
    4 、ChatGPT 对此类问题束手无策,会重复无用信息车轱辘话。

    ### 题外话:
    大家可以测试一下问 ChatGPT
    ```
    http://damn.com:86 怎么用 nginx 跳转到 https://damn.com:88
    ```
    ChatGPT 会给你一个错误答案。然后你继续问:
    ```
    你仔细看看你的答案正确吗?
    ```
    ChatGPT 会说:你说的对,我犯了一个错误。正确的配置应该是这样……(把上面错误的代码再发一遍),如果你继续说它的答案不正确,它还会道歉,然后原封不动在给你发一遍刚才的配置……哈哈
    githmb
        10
    githmb  
       2023-05-20 21:57:42 +08:00
    proxy_set_header Connection "Upgrade";
    cquan
        11
    cquan  
       2023-05-20 23:05:47 +08:00
    我设置过,怎么设都不行,然后发现好像不是 nginx 的问题,是 python 的 uwsgi 问题。
    julyclyde
        12
    julyclyde  
       2023-05-21 10:59:14 +08:00
    关键在于那两个 header
    zanelee
        13
    zanelee  
       2023-06-05 14:07:18 +08:00
    command 的那个 location 加一下 proxy_set_header Connection "Upgrade";试试
    zanelee
        14
    zanelee  
       2023-06-05 14:26:05 +08:00
    @zanelee 不好意思,看下了前面配了 map
    zanelee
        15
    zanelee  
       2023-06-05 15:11:07 +08:00
    去试了一下,出现了这种情况,我的是因为是跨域。filebrowser 的日志也会报错 websocket: request origin not allowed by Upgrader.CheckOrigin 。看了 OP 后面给出的控制台报错的 url 和 nginx 配置的 url ,感觉就是因为这个 wss 请求的时候请求头的 Orgin 和代理过去的请求头的 Host 不一致造成的。
    tyit
        16
    tyit  
       2023-06-08 16:13:19 +08:00
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";



    试试这两个
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2672 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:33 PVG 21:33 LAX 06:33 JFK 09:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86