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.

2

1 Answer

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like