odoo.addons.bus.websocket: 400 Bad Request: Empty or missing header(s): upgrade (使用nginx配置WebSocket)

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包来实现。

  1. 安装ngx_http_upstream_module和ngx_http_proxy_module模块
$ sudo apt-get update
$ sudo apt-get install nginx-extras
  1. 配置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。

  1. 重启和测试Nginx
    完成配置后,请使用以下命令检查Nginx:
$ sudo nginx -t

如果测试通过,可以重启Nginx:

$ sudo service nginx restart

现在WebSocket可以通过Nginx进行代理了。

你可能感兴趣的:(Odoo,Odoo16,websocket,nginx,网络协议)