NGINX: Redirecionar para endereço não www

NGINX: Redirecionar para endereço não www

Estou tentando configurar meu site com NGINX. Estou um pouco perdido e tentei todas as soluções relevantes que pude encontrar, então agradecemos sua paciência :)

Quero que todo o tráfego http seja redirecionado para https, e as conexões ao subdomínio www do meu site e ao endereço IP do meu servidor (123.123.123.123 para nossos propósitos) devem redirecionar para mywebsite.com. A configuração do meu servidor está abaixo e atende a todos esses critérios, exceto o redirecionamento www, que me dá uma página NGINX 404. O que não entendo é que o tratamento do endereço IP e do subdomínio www parece idêntico para mim - o problema está em outro lugar, como certificados DNS ou SSL? Obrigado.

/etc/nginx/sites-available/meuwebsite

server {
        listen 80 ;
        server_name www.mywebsite.com mywebsite.com 123.123.123.123 ;
        return 301 https://mywebsite.com$request_uri ;
}
server {
        server_name www.mywebsite.com ;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    return 301 https://mywebsite.com$request_uri ;


}
server {
        server_name 123.123.123.123;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    return 301 https://mywebsite.com$request_uri ;


}
server {
        server_name mywebsite.com ;
        root /var/www/mywebsite ;
        index index.html index.htm index.nginx-debian.html ;
        location / {
                try_files $uri $uri/ =404 ;
        }
        if ($host != mywebsite.com) {
                return 301 https://mywebsite.com$request_uri;
        } 


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}
root@localhost:~# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: mail.mywebsite.com
    Serial Number: ###################################
    Key Type: ECDSA
    Domains: mail.mywebsite.com
    Expiry Date: 2023-12-09 16:27:55+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/mail.mywebsite.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/mail.mywebsite.com/privkey.pem
  Certificate Name: mywebsite.com
    Serial Number: ###################################
    Key Type: ECDSA
    Domains: mywebsite.com mail.mywebsite.com www.mywebsite.com
    Expiry Date: 2023-12-09 03:09:48+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/mywebsite.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/mywebsite.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Para DNS, tenho registros A e AAAA para mywebsite.com e *.mywebsite.com apontando para os endereços ipv4 e ipv6 do meu servidor, respectivamente, bem como um registro MX e alguns registros TXT para meu subdomínio de e-mail.

A   mywebsite.com   123.123.123.123 600     
A   *.mywebsite.com 123.123.123.123 600     
AAAA    mywebsite.com   1234:1234::1234:1234:1234:1234  600     
AAAA    *.mywebsite.com 1234:1234::1234:1234:1234:1234  600     
MX  mywebsite.com   mail.mywebsite.com  600 10  
TXT _dmarc.mywebsite.com    v=DMARC1; p=reject; rua=mailto:[email protected]; fo=1    600     
TXT mywebsite.com   v=spf1 mx a:mail.mywebsite.com -all 600     
TXT mail._domainkey.mywebsite.com   v=DKIM1; h=sha256; k=rsa; p=#####################################   600 

Responder1

(isto é principalmente um comentário, mas o espaço é limitado)

Quero que todo o tráfego http seja redirecionado para https,

OK, parece sensato.

e as conexões com o subdomínio www do meu site e com o endereço IP do meu servidor (123.123.123.123 para nossos propósitos) devem redirecionar para mywebsite.com

Por que? Não vejo nenhum benefício nisso e efetivamente fecha a porta para qualquer alta disponibilidade do serviço.

Sim, uma inspeção casual da configuração sugere que ela deve fazer o que você pensa. No entanto, por que você está usando blocos de servidor diferentes para descreverwww.meuwebsite.come 123.123.123.123 quando implementam o mesmo comportamento? (Na verdade, você poderia implementar o comportamento para 3 vhosts SSL em um único bloco de servidor). Da mesma forma, você não precisa do certificado separado para mail.mywebsite.com.

É improvável que um problema de certificado resulte em um erro 404.

O DNS parece ser a coisa óbvia a ser verificada/inversamente, você pode substituir explicitamente qualquer DNS existente e ver os cabeçalhos HTTP reais usando (por exemplo):

curl -I -k --resolve \*:443:123.123.123 https://www.example.com

informação relacionada