如何使用NGSX作为使用WebSockets的Wicket应用程序的代理

时间:2015-08-29 14:25:42

标签: nginx websocket jetty wicket

我有一个使用WebSockets的Wicket应用程序,它在端口9090上的Jetty中运行。我想要做的是使用NGINX作为代理,这样用户就可以使用标准的80端口访问应用程序。

使用此主题中的说明:

How do I configure nginx as proxy to jetty?

我已将以下条目添加到/ etc / nginx / sites-available / default:

location /myapp {
    proxy_pass       http://localhost:9090/myapp;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

但现在当我通过80端口打开应用程序时,我可以在Chrome控制台中看到错误:

WebSocket连接到'ws://xxx.xxx.xxx.xxx/myapp/wicket/websocket?pageId = 2& wicket-ajax-baseurl = whatmovie%3F2& wicket-app-name = myapp'失败:错误在WebSocket握手期间:意外的响应代码:404

WebSockets不再有效。所以我一直在谷歌上搜索这个帖子:

NGINX to reverse proxy websockets AND enable SSL (wss://)?

所以我在NGINX配置中添加了以下条目:

location /myapp/wicket/websocket {
    proxy_pass http://localhost:9090/myapp/wicket/websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

在我访问应用程序之后,控制台中不再出现任何错误,我可以在日志中看到创建了websockets。不幸的是,客户端和应用程序之间的通信似乎不再起作用。任何人都可以帮我吗?

我的配置详情:

  • Debian 7.8
  • jetty-9.0.6.v20130930
  • Wicket 7.0.0 with wicket-native-websocket-jetty9

1 个答案:

答案 0 :(得分:0)

原来,将nginx升级到版本1.8.0-1解决了这个问题。这是我/etc/nginx/conf.d/default.conf的内容:

server {
    listen       80;
    server_name  localhost;

    location /app {
        proxy_pass             http://localhost:9090/app;
        proxy_set_header       Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

}