我正在托管Cloudflare代理后面的网站,这意味着我的服务器的所有请求都通过端口80,即使Cloudflare处理HTTP(端口80)和HTTPS(端口443)流量.
为了区分这两者,Cloudflare包括一个X-Forwarded-Proto标题,根据用户的连接设置为"http"或"https".
我想将带有X-Forwarded-Proto: http标题的每个请求重定向到我的网站的SSL版本.如何使用nginx配置实现此目的?
Kev*_*rke 43
最简单的方法是使用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...
}
Run Code Online (Sandbox Code Playgroud)
小智 9
尝试使用地图指令:http : //nginx.org/en/docs/http/ngx_http_map_module.html#map
类似的东西...
map $http_x_forwarded_proto $php_backend {
"https" "https_php_backend named loc";
default "default_php_backend named loc";
}
server{
location / {
proxy_pass http://$php_backend;
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码是抽象的,但你可以尝试这种方式......
| 归档时间: |
|
| 查看次数: |
17348 次 |
| 最近记录: |