如何通过http和https处理nginx中的一些网址,并将所有其余网址重定向到https

时间:2014-12-07 14:56:55

标签: nginx https

现在我有这种解决方案:

# HTTP server setup
server {
    server_name dev.server.com ;
    listen 80;
    set root /usr/local/www/me ;

    # So here comes the tricky part to allow handling some urls
    # both via http / https:

    set $allow_http 'no' ;

    if ($uri ~* "^\/(internal|export)\/") {
        set $allow_http 'yes' ;
    }

    if ($request_uri = '/some/?tricky=url') {
        set $allow_http 'yes' ;
    }

    if ($allow_http = 'no') {
        return 301 https://$host$request_uri ;
    }

    include /home/me/main.conf ;
}

# HTTPS server setup
server {
    server_name dev.server.com ;
    listen 443 ssl;
    set root /usr/local/www/me ;

    include /home/me/main.conf ;
}

就像这样。

但也许有更好的方法可以在不使用所有这些if的情况下完成相同的结果?

1 个答案:

答案 0 :(得分:0)

我不确定它是否更好"感知,但您可以将默认位置定义为:

# Default redirect to SSL server
location / {
    return 301 https://$host$request_uri;
}

而不是使用Ifs,将您的特殊情况配置为位置,例如:

location ~* /(internal|export)/ {
   echo "Doing internal http stuffs here"
}

在我看来,拥有不同的位置可以提供更大的灵活性,看起来更干净。