Nginx 如何修复 Unknown "connection_upgrade" Variable 错误
在使用 Websockets 或使用 nginx 配置服务器时,我们可能会在 nginx 配置中遇到 $connection_upgrade
变量。
$connection_upgrade 变量默认不可用。 但是,建议在反向代理设置中定义和使用它。
本篇文章将展示如何修复 nginx 与连接升级相关的 unknown variable 错误!
Unknown "connection_upgrade" Variable 错误
我们可能会在(更新之后)使用 nginx -t
检查自己的 nginx 配置时遇到此问题:
$ sudo nginx -t
nginx: [emerg] unknown "connection_upgrade" variable
nginx: configuration file /etc/nginx/nginx.conf test failed
connection_upgrade
变量不是全局 nginx 设置。 然而,我们会在整个 Internet 的教程和代码片段中看到它。 连 nginx 公司都推荐定义和使用 connection_upgrade。 让我们开始修复它吧!
配置 “$connection_upgrade” 变量
连接升级通常与 WebSockets 结合使用。 在 nginx 中,我们可以根据 $http_upgrade
变量将 HTTP 连接升级为 WebSocket 连接。
我们可以使用 map 块在 nginx 中定义连接和 http 升级之间的依赖关系:
map$http_upgrade$connection_upgrade {
default upgrade;
'' close;
}
如果 Upgrade 标头设置为 '',此 map 块告诉 nginx 正确设置相关的 Connection 标头来关闭连接。
将 map 块放入 nginx 配置的 http 块中。 nginx 配置的默认文件路径是 /etc/nginx/nginx.conf 。
这是一个使用定义 $connection_upgrade 变量的 map 块的 nginx 配置示例。
/etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
multi_accepton;
worker_connections65535;
}
http {
sendfileon;
tcp_nopushon;
tcp_nodelayon;
…
##
# Connection header for WebSocket reverse proxy
##
+ map$http_upgrade$connection_upgrade {
+ default upgrade;
+ '' close;
+ }
# further configurations …
}
保存更新的 nginx 配置文件。 然后,使用 nginx -t 再次检查配置文件:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
我们看到,配置已经生效了。✌️
使用 “$connection_upgrade” 变量
下面这个示例,展示了如何使用新定义的 $connection_upgrade
变量。 它与 proxy 标头结合使用。 在我们的 location 块中设置 proxy 标头,如下所示:
server {
listen80;
listen443 ssl http2;
location / {
proxy_http_version1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://127.0.0.1:1234;
}
}
就是这样,使用 nginx 配置支持 WebSocket 连接!
本文转载自:迹忆客(https://www.jiyik.com)
以上是 Nginx 如何修复 Unknown "connection_upgrade" Variable 错误 的全部内容, 来源链接: utcz.com/z/290312.html