如何使用 NGINX 作为使用 WebSockets 的 Wicket 应用程序的代理
How to use NGINX as a proxy for Wicket application using WebSockets
我有一个使用 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 控制台中看到一个错误:
与 'ws://xxx.xxx.xxx.xxx/myapp/wicket/websocket?pageId=2&wicket-ajax-baseurl=whatmovie%3F2&wicket-app-name=myapp' 的 WebSocket 连接失败: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-native-websocket-jetty9 的 Wicket 7.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";
}
}
我有一个使用 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 控制台中看到一个错误:
与 'ws://xxx.xxx.xxx.xxx/myapp/wicket/websocket?pageId=2&wicket-ajax-baseurl=whatmovie%3F2&wicket-app-name=myapp' 的 WebSocket 连接失败: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-native-websocket-jetty9 的 Wicket 7.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";
}
}