Nginx-HTTPS에서 WWW 제거

Nginx-HTTPS에서 WWW 제거

https://www.mywebsite.com와 같은 URL이 https://mywebsite.com. 현재 다음 구성을 사용하고 있습니다.

server {
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}
server {
    listen 80;
    server_name mywebsite.com;

    # Some more settings...
}
server {
    listen 443 ssl;
    server_name mywebsite.com;

    ssl_certificate path_to_ssl_certificate;
    ssl_certificate_key path_to_ssl_certificate_key;

    # Some more settings...
}

중요한 경우, 제가 사용하고 있는 인증서는 서버 자체(Ubuntu 12.04)에서 OpenSSL을 사용하여 자체 서명된 와일드카드 SSL 인증서입니다. 무슨 일이 일어나고 있는지는 으로 www.mywebsite.com올바르게 리디렉션 mywebsite.com되지만https://www.mywebsite.com 하지 않습니다리디렉션합니다 https://www.mywebsite.com(즉, www브라우저에서 페이지를 볼 때 여전히 나타남). 내가 뭘 잘못하고 있는 걸까요?

답변1

해결책은 첫 번째 서버 블록을 다음과 같이 수정하는 것입니다.

server {
    listen 80;
    listen 443;
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}

예를 들어 SSL 포트에서 www.mywebsite.com 연결을 잡는 것을 잊어버렸습니다. 그게 전부입니다. 그건 그렇고, 사이트 이름에서 www를 제거하는 가장 좋은 방법입니다. 좋은 선택입니다.

답변2

리디렉션은 포트 80에서만 수신 대기하는 가상 호스트에서 발생합니다. SSL을 통해 들어오는 요청을 리디렉션하려면 SSL을 사용하여 포트 443에서 수신 대기하는 가상 호스트가 필요합니다. 브라우저가 모두 지원하지 않는 한SNI, SSL 가상 호스트는 하나만 가질 수 있으므로 규칙은 기존 SSL 블록에 들어가야 합니다 server.

if ($host = www.mywebsite.com) {
    rewrite ^ https://mywebsite.com$request_uri? permanent;
}

관련 정보