我有一个使用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。不幸的是,客户端和应用程序之间的通信似乎不再起作用。任何人都可以帮我吗?
我的配置详情:
答案 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";
}
}