Nginx, certbot을 사용할 때 www 도메인을 www가 아닌 ​​https 도메인으로 리디렉션할 수 없습니다.

Nginx, certbot을 사용할 때 www 도메인을 www가 아닌 ​​https 도메인으로 리디렉션할 수 없습니다.

온라인에 많은 예제가 있음에도 불구하고 특히 if 문을 사용하여 많은 것을 시도했지만 지금까지 가상 호스트를 제대로 설정할 수 없었습니다.

그래서 내 가상 호스트는

    a1.example.com

www.a1.example.com should redirect to https://a1.example.com
a1.example.com should redirect to https://a1.example.com

목표는 매번 www가 아닌 ​​https로 리디렉션하는 것입니다.

이것은 지금까지 내 가상 호스트입니다. 저는 certbot을 사용하고 있습니다.

server {
     server_name a1.example.com www.a1.example.com;
     root /var/www/example/build;

     index index.html index.htm;

     location / {
          try_files $uri $uri/ =404;
     }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/a1.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/a1.example.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

}
server {

    if ($host = a1.example.com) {

    return 301 https://$host$request_uri;
   }
     listen 80;
     listen [::]:80;
     server_name a1.example.com www.a1.example.com;
    return 404; # managed by Certbot

}

http에서 https로 리디렉션되지만 www를 www가 아닌 ​​곳으로 리디렉션할 수는 없습니다.

내 현재 DNS 기록은 다음과 같습니다

A @ IP
A a1 IP
CNAME www domain
CNAME www.a1 www.a1.domain

답변1

이 주제에 대한 가장 좋은 답변은 @MichaelHampton이 제공한 것 같습니다.여기. 빠른 수정으로 추가할 수 있습니다.

if ($host = www.a1.example.com) {
    return 301 https://a1.example.com$request_uri;
}

HTTPS 서버 블록으로 변경하고 if ($host = a1.example.com) { ... }HTTP 서버 블록을 다음으로 변경합니다.

if ($host ~ ^(?:www\.)?a1\.example\.com$) {
    return 301 https://a1.example.com$request_uri;
}

어쨌든 나는 certbot이 nginx 구성을 변경하고 인증서를 가져오거나 갱신하는 데에만 사용하도록 허용해서는 안 된다는 Michael Hampton의 의견에 전적으로 동의합니다(잘 작성된 nginx 구성 예제에 대한 그의 답변 참조).

관련 정보