私は自分のウェブサイトを 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