【问题标题】:Getting “Too many redirects” error with nginx rewrite rule使用 nginx 重写规则出现“重定向过多”错误
【发布时间】:2015-05-18 15:46:58
【问题描述】:

这是 nginx.conf。
出现问题,继续重定向。
我收到“重定向过多”错误。
有什么问题?

我想将“/aaa/test.do” uri 转换为 http。
不是“/aaa/test.do” uri 到 https。
请帮忙。谢谢。

map $uri $example_org_preferred_proto {
    default https;
    ~^/aaa/test.do http;
}

........

 server {
        listen       80;
        server_name  www.test.com;

        charset utf-8;

        if ($example_org_preferred_proto = "https") {
            return 301 https://$server_name$request_uri;
        }

        location / {
           proxy_set_header Host                $host;
           proxy_set_header X-Real-IP            $remote_addr;
           proxy_set_header X-Forwarded-Host    $host;
           proxy_set_header X-Forwarded-Server    $host;
           proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
           proxy_set_header        Host $http_host;
           proxy_redirect off;
           proxy_buffering off;
           proxy_connect_timeout 60;
           proxy_read_timeout 60;
           proxy_pass   http://wwwtestcom;
        }
}


# HTTPS server
#
server {
    listen       443;
    server_name  www.test.com;

    charset utf-8;

    ssl                  on;
    ssl_certificate      D:/nginx-1.7.10/ssl/cert.pem;
    ssl_certificate_key  D:/nginx-1.7.10/ssl/key.pem;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  !ADH:RC4+RSA:+HIGH:!EXP:+eNULL:AES256-SHA;
    ssl_prefer_server_ciphers   on;

    if ($example_org_preferred_proto = "http") {
        return 301 http://$server_name$request_uri;
    }

    location / {
       proxy_set_header Host                $host;
       proxy_set_header X-Real-IP            $remote_addr;
       proxy_set_header X-Forwarded-Host    $host;
       proxy_set_header X-Forwarded-Server    $host;
       proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
       proxy_set_header        Host $http_host;
       proxy_redirect off;
       proxy_buffering off;
       proxy_connect_timeout 60;
       proxy_read_timeout 60;
       proxy_pass   http://wwwtestcom;
       proxy_ssl_session_reuse off;
    }

【问题讨论】:

    标签: redirect nginx rewrite http-status-code-301


    【解决方案1】:

    您在此处缺少引号(“http”和“https”):

    map $uri $example_org_preferred_proto {
        default "https";
        ~^/aaa/test.do "http";
    }
    

    另外,我建议为 HTTP 和 HTTPS 服务器定义单独的访问和错误日​​志。检查这些日志文件中的消息将帮助您快速调试问题。

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多