$scheme

NGINX 中的 $scheme 变量返回当前请求的协议(HTTP 或 HTTPS)。 — NGINX Core (HTTP)

$scheme NGINX Core (HTTP)

说明

$scheme 变量在确定客户端用来向服务器发起请求的协议时至关重要。它会检查与 NGINX 服务器的连接是否使用了 HTTPS 或 HTTP。当请求通过 HTTPS 发起时,$scheme 变量将返回 'https';而对于 HTTP 请求,则返回 'http'。该变量通常在 NGINX 核心处理请求时设置,其值由服务器上是否存在有效的 SSL 证书决定。因此,如果配置了 SSL 且请求是安全的,变量会被设置为 'https',否则默认值为 'http'。 还应注意,脚本、重定向或其他配置选项常常使用该变量来在响应输出或 HTTP headers 中生成正确的 URL。例如,在重定向用户或动态构建链接时,使用 $scheme 变量可确保链接根据用户访问服务器的方式引用相应的协议。因此,在同时存在安全和非安全访问的环境中,它起着关键作用。

配置示例

server {
    listen 80;
    server_name example.com;

    location / {
        return 301 $scheme://www.example.com$request_uri;
    }
}

子系统

http

可缓存

上下文

http, server, location, if

确保 SSL 已正确配置;否则,它将始终返回 'http'.

避免在可能未定义 $scheme 的上下文中使用它,例如在某些不处理请求的指令内部。

如果不正确处理,过度使用 $scheme 可能导致安全问题,例如将内部端点暴露在 HTTP 上。