WordPress nginx redirect loop

So, yesterday I had a question how to install the wordpress in the “/root” directory. I wasn’t very successful in that one and I forgo’ed on that one.

So, right now the wordpress is located under “/var/www/wordpress” (so it’s under separate folder) folder (I use Ubuntu 12.04 LTS, if it matters).

Read More

And my problem is that right after I had configured everything (everything was working like a charm there) I was redirected to the admin panel page. Everything was working fine up until the moment when I tried to visit the blog.

The URL address for my blog is: “blog.mysite.com”. That is why I use NGINX, because I have two different applications (and environments) on one server and I need to distinguish between them.

So, the fact is: blog.mysite.com/wp-admin (/wp-login.php) is working totally OK, but when I visit the front page: blog.mysite.com, it keeps telling me that there is an endless redirect loop (301 redirect according to nginx access log file).

In admin panel I have both “WordPress Address (URL)” and “Site address (URL)” set to: “http://blog.mysite.com“. Modifying either of them to something else, like: “http://blog.mysite.com/wordpress” is not helping at all!

“.htaccess” file is empty, but I’m using default permalinks, so should not be a problem (However, I’m not sure).

Both nginx and apache2 root directives are pointing to “/var/www/wordpress”.
Static files (css,js) are working, if it matters.

How can I fix this problem ? Any help is much appreciated!

Thank you in advance!

Related posts

Leave a Reply

6 comments

  1. I had a similar problem using Nginx as a reverse proxy for Apache.

    After a few hours I found out it was caused by the $_SERVER["REQUEST_URI"] being set to index.php by Nginx instead of the actual url and WordPress was trying to remove index.php by redirecting to the url without index.php in wp-includes/canonical.php.

    The solution for me is using something like this,

    proxy_pass http://111.111.111.111:8080$request_uri;
    

    So adding the $request_uri fixed it.

  2. I had a lot of problems when switching from Apache to Nginx in the past, all solved when I purged Apache, which somehow was interfering with Nginx and caused problems to every server. Here is my wordpress configuration for Nginx, according to both Nginx and WordPress guides for each other:

    server {
        listen 80;
        server_name blog.mysite.com;
    
        root /var/www/wordpress;
        index index.php;
    
        charset utf-8;
    
        location / {
          try_files $uri $uri/ /index.php?$args;
        }
    
        location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
            access_log off; log_not_found off; expires max;
        }
    
        location ~ .php$ {
            try_files $uri /index.php;
    
          fastcgi_split_path_info ^(.+.php)(/.+)$;
            # CHANGE THE LINE ABOVE IF NEEDED
            fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    

    I didn’t even have to change anything in the admin panel when switching servers, it just worked fine.

  3. In my case, the redirect loop only affected wp-admin pages, so I added at the start of the line

    if (is_admin) remove_filter('template_redirect', 'redirect_canonical');
    

    and still works, plus the redirect canonical keeps doing its job on the front end!

    I hope this helps someone else!

  4. I was having this issue because I was using nginx to forward the request, but nginx wasn’t preserving the HOST header.

    Once I added these values under my location block things started working as expected.

        # Set proxy headers for the passthrough
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        # Let the Set-Cookie header through.
        proxy_pass_header Set-Cookie;