1

My nginx.conf has a server blog containing this:

    location ~ \.php$ {
            root /var/www/html/blog;
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
    location /blog {
            root /var/www/html/blog;
            include /etc/nginx/mime.types;
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

But with these settings when I try to access /blog/wp-admin my browser gets stuck in some redirect loop.

If I change the root URLs in nginx.conf to /var/www/html, /blog/wp-admin works, but my post permalinks give me a 404 error.

My WP files are located in /var/www/html/blog. I have 'SSL Insecure Content Fixer' plugin installed because my images giving a mixed content error on my site, which has a Cloudflare page rule to always use SSL.

My WP address and WP home are both set to http://xxx/blog.

Anybody fixed something similar?

Thanks

1 Answer 1

4

I think that the main problem is an inconsistency with your root directive. Your PHP configuration has WordPress in /var/www/html/blog whereas your static configuration has WordPress in /var/www/html/blog/blog.

Assuming that WordPress is installed in the root of /var/www/html/blog and that the URIs should be prefixed with /blog/ for both real files and permalinks, the correct URI for the entry point should be /blog/index.php.

The nginx.conf file should probably be:

root /var/www/html;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}
location /blog {
    include /etc/nginx/mime.types;
    try_files $uri $uri/ /blog/index.php;
}

If you have a conflicting root directive within the outer server container, the above root directive could be placed inside the two location blocks unmodified.

I would try /blog/index.php rather than /blog/index.php?q=$uri&$args as the last element of try_files because in my experience, WordPress uses the REQUEST_URI parameter to route permalinks rather than the q argument as you have implied, but YMMV.

If you do have other applications in this servers root and would like to segregate the WordPress root more completely, you might nest the PHP location block like this:

location ^~ /blog {
    root /var/www/html;
    include /etc/nginx/mime.types;
    try_files $uri $uri/ /blog/index.php;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

You are a hero and a scholar. Could have saved me hours.
I am facing the same issue but not getting resolved by this. Need some help

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.