簡體   English   中英

APACHE 反向代理中的 Web 插座

[英]Web Socket in APACHE Reverse Proxy

我在后面運行兩台服務器和 AEBS 基站。 Server1 運行 10.12.6 和 Server 5.3.1,並使用 webapps 執行反向代理,如前體.ca 教程所述。 這使我只有一個外部 IP 地址,其中 server1.mydomain 和 server2.mydomain 在內部進行分發。 這工作正常.. 但在 server2 上我運行 Filemaker Webdirect,它使用 web sockets。 所以我在瀏覽器中得到一個 wss:// 錯誤。 我寫的 web 應用程序;

來自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

顯然輸入我自己的IP server2地址及其名稱..

但是 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] AH0111閱讀反應

在我閱讀的瀏覽器中

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

關於在哪里擺弄的任何提示。 你的皮埃爾

已經很久了,所以可能已經解決了。

我只是遇到了同樣的問題。 我在我的環境中使用了 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 環境有所幫助。

我正在使用 apache,並且安全連接在代理處停止,所以我想如果您的 FileMaker 服務器使用安全連接,您可以通過將 ws 更改為 wss、80 到 443 等來修改我正在使用的虛擬主機配置(如下)。 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM