技术解析

[求助]Openshift 的 nginx-php7 配置重定向 https 时出现循环重定向
0
2021-05-20 22:58:04
idczone
可能用了假的 nginx , default.conf.erb 写法
server {
root <%= ENV['OPENSHIFT_REPO_DIR'] %>/www;
listen <%= ENV['OPENSHIFT_PHP_IP'] %>:<%= ENV['OPENSHIFT_PHP_PORT'] %>;
server_name <%= ENV['OPENSHIFT_APP_DNS'] %>;
index index.php index.html index.htm <%= ENV['NGINX_EXTRA_INDEX'] %>;
set_real_ip_from <%= ENV['OPENSHIFT_PHP_IP'] %>;
real_ip_header X-Forwarded-For;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
if ($server_port = 80){
return 301 https://$server_name$request_uri;}
if ($scheme = http){
return 301 https://$server_name$request_uri;}

# avoid caching by proxies
add_header Cache-Control private;

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass大带宽服务器 unix:<%= ENV['OPENSHIFT_PHP_DIR'] %>/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include openshift_params;

# uncomment to export all environment variables to fastcgi
#include <%= ENV['OPENSHIFT_REPO_DIR'] %>/config/nginx.d/export_env;
}

# avoid unnecessary log
location = /favicon.ico {
access_log off;
log_not_found off;
}

location = /robots.txt {
access_log off;
log_not_found off;
}

# Handle any other URI
location / {
try_files $uri $uri/ =404;
}
}
不要用 if
不要用 if
不要用 if
http 和 https 分开两段 server {}

提楼上的

OpenShift 的架构和一般的 VM 是不一样的,它的 https 由上一层的 nginx 所提供(所以你也发现了你的 nginx 配置里连证书和加密方式都不配置),所以在用户的应用层面拿到的都是 http 的请求(当然,也都是 80 端口的),其他答案那个方式也是不行的,因为你的应用并不会去监听 80 和 443 。正确的做法是,首先把你写的两段 if 替换为
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
使用上层 nginx 传来的客户端访问方式进行判断,其中 rewrite 改为 return 301 也是可以的

貌似并不好使,会提示 301 Moved Permanently ,然后循环就什么都没了,现在用 index 做 metahttp-equiv="refresh"勉强一下了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服