Nginx>如果从动态网站根目录移除

时间:2019-11-24 13:11:25

标签: nginx nginx-reverse-proxy nginx-config

我目前具有以下nginx配置,效果很好

例如 对于网址domain1.foo.com

  1. 如果目录存在,则尝试提供根/var/www/domain1的服务
  2. 如果不存在,则以根/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;
        }
    }
}

问题:在大多数情况下,请阅读nginx文档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;
    }
}

0 个答案:

没有答案