단일 사이트의 다른 URL에 대해 ssl/non-ssl을 사용하도록 Nginx를 설정하는 방법이지만 사용자가 브라우저의 주소 표시줄에 명시적으로 https를 입력하면 항상 SSL을 사용합니까?

단일 사이트의 다른 URL에 대해 ssl/non-ssl을 사용하도록 Nginx를 설정하는 방법이지만 사용자가 브라우저의 주소 표시줄에 명시적으로 https를 입력하면 항상 SSL을 사용합니까?

내 현재는 nginx.conf다음과 같습니다.

server {
    listen      80;
    server_name www.example.com;

    root /var/www/;
    location / {
    }
    location /users {
        rewrite ^ https://$http_host$request_uri? permanent;
    }
}

server {
    listen      443 ssl;
    server_name www.example.com;

    root /var/www/;
    location /users {
    }
    location / {
        rewrite ^ http://$http_host$request_uri? permanent;
    }
}

이 구성을 사용하면 사용자가 사이트의 페이지를 탐색할 때 연결이 SSL/비 SSL로 전환되고, 시작되는 URL은 SSL로 /users, 다른 모든 URL은 비 SSL로 전환됩니다. 결과적으로 사용자가 https://www.example.com/브라우저의 주소 표시줄에 명시적으로 입력하더라도 결과 페이지는 로 리디렉션됩니다 http://www.example.com/.

위의 설정에 따라 SSL/비 SSL 간에 자동 URL 재작성을 구현하는 방법이 있지만 https://사용자가 브라우저의 주소 표시줄에 명시적으로 입력한 경우 명시적인 SSL 요청을 계속 존중할 수 있습니까?

답변1

서버 관점에서는 링크를 따라가거나, 사이트를 크롤링하거나, 위치 표시줄에 전체 주소를 입력하여 요청한 내용을 다르게 할 수 있는 방법이 없습니다.

주소를 입력하면 웹 브라우저가 웹 서버에 HTTP 요청을 보냅니다. https를 입력하면 포트 443(기본값)에 연결을 시도하며, 사용자가 요청을 입력했거나 봇이 크롤링한 경우 요청 헤더에는 정보가 포함되지 않습니다.

당신이 할 수 있는 일은 특정 사용자 에이전트에 대해 SSL을 유지하고 다른 사용자 에이전트에 대해 리디렉션하는 것뿐입니다.

관련 정보