NGINX + Wordpress 给出 ERR_TOO_MANY_REDIRECTS

mit*_*esh 2 php wordpress redirect fastcgi nginx

我一直在尝试使用 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ric*_*ith 7

WordPress 通常会httphttps访问wp-admin. 这可以使用中的FORCE_SSL_LOGIN和设置来控制。FORCE_SSL_ADMINwp-config.php

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

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

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

例如:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)