Bloqueia o acesso ao endereço IP e o domínio curinga Nginx

1

Sou novo no Nginx, quero bloquear o acesso direto ao endereço IP do meu servidor e redirecionar o domínio curinga para o meu site principal. Aqui está porque eu cheguei tão longe em /etc/nginx/sites-available/default :

server {
    listen 80;
    listen [::]:80;
    server_name ~^(www\.)?(?<domain>.+)$;

    if ($domain != "12.13.14.15") {
        return 301 https://mainwebsite.com/$domain;
    }

    return 404;
}

Tudo parece estar funcionando bem com a configuração acima, mas depois descobri que Nginx se é mal , também quando o domínio não existe no banco de dados do meu site principal, ele mostrará a página 404 não encontrada no mainwebsite.com.

O que estou tentando alcançar é:

  1. Bloqueie o acesso direto ao endereço IP sem usar if .
  2. Redirecionar o domínio curinga para o meu site principal, se o domínio realmente existir no meu banco de dados, senão retornar 404 sem redirecionamento. Percebi que há try_files , mas não tenho certeza se ele pode ser usado para verificar uma URL externa.

Alguém por favor pode me dar alguma luz?

    
por Rifki 10.11.2018 / 08:52

2 respostas

0

Eu não testei, mas acho que algo assim deveria funcionar

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name ~^(www\.)?(?<domain>.+)$;

    return 301 https://mainwebsite.com/$domain;

    return 404;
}

server {
    listen 80;
    listen [::]:80;
    server_name 12.13.14.15;

    return 404;
}

Se não, você sempre pode usar um script (aqui eu mostro com php, mas poderia ser node-js, perl, python, etc ...)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    try_files index.php =404;
}

index.php

<?php

$domain = str_ireplace('www.', '', parse_url($_SERVER['HTTP_HOST'], PHP_URL_HOST));

if($domain == '12.13.14.15') {
    http_response_code(404);
    // include a 404 page?
    // require('404.php');
} else {
    $newURL = 'https://mainwebsite.com/'.$domain;
    header('Location: '.$newURL, 301);
}
exit();
    
por 12.11.2018 / 23:48
0
# One Block for Main Configuration 
server {
    listen 80;
    listen [::]:80;
    server_name ~^(www\.)?(?<domain>.+)$;
    ..........
} 

Observação: não recomendo usar uma expressão regular no parâmetro server_name. Você pode introduzir outro / vários blocos de servidor se quiser redirecionar HTTP para httpd ou não www para www.

Ref : Nginx redirect certbot www to non-www

# Second Block for all nonavailable server.
server {
        listen      80 default_server;
        server_name "";
        return      444;
    }

444 Represent "CONNECTION CLOSED WITHOUT RESPONSE"

    
por 19.11.2018 / 18:01

Tags