websocket cors nginx 配置
时间: 2024-10-08 13:22:53 浏览: 52
WebSocket跨域资源共享(Cross-Origin Resource Sharing, CORS)是在Web浏览器的同源策略限制下,允许服务器通过HTTP头部设置特定规则,使得来自不同源(协议、域名或端口)的网页可以互相通信的技术。当使用WebSocket与非同源服务器通信时,如果没有正确的CORS配置,浏览器会阻止连接。
在Nginx配置中处理WebSocket和CORS通常涉及以下几个步骤:
1. **开启WebSocket支持**:
Nginx本身并不直接支持WebSocket,你需要安装第三方模块如`ngx_http_upstream_proxy_protocol_module`,并启用它。
```nginx
http {
# 其他配置...
proxy_protocol on;
}
```
2. **创建WebSocket专用的location块**:
使用`proxy_pass`指令,并指定WebSocket服务器地址。
```nginx
server {
listen 80; # 或者443
location /ws {
proxy_pass http://your-backend-server:8080; # 后端WebSocket服务地址
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
add_header 'Access-Control-Allow-Origin' '*'; # 允许所有来源
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
```
这里的`add_header`设置了CORS允许的头信息,`*`表示允许所有来源访问。
3. **处理OPTIONS预检请求**:
对于CORS,浏览器会在实际发送WebSocket请求前先发送一个`OPTIONS`请求检查是否允许跨域,Nginx需要正确响应这个请求。
```nginx
location = /ws {
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000; # 设置缓存时间
add_header 'Content-Length' 0;
return 204;
}
}
```
阅读全文