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_accept on; worker_connections 65535; } http { sendfile on; tcp_nopush on; tcp_nodelay on; … ## # 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 {
listen 80;
listen 443 ssl http2;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://127.0.0.1:1234;
}
}
就是这样,使用 nginx 配置支持 WebSocket 连接!
相关文章
Nginx 和 uWISG 服务器之间如何配合工作的
发布时间:2023/03/29 浏览次数:158 分类:网络
-
Nginx和uWISG是两个常用的服务器软件,它们可以协同工作以提供更加稳定和高效的网络服务。本文将详细介绍Nginx和uWISG之间的配合工作原理,以及如何配置它们以实现最佳性能。 一、
设置 PHP-FPM 和 Nginx Docker 容器
发布时间:2023/03/29 浏览次数:147 分类:PHP
-
在本篇文章中,我们将讨论在 Docker 上进行本地开发时如何设置 PHP、PHP-FPM 和 NGINX 容器。
Python 中 LookupError: unknown encoding 错误
发布时间:2023/02/04 浏览次数:149 分类:Python
-
当我们指定不支持的编码时,会出现 Python LookupError: unknown encoding 。 要解决该错误,请使用 utf-8 编码或选择适合我们的用例的任何其他标准编码,例如 latin-1 或 ascii 。 # ⛔️ LookupErr
如何修复Go Mod Unknown Revision
发布时间:2023/01/15 浏览次数:215 分类:Go
-
在介绍 Go mod 之后,我们可能已经使用过 Go 模块和私有存储库。 在处理使用新的 Go 模块包管理和版本控制系统的 Go 项目并专门使用公共包时,我们通常不会遇到任何重大问题。 但是,
在 Ubuntu 18.04 上使用 Nginx 安装 WordPress
发布时间:2022/10/15 浏览次数:223 分类:操作系统
-
WordPress 是最受欢迎的开源内容管理系统 (CMS) 之一,与 Drupal 或 Joomla 等其他 CMS 相比,其市场份额高达 60%。 WordPress 可用于开发任何类型的网站,无论是博客、小型企业还是大型企业。
Typescript 中的 unknown 是什么
发布时间:2022/08/26 浏览次数:177 分类:TypeScript
-
对于 unknown 类型,我们必须首先检查当前存储在变量中的类型,然后才能获得 typescript 支持。
Nginx 运行但是不提供站点服务
发布时间:2022/05/15 浏览次数:186 分类:网络
-
我们最近在一台新机器上安装了 nginx 版本 1.17。 在 sites-available`中创建的配置被符号链接到 `sites-enabled` ,但 nginx 没有为任何域名提供服务。
Nginx 如何修复 Reponse Status 0 Worker Process Exited on Signal 11
发布时间:2022/05/14 浏览次数:173 分类:网络
-
实际上,让我们首先澄清一下:HTTP 没有状态码 0(零)。 问题是 nginx 工作进程在处理请求时死亡,因此连接中断,导致没有任何响应数据的错误。
Nginx - 如何修复 “ssl” Directive Is Deprecated, Use “listen … ssl” 错
发布时间:2022/03/23 浏览次数:130 分类:网络
-
本篇文章介绍如何修复 nginx 的 “ ‘ssl’ Directive Is Deprecated, Use ‘listen … ssl’ ” 错误。Nginx 使用类似 YAML 的定义格式来创建配置。 这种格式随着时间的推移通过添加、删除或更改关键