Im正在运行默认的SpringBoot嵌入式Tomcat应用程序服务器。我从这台服务器提供一个rest API和一个websocket端点。
在此之前,已设置具有以下配置的NGINX代理:
include /usr/local/etc/nginx/sites-enabled/*;
http {
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 80 default_server;
server_name SERVER_NAME;
root /var/www;
underscores_in_headers on;
location / {
index index.html;
try_files $uri /index.html;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://SERVER_URL:9090/;
}
location /websocket {
proxy_pass http://SERVER_URL:9090/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
events{}
Web应用程序和REST API可以正常工作。 但是websocket连接不起作用。当我尝试连接到套接字端点时,tomcat应用程序服务器上引发以下错误。
2018-07-17 11:53:05.516 ERROR 5 --- [nio-9090-exec-1] o.s.w.s.s.s.DefaultHandshakeHandler : Handshake failed due to invalid Upgrade header: null
因此,似乎是从HTTP升级到WS协议的升级标头, 没有传递到应用程序服务器。这可以通过以下方法解决:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
但是它不起作用。如果我尝试绕过NGINX直接连接到websocket地址,则会成功建立连接。 我的问题是:
随时询问有关该系统的更多信息。