NGINX: 非 www アドレスへのリダイレクト

NGINX: 非 www アドレスへのリダイレクト

私は自分のウェブサイトを NGINX で設定しようとしています。少し手に負えない状況で、見つけられる関連ソリューションはすべて試しましたが、しばらくお待ちください :)

すべての http トラフィックを https にリダイレクトし、Web サイトの www サブドメインとサーバーの IP アドレス (ここでは 123.123.123.123) への接続を mywebsite.com にリダイレクトしたいと考えています。私のサーバー構成は以下のとおりで、www リダイレクトを除くすべての条件を満たしています。www リダイレクトでは NGINX 404 ページが表示されます。理解できないのは、IP アドレスと www サブドメインの処理が同一であるように見えることです。DNS や SSL 証明書など、他の場所に問題があるのでしょうか。ありがとうございます。

/etc/nginx/sites-available/mywebsite

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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

DNS については、mywebsite.com と *.mywebsite.com の A レコードと AAAA レコードがそれぞれサーバーの IPv4 アドレスと IPv6 アドレスを指しており、メール サブドメインの MX レコードといくつかの TXT レコードもあります。

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 

答え1

(これは主にコメントですが、スペースが限られています)

すべてのhttpトラフィックをhttpsにリダイレクトしたいのですが、

わかりました、理にかなっているようです。

私のウェブサイトのwwwサブドメインと私のサーバーのIPアドレス(ここでは123.123.123.123)への接続はmywebsite.comにリダイレクトされる必要があります。

なぜでしょうか? これにはメリットが見当たらず、事実上、サービスの高可用性が実現できなくなります。

はい、設定をざっと調べたところ、思った通りの動作をするはずです。しかし、なぜ異なるサーバーブロックを使って記述しているのでしょうか?当サイトについておよび 123.123.123.123 で同じ動作を実装する場合、どうすればよいですか? (実際には、単一のサーバー ブロックで 3 つの SSL vhost の動作を実装できます)。同様に、mail.mywebsite.com に個別の証明書は必要ありません。

証明書の問題によって 404 エラーが発生する可能性は低いです。

DNS は明らかにチェックすべきもののように思えますが、逆に、既存の DNS を明示的に上書きし、実際の HTTP ヘッダーを確認することもできます (例:

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

関連情報