回答问题

我在 Cloudflare 代理后面托管一个网站,这意味着对我的服务器的所有请求都通过端口 80,即使 Cloudflare 处理 HTTP(端口 80)和 HTTPS(端口 443)流量。

为了区分两者,Cloudflare 包含一个X-Forwarded-Proto标头,该标头根据用户的连接设置为“http”或“https”。

我想将带有X-Forwarded-Proto: http标头的每个请求重定向到我网站的 SSL 版本。如何通过 nginx 配置实现这一点?

Answers

最简单的方法是使用if指令。如果有更好的方法,请告诉我,正如人们所说的if指令效率低下。 Nginx 将标头中的破折号转换为下划线,因此X-Forwarded-Proto变为$http_x_forwarded_proto

server {
    listen 80;
    server_name example.com; # Replace this with your own hostname
    if ($http_x_forwarded_proto = "http") {
        return 301 https://example.com$request_uri;
    }

    # Rest of configuration goes here... 
}
Logo

开发云社区提供前沿行业资讯和优质的学习知识,同时提供优质稳定、价格优惠的云主机、数据库、网络、云储存等云服务产品

更多推荐