odoo部署了Nginx后附件没办法上传,报错:
odoo.addons.bus.websocket: 400 Bad Request: Empty or missing header(s): upgrade
究其原因:proxy_set_header Upgrade、proxy_set_header Connection 默认是不会自动转发的,需要在配置文件中增加流量转发处理。
如何在nginx中启用WebSocket?
要启用WebSocket,我们必须在Nginx上配置WebSocket模块。这可以通过安装含有ngx_http_upstream_module和ngx_http_proxy_module的Nginx包来实现。
- 安装ngx_http_upstream_module和ngx_http_proxy_module模块
$ sudo apt-get update
$ sudo apt-get install nginx-extras
- 配置Nginx虚拟主机
在Nginx的配置文件中,我们配置一个包含selectors元素的upstream定义,其中包含一个我们想要代理的服务器列表。以下是一个基本的WebSocket启用Nginx虚拟主机的示例:
upstream websocket {
server localhost:8069;
}
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # 启用支持websocker连接
proxy_set_header Connection "upgrade"; # 启用支持websocker连接
client_max_body_size 20m; # 控制文件上传大小,本例:20M
}
}
在上面的配置中,我们指定了WebSocket服务器的服务器名称和端口号,并设置了代理_pass语句以重定向所有流量。我们还指定了一个proxy_set_header命令,以通过升级HTTP版本升级协议,而不是使用HTTP1.0或HTTP1.1。
- 重启和测试Nginx
完成配置后,请使用以下命令检查Nginx:
$ sudo nginx -t
如果测试通过,可以重启Nginx:
$ sudo service nginx restart
现在WebSocket可以通过Nginx进行代理了。