【问题标题】:Nginx ssl_preread cannot handle SOCKS 5 Proxy protocolNginx ssl_preread 无法处理 SOCKS 5 代理协议
【发布时间】:2020-08-19 21:32:56
【问题描述】:

我正在尝试通过 Nginx 1.17 中的同一端口运行 SSL 和非 SSL(在我的情况下为 SOCKS 5 代理)协议。根据Nginx document,这非常适用于 SSH。但它不适用于 Socks 代理,它会超时。我相信问题出在ssl_preread on 上,因为当我删除它并将所有流量转发到上游的袜子时,它可以正常工作。 Nginx 在处理 ssl_preread 的 Socks 5 Proxy 时是否有问题?

stream {
    upstream socks {
        server 127.0.0.1:1080; #SOCKS 5 proxy server
    }

    upstream https {
        server 127.0.0.1:8443;
    }

    map $ssl_preread_protocol $upstream {
        default socks;
        "TLSv1.2" https;
        "TLSv1.3" https;
        "TLSv1.1" https;
        "TLSv1.0" https;
    }

    server {
        listen 443;
        proxy_pass $upstream;
        ssl_preread on;
    }
}

【问题讨论】:

    标签: ssl nginx proxy socks pass-through


    【解决方案1】:

    我认为您必须将标头升级和连接传递给代理服务器,请参阅https://nginx.org/en/docs/http/websocket.html

      ...
      map $http_upgrade $connection_upgrade {
          default upgrade;
          ''      close;
      }
    
      server {
         listen 443;
         proxy_pass $upstream;
         ssl_preread on;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $connection_upgrade;
      }
      ...
    

    【讨论】:

    • 问题是当我使用ssl_preread 时,连接没有关闭。但不幸的是,我不能在服务器块内(流中)使用 proxy_http_version、proxy_set_header 和 proxy_set_header。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多