仅匹配admin子文件夹时的Nginx HTTPS

时间:2012-09-13 02:11:47

标签: regex ssl https nginx regex-negation

我设法通过以下方式将所有/管理员请求重定向到https:

server {
    listen 80;

    location /admin {
        rewrite ^ https://$server_name$request_uri?$args permanent;
    }
}

但是非/ admin https请求需要重定向回http。以下代码有点重复工作,但/ admin返回404.空块中需要什么来保持nginx满意?

server {
    listen       443;
    server_name  mywebsite.local.com;

    ssl                  on;
    ssl_certificate      /opt/nginx/server.crt;
    ssl_certificate_key  /opt/nginx/host.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    root /Users/me/Sites/website/public;

    location /admin {
        # here is your configuration for admin requests
        # don't forget to set "root"
    }

    location / {
        return 301 http://$server_name$request_uri;
    }

    passenger_enabled on;
    rails_env development;
}

error.log中的错误:

12 open() "/Users/me/Sites/website/public/admin" failed (2: No such file or directory),     client: 127.0.0.1, server: something.com, request: "GET /admin HTTP/1.1", host: "something.com"

由于

2 个答案:

答案 0 :(得分:1)

这似乎有效:

    if ($request_uri !~* ^/admin)
    {
        rewrite ^ http://$server_name$request_uri?$args permanent;
    }

有没有人有更好的方法?

答案 1 :(得分:1)

server {
    listen 80;

    location /admin {
        return 301 https://$server_name$request_uri;
   }

    location / {
        # here is your configuration for non-admin requests
        # don't forget to set "root"
    }
}

server {
    listen 443;

    location /admin {
        # here is your configuration for admin requests
        # don't forget to set "root"
    }

    location / {
        return 301 http://$server_name$request_uri;
    }
}