现在我有这种解决方案:
# 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
的情况下完成相同的结果?
答案 0 :(得分:0)
我不确定它是否更好"感知,但您可以将默认位置定义为:
# Default redirect to SSL server
location / {
return 301 https://$host$request_uri;
}
而不是使用Ifs,将您的特殊情况配置为位置,例如:
location ~* /(internal|export)/ {
echo "Doing internal http stuffs here"
}
在我看来,拥有不同的位置可以提供更大的灵活性,看起来更干净。