nginx配置http和ws协议同时使用

客户端发起协议升级的请求,而nginx在拦截时需要识别出这是一个协议升级(upgrade)的请求,所以必须显式设置升级(Upgrade head)和连接头(Connection head)

注意:以下配置中加粗变黑的才是你需要添加的配置!!!

第一种方法(推荐这么写)

location /point-user {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
client_max_body_size 1G;
proxy_pass http://127.0.0.1:8080;
}

配置完这些还要进行配置http配置
http {
include mime.types;
default_type application/octet-stream;
map $http_upgrade $connection_upgrade {
default upgrade;
' ' close;
}
}

第二种方法(定死 $connection_upgrade,不加配置map $http_upgrade $connection_upgrade { ... } )

location /point-user {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
client_max_body_size 1G;
proxy_pass http://127.0.0.1:8080;
}

配置解读:

这段配置是用来定义一个 Nginx 变量 connection_upgrade 的映射规则,它用于在处理 WebSocket 连接等情况下控制 HTTP 连接的升级。以下是对这段配置的详细解释:

1.map $http_upgrade $connection_upgrade { ... } : 这一行定义了一个名为 $connection_upgrade 的变量,并使用 map 指令来配置变量的值映射规则。具体来说,它将根据 $http_upgrade 变量的值来确定 $connection_upgrade 变量的值。

2.default upgrade; : 这一行定义了默认的映射规则。当 $http_upgrade 变量的值不匹配任何其他规则时(即没有升级请求头时),$connection_upgrade 的值将被设置为 "upgrade"。这是 HTTP 升级连接的一种标准方式,通常用于将 HTTP 连接升级为 WebSocket 连接或其他协议。

3.' ' close; : 这一行定义了一个额外的映射规则,当 $http_upgrade 的值为空时(即没有升级请求头时),$connection_upgrade 的值将被设置为 "close"。这表示在没有明确要求升级连接的情况下,连接将被关闭,即不进行升级。

综合起来,这段配置的作用是根据客户端的请求头中是否包含升级请求头来设置 $connection_upgrade 变量的值。如果客户端请求升级连接,$connection_upgrade 将被设置为 "upgrade",允许连接升级到其他协议。如果没有升级请求头或不需要升级,$connection_upgrade 将被设置为 "close",表示连接将被关闭。

这种配置常用于处理 WebSocket 连接等需要升级 HTTP 连接的场景,它允许 Nginx 在不同的连接状态下采取不同的行动,以确保连接按预期工作。

你可能感兴趣的:(nginx配置http和ws协议同时使用)