Spring Boot 在 WebSocket 上使用 Stomp:由于升级标头无效,握手失败:null

Ray*_*ski 2 java apache spring spring-websocket angular

我在 Spring Boot 应用程序中使用 ws(非安全 WebSocket)。一旦客户端尝试连接到服务器,就会出现以下错误:

\n

Handshake failed due to invalid Upgrade header: null

\n

Spring Boot 应用程序在 Apache 代理后面的 Ubuntu 服务器上运行。Apache配置如下:

\n
<VirtualHost *:80>\n    DocumentRoot /var/www/myapp/public/\n    ServerAdmin webmaster@localhost\n    ServerName  app.myapp.biz\n\n    RewriteEngine       On\n    RewriteCond         %{HTTP:Upgrade}^websocket$ [NC,OR]\n    RewriteCond         %{HTTP:Connection}^upgrade$ [NC]\n    RewriteRule         .* "ws:/127.0.0.1:8096/$1" [P,QSA,L]\n\n    ProxyPreserveHost   On\n    ProxyRequests       Off\n    ProxyPass           / http://127.0.0.1:8096/\n    ProxyPassReverse    / http://127.0.0.1:8096/\n    RequestHeader       set X-Forwarded-Proto http\n    RequestHeader       set X-Forwarded-Port 80\n\n    SetEnv mongo_username           aUser\n    SetEnv mongo_password           aPassword\n</VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n

application.properties的如下:

\n
debug=false\nserver.port=8096\nserver.address=127.0.0.1\n\nserver.forward-headers-strategy=native\nserver.tomcat.use-relative-redirects=true\nserver.tomcat.remoteip.protocol-header=x-forwarded-proto\nserver.tomcat.remoteip.remote-ip-header=x-forwarded-for\nserver.tomcat.remoteip.port-header=x-forwarded-port\n
Run Code Online (Sandbox Code Playgroud)\n

当在我的开发机器上运行应用程序时,一切正常。一旦部署到服务器上就会出现上述错误。我\xe2\x80\x99已经用谷歌搜索了很多,但无法\xe2\x80\x99找到针对这个问题的具体内容。我希望有人能帮帮忙。

\n

信息:尝试连接的前端应用程序是一个 Angular 应用程序,使用ng2-stompjs.

\n

Ray*_*ski 6

我终于找到了错误。语句中的顺序apache.conf确实很重要!工作conf文件如下所示:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName  app.myapp.biz

    ProxyPreserveHost   On
    ProxyRequests       Off
    ProxyPass           / http://127.0.0.1:8096/
    ProxyPassReverse    / http://127.0.0.1:8096/

    RewriteEngine       On
    RewriteCond         %{HTTP:Upgrade} websocket [NC]
    RewriteCond         %{HTTP:Connection} upgrade [NC]
    RewriteRule         ^/?(.*) "ws://127.0.0.1:8096/$1" [P,L]

    SetEnv mongo_username           aUser
    SetEnv mongo_password           aPassword
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)