我目前具有以下nginx配置,效果很好。
例如
对于网址domain1.foo.com
/var/www/domain1
的服务/var/www/_default
server {
# .. truncated .. #
server_name ~^(www\.)?(?<domain>[^\.]+);
root /var/www/_default;
location / {
if (-d /var/www/$domain) {
root /var/www/$domain;
}
if (!-d /var/www/$domain) {
root /var/www/_default;
}
}
}
if
is evil。如果在位置上下文中,可以在内部完成的唯一100%安全的事情是:
返回...;
重写...最后;
任何其他事情都可能导致不可预测的行为,包括潜在的SIGSEGV。
所以我尝试切换配置以使用try_files
...,这很混乱。 index.html
不再默认提供服务,如果我添加index.html
,那么我将不再获得404页,而是可以交叉提供文件了……有人可以指出正确的方向吗?
例如我应该在server
块中使用像this answer这样的变量吗?
server {
# .. truncated .. #
server_name ~^(www\.)?(?<domain>[^\.]+);
root /var/www;
location ~ ^/$ {
try_files /$domain/index.html /_default/index.html =404;
}
location / {
try_files /$domain/$uri/index.html /_default/$uri/index.html /$domain/$uri /$domain/$uri/ /_default/$uri /_default/$uri/ =404;
}
}