“竞争” nginx 配置文件

“竞争” nginx 配置文件

我有一台使用 nginx 成功托管多个域的服务器。每个域都有一个单独的 nginx 配置文件。

一个域名,我们称之为 example.com 是默认服务器

它有一个如下的配置文件:

# config file for example.com
#
#redirects all www to NON-www
#

server {
    listen 80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
    }

server {
    listen 80 default_server;
    server_name example.com;
    charset utf-8;
    root /blah/example.com/public/www;

这很有效 - 直到我为同一域的文件夹和子域的各种“管理重定向”添加第二个配置文件。

我这样做是因为这个域名相当老旧,在购买域名之前,子目录中就有很多应用程序和网站。万一有些用户有旧书签,我们希望确保它们仍然有效。

我想在单独的 nginx 配置文件中维护这些重定向,以便于监督。

这是第二个配置文件(为了讨论的目的而简化):

# config file for Administrative_Redirects.example.com
#redirects Webmin and/or Panel request to proper port and https
#

server {
    listen 80;
    server_name webmin.example.com;
    return https://webmin.example.com:10000;
    }

server {
    listen 80;
    server_name panel.example.com;
    return https://webmin.example.com:10000;
    }


#------------------------------------------------------------------------
#
#redirects all Webmail and related cPanel requests to XYZ account
#

server {
    listen 80;
    server_name webmail.example.com;
    return https://3rdPartyMail.com:port;
    }

server {
    listen 80;
    server_name www.webmail.example.com;
    return https://3rdPartyMail.com:port;
    }


server {
    listen 80;
    server_name cpanel.example.com;
    return https://AnotherDomain.com:port;
    }


#------------------------------------------------------------------------
#
#redirects subdirs to proper domains and/or subdomains
#

# ~*/(regex_case-INSensitive)

server {
    listen 80;
    server_name example.com;

    # some_app
    location ~*/(some_folder)
        {
        return 301 $scheme://SomeOtherDomain.com;
        }

    # another_app
    location ~*/(another_folder)
        {
        return 301 $scheme://AnotherDomain.com;
        }

    # Some_Name
    location ~*/(some_name)
        {
        return 301 $scheme://some_name.example.com;
        }

    }


# strip www subdomain

server {
    listen 80;
    server_name www.example.com;

    # some_app
    location ~*/(some_folder)
        {
        return 301 $scheme://SomeOtherDomain.com;
        }

    # another_app
    location ~*/(another_folder)
        {
        return 301 $scheme://AnotherDomain.com;
        }

    # Some_Name
    location ~*/(some_name)
        {
        return 301 $scheme://some_name.example.com;
        }
    }

# -----------

我的两个问题:

  1. 如果“Administrative_Redirects.example.com”的这个配置文件处于活动状态,则其中的所有内容都可以正常解析,但浏览 example.com 或 www.example.com 会导致 404。

  2. 浏览 any_made-up_subdomain.example.com(即配置文件中未指定的“Administrative_Redirects.example.com”的任何内容)将提供文档根目录(即 root /blah/example.com/public/www;)...但可能会导致 404

问题似乎来自“Administrative_Redirects.example.com”配置文件中的以下部分

#-------
server {
    listen 80;
    server_name example.com;
#-------

and

#-------
server {
    listen 80;
    server_name www.example.com;
#-------

这些似乎“抢占”了 default_server 配置文件,该文件按字母顺序排列之后在活动 nginx 站点列表中。

我怎样才能防止“Administrative_Redirects.example.com”践踏 default_server nginx 配置文件?

有没有更好的方法可以做到这一点,同时在单独的文件中维护重定向?

例如,我可以将这些“管理重定向”包含到 default_server 配置文件中,这样就不会出现那么大的混乱吗?

提前感谢您的任何见解!

答案1

您应该include在主文件中使用指令来包含重定向文件。

主要文件example.com

...

server {
    listen 80 default_server;
    server_name example.com;
    charset utf-8;
    root /blah/example.com/public/www;

    # add this line
    include redirects.conf;
}

然后把所有的重定向没有serverredirects.conf

# some_app
location ~*/(some_folder) {
    return 301 $scheme://SomeOtherDomain.com;
}

# another_app location ~*/(another_folder) {
    return 301 $scheme://AnotherDomain.com;
}

# Some_Name
location ~*/(some_name) {
    return 301 $scheme://some_name.example.com;
}

注意:答案是我抱着熟睡的婴儿时在手机上输入的,因此可能会有语法错误。

相关内容