NGINX + Wordpress提供ERR_TOO_MANY_REDIRECTS

时间:2017-05-29 12:15:12

标签: php wordpress redirect nginx fastcgi

我一直在尝试使用NGINX作为网络服务器来托管一个简单的Wordpress博客。该博客作为domain_name.com/blog下的子目录托管。

主要博客正确打开。但是当尝试在domain_name.com/blog/wp-admin下打开wp-admin时,我的浏览器会显示ERR_TOO_MANY_REDIRECTS。

我不确定这是NGINX配置或wordpress配置的问题。以下是我的NGINX服务器块:

server {
  listen 80;
  server_name <domain_name.com>;
  root /var/www/html;
  index index.php;

  location /blog {
    try_files $uri $uri/ /blog/index.php?$args;
  }

  location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass php;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
  }
}

Wordpress安装在/ var / www / html / blog目录下。并且数据库中“siteurl”和“home”wp_options的值都指向domain_name.com/blog。

解决这个问题的好方法是什么?

可能有用的其他说明: 当我尝试访问wp-content目录下的静态文件时,它们会打开而没有任何问题。那里没有重定向错误。

1 个答案:

答案 0 :(得分:1)

通常,只要访问http,WordPress就会将https会话重定向到wp-admin。这可以使用FORCE_SSL_LOGIN中的FORCE_SSL_ADMINwp-config.php设置进​​行控制。

当反向代理终止SSL时,必须将原始连接超过https的事实传达给WordPress以避免重定向循环。

您的反向代理应该设置标题,例如X-Forwarded-Proto

您需要更改nginx配置,以便为WordPress正确设置HTTPS标记。

例如:

map $http_x_forwarded_proto $https_flag {
    default off;
    https on;
}

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php;

    location /blog {
        try_files $uri $uri/ /blog/index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_intercept_errors on;

        fastcgi_param HTTPS $https_flag;
        fastcgi_pass php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}