我是否需要在每个服务器块中声明if语句

时间:2018-05-01 15:51:15

标签: if-statement nginx configuration bots

我有一个机器人阻挡地图,我正在使用它使得nginx以444响应。我有"如果"每个服务器块中的块都可以工作,但是我想知道如果将它放在自己的服务器块中的顶部会更好,或者我应该怎么做呢?

目前,我的domainname.org.conf文件有3个服务器块。第一个块确实不安全并确保从旧域请求重定向到新域(我们重新命名)。第二个块处理domainname.org重定向到www.domainname.org。第三块实际上有PHP和其他的肉和土豆。

这里是conf,省略了一些数据并进行了混淆。

server {
    listen 80;
    listen 443;

    MY CERT STUFF IS HERE BUT I'M NOT SHARING DETAILS

    server_name olddomainname.org *.olddomainname.org;

    #blocks blank user_agents
    if ($limit_bots = 1) {
        return 444;
    }

    return 301 https://www.newdomainname.org$request_uri;

}

#############################################################################################
# THIS SERVER BLOCK SIMPLY ACCEPTS ANY INCOMING NON-SUBDOMAININSECURE DOMAIN AND REROUTES IT TO A SECURE ONE
# IT ONLY AFFECTS THE PROD WEBSITE. IT SHOULD NOT INTERFERE WITH ANY DEVELOPMENT SUBDOMAINS

server {
    listen 80;
    listen 443;
    server_name newdomainname.org;

    #blocks blank user_agents
    if ($limit_bots = 1) {
        return 444;
    }

    return 301 $scheme://www.newdomainname.org$request_uri;
}

#############################################################################################
# THIS SERVER BLOCK HANDLES ANY INCOMING INSECURE SUBDOMAIN


server {
    listen 80;
    listen 443 default ssl;

   MY CERT STUFF IS HERE BUT I'M NOT SHARING DETAILS

    server_name www.newdomainname.org;

    #blocks blank user_agents
    if ($limit_bots = 1) {
        return 444;
    }

    ## Redirect 80 to 443
    if ($scheme = http) {
       return 301 https://$server_name$request_uri;
    }


    root /var/www;

这有效,但增加了重复。

1 个答案:

答案 0 :(得分:1)

  

我想知道如果将它放在自己的服务器块中的顶部会更好

不 - 它会被忽略,或者会破坏现有的server块。

nginx根据serverlisten指令的值,选择一个 server_name块来处理请求。有关详细信息,请参阅this document

如果您有许多公共代码,在多个server块之间共享,请将其放在单独的文件中并使用include语句。有关详情,请参阅this document