Нужно ли декларировать оператор if в каждом блоке сервера? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть карта блокировки ботов, которую я использую, которая заставляет nginx отвечать с 444. У меня есть блоки «если» в каждом блоке сервера, и это работает, но я хочу знать, помещаю ли это наверху на своем собственном сервере Блок будет лучше, или как именно я должен это делать?

В настоящее время мой файл domainname.org.conf имеет 3 серверных блока. Первый блок делает небезопасным и безопасным перенаправление со старых запросов домена на новый домен (мы переименовали). Второй блок обрабатывает перенаправление domainname.org на www.domainname.org. Третий блок на самом деле имеет мясо и картошку для PHP и еще много чего.

вот конф, некоторые данные опущены и запутаны.

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 голосов
/ 02 мая 2018

Я хочу знать, было бы лучше, если бы просто поставить его наверх в своем блоке сервера

Нет - он будет либо проигнорирован, либо сломает существующие server блоки.

nginx выбирает один server блок для обработки запроса на основе значений директив listen и server_name. Подробнее см. в этом документе .

Если у вас много общего кода, совместно используемого несколькими блоками server, поместите его в отдельный файл и используйте оператор include. См. этот документ для получения дополнительной информации.

...