Gostaria de redirecionar todas as solicitações provenientes de fora da rede para https - mas manter as internas em http.
No momento, tenho dois .conf
arquivos - um que começa assim:
server {
# listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name www.example.com , example.com;
# omitted stuff
}
e contém
server {
listen 80;
server_name www.example.com , example.com;
return 301 https://$host$request_uri;
}
e outro que começa assim:
server {
listen 192.168.1.144:80;
listen 192.168.1.196:80;
server_name "";
root /var/www/html;
# omitted stuff
}
Mas agora pede parahttp://exemplo.comnão seja redirecionado para https.
Por que é que? o que eu errei? meu objetivo é redirecionar todas as solicitações que não vêm da rede privada doméstica ( 192.168.1.*
) para https e deixar as internas de lado.
Responder1
server_name
diretiva usa espaços para separar nomes de domínio. Sua configuração possui vírgulas, o que confunde o nginx.
Você precisa usar:
server_name www.example.com example.com;
Responder2
Presumo que com o seguinte você esteja tentando criar um bloco de servidor diferente que escute duas interfaces na rede local:
server {
listen 192.168.1.144:80;
listen 192.168.1.196:80;
# ...
}
Para que isso funcione, sua topologia seria semelhante a esta:
Porém, se o seu servidor estiver usando o mesmo NAT dos clientes da rede privada 192.168.1.0/24
, esse server
bloco também será usado para conexões externas. Esta topologia seria semelhante a esta:
Com o último, você poderia usar, por exemplo, ongx_http_geo_modulepara separar a rede local com base em seus clientes:
geo $external {
default 1;
192.168.1.0/24 0;
}
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
if ($external) {
return 301 https://$server_name$request_uri;
}
}
No entanto, do ponto de vista da segurança, eu não recomendaria confiar na sua rede interna dessa forma, mas usar o TLS igualmente para todos os clientes. Isso porque é fácil obter a posição MitM simplesmente tendo acesso à rede local.
Responder3
Tente isso para o redirecionamento e, para o interno, pessoalmente prefiro criar o nome do servidor por endereço IP.
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/example.crt;
ssl_certificate_key /etc/ssl/example.key;
server_name example.com www.example.com;
location{
.......
}
}