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

回到顶部