NGINX Redirect Rule: Subfolder only to HTTPS?

I'm trying to redirect anyone who access the admin section of my site to the HTTPS version of it. The current rewrite rule is as follows:

server {
        listen          80;
        server_name     domain.com;

        location / {
                index index.php index.html;
                root  /home/domain.com/public;
                }

        #Redirect Admin requests to secure server
        location /www/admin/  {
                rewrite ^/(.*) https://domain.com$1 permanent;
                }
}

The problem with this rule is it is only forwarding http://domain.com/www/admin to HTTPS - going to http://domain.com/www/admin/index.php, for example, does not redirect. Any idea how to correct this so that anything BELOW /www/admin also gets redirected?


Read the four rules in the wiki entry linked by AlexD. Regular expression locations (like your PHP location) take precedence over plain static locations. To prevent that, you want to use the ^~ flag on your static location:

location ^~ /www/admin/ {
    rewrite ^ https://domain.com$request_uri? permanent;
}

EDIT: Also, you shouldn't set your root in location /. Set it in the server and let all your locations inherit the setting. See Pitfalls and Common Mistakes 1.2


Check nginx documentation for description of location directive. You should use location instead location =