@ServerEndpoint("/websocket.ws/{userId}")me.add(new UrlSkipHandler("^/websocket.ws", false));Nginx 线上配置:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/xxx.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/xxx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS......;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name xxx.com www.xxx.com;
access_log /xxx.com_nginx.log combined;
index index.html index.htm index.jsp;
root /xxx.com/webapp;
if ($host != www.xxx.com) { return 301 $scheme://www.xxx.com$request_uri; }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
location /websocket.ws {
proxy_pass http://127.0.0.1:8099/websocket.ws;
proxy_connect_timeout 4s;
proxy_read_timeout 300s;
proxy_send_timeout 10s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~ {
proxy_pass http://127.0.0.1:8099;
include proxy.conf;
}
}线上连接一直报404,本地开发环境是正常的
=======================================================
解决了,将 ~ 改 ^~,^~ 开头表示uri以某个常规字符串开头。
location ^~ /websocket.ws/ {
proxy_pass http://127.0.0.1:8099;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}如下正确配置:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/xxx.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/xxx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS......;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name xxx.com www.xxx.com;
access_log /xxx.com_nginx.log combined;
index index.html index.htm index.jsp;
root /xxx.com/webapp;
if ($host != www.xxx.com) { return 301 $scheme://www.xxx.com$request_uri; }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
location ^~ /websocket.ws/ {
proxy_pass http://127.0.0.1:8099;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~ {
proxy_pass http://127.0.0.1:8099;
include proxy.conf;
}
}
proxy_set_header Upgrade $http_upgrade;
前面插一行试试