【问题标题】:Web Socket in APACHE Reverse ProxyAPACHE 反向代理中的 Web 套接字
【发布时间】:2020-08-05 15:12:51
【问题描述】:

我在后面运行两台服务器和 AEBS 基站。 Server1 运行 10.12.6 和 Server 5.3.1 并使用 webapps 执行反向代理,如前体.ca 教程中所述。 这使我只有一个外部 IP 地址,其中 server1.mydomain 和 server2.mydomain 在内部进行分发。 这工作正常.. 但在 server2 上我运行 Filemaker Webdirect,它使用 Web 套接字。所以我在浏览器中得到一个 wss:// 错误。 我写的网络应用程序;

来自http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

RewriteEngine On

RewriteCond %{HTTPS} =off
RewriteRule . - [E=protocol:http,E=port:80]
RewriteCond %{HTTPS} =on
RewriteRule . - [E=protocol:https,E=port:443]

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPreserveHost On
ProxyPassReverse / http://1.2.3.4:443/
ProxyPass / http://1.2.3.4:443/
ServerName filemaker.precursor.ca

显然把我自己的server2的IP地址和它的名字..

但是 web 套接字 wss://server2.mydomain 不起作用.. 并且 web 直接失败。

我可以登录,但是一旦我打开一个 wss 连接,它就不再工作了。 .这是一个apache mod_proxy错误..

在我阅读的 apache 错误日志中 [Sun Apr 19 21:58:04.846046 2020] [proxy_http:error] [pid 598] (70008)部分结果有效但处理不完整:[client 189.62.112.162:49213] AH01110: error reading response

在我阅读的浏览器中

WebSocket connection to 'wss://fmserver.embatek.com.br/fmi/webd/PUSH?v-uiId=1&v-pushId=341172cf-5d45-454d-972e-3029de5807fa&X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.3.2.vaadin1-javascript&X-Atmosphere-Transport=websocket&X-Atmosphere-TrackMessageSize=true&Content-Type=application/json;%20charset=UTF-8&X-atmo-protocol=true' failed: Unexpected response code: 500

关于在哪里摆弄的任何提示。 你的 皮埃尔

【问题讨论】:

    标签: apache websocket reverse-proxy


    【解决方案1】:

    时间久了,可能已经解决了。

    我刚刚遇到了同样的问题。我在我的环境中使用了 nginx,但是通过将以下值传递给服务器来解决它。

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

    nginx中的最终代码如下

    upstream filemakerserver-webdirect-upstream {
      server xxxxxx.xxx:443;
    }
    
    server {
      listen 80;
      server_name yyyyyy.yyy;
    
      if ($host = yyyyyy.yyy) {
        return 301 https://$host$request_uri;
      }
    
      return 404;
    }
    
    server {
      listen 443 http2 ssl;
      server_name yyyyyy.yyy;
    
      location / {
        try_files $uri @filemakerserver-webdirect-upstream;
      }
    
      location @filemakerserver-webdirect-upstream {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
        proxy_pass https://branch-office;
      }
    
      ssl_certificate /etc/letsencrypt/live/yyyyyy.yyy/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/yyyyyy.yyy/privkey.pem;
    }
    

    以下是我用日语写的一篇文章。

    https://qiita.com/Hi_Noguchi/items/82bc17913b646bd6583f

    我希望这对 apache 环境有所帮助。

    【讨论】:

      【解决方案2】:

      我使用的是 apache,并且安全连接在代理处停止,所以我想如果您的 FileMaker 服务器使用的是安全连接。 10.1.2.3 是 FileMaker 服务器的内部地址。这里可能有一些多余的东西,但它有效

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
        ServerName my.external.server.name
      
        RewriteEngine on
        RewriteCond ${HTTP:Upgrade} websocket [NC]
        RewriteCond ${HTTP:Connection} upgrade [NC]
        RewriteRule /(.*) "ws://10.1.2.3:80/$1" [P,L]
      
        # <Location />
          ProxyPreserveHost On
      
          ProxyPass "/fmi/webd/PUSH" "ws://10.1.2.3:80/fmi/webd/PUSH"
          ProxyPassReverse "/fmi/webd/PUSH" "ws://10.1.2.3:80/fmi/webd/PUSH"
      
          ProxyPass / http://10.1.2.3:80/
          ProxyPassReverse / http://10.1.2.3:80/
      
          # Order allow,deny
          # Allow from all
        # </Location>
      SSLCertificateFile /etc/letsencrypt/live/my.external.server.name/cert.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/my.external.server.name/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      SSLCertificateChainFile /etc/letsencrypt/live/my.external.server.name/chain.pem
      </VirtualHost>
      </IfModule>
      

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 2015-08-02
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多