迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 网络 >

Nginx 如何修复 Unknown "connection_upgrade" Variable 错误

作者:迹忆客 最近更新:2023/01/08 浏览次数:

在使用 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 连接!

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

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 没有为任何域名提供服务。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便