简体   繁体   中英

NGINX + Wordpress gives ERR_TOO_MANY_REDIRECTS

I have been trying to host a simple Wordpress blog using NGINX as the web-server. The blog is hosted as a subdirectory under domain_name.com/blog.

The main blog opens up correctly. But when trying to open the wp-admin under domain_name.com/blog/wp-admin my browser shows ERR_TOO_MANY_REDIRECTS.

I am not sure if this is an issue with my NGINX configuration or wordpress configuration. Following is my NGINX server block:

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 is installed under the /var/www/html/blog directory. And the values for "siteurl" and "home" wp_options in the database are both pointing to domain_name.com/blog.

What would be a good way to solve this problem?

Additional notes that might be helpful: When I try to access static files under the wp-content directory, they open without any issues. No redirection errors there.

It is usual for WordPress to redirect an http session to https whenever accessing wp-admin . This may be controlled using the FORCE_SSL_LOGIN and FORCE_SSL_ADMIN settings in wp-config.php .

When a reverse proxy is terminating SSL, the fact that the originating connection is over https must be conveyed to WordPress to avoid a redirection loop.

Your reverse proxy should be setting headers such as X-Forwarded-Proto .

You need to change your nginx configuration so that the HTTPS flag is set correctly for WordPress.

For example:

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;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM