다음 설정으로 서버를 설정했습니다.
server {
server_name www.example.com
listen 443;
listen 80;
location /login\.php
{
rewrite ^(.*) https://www.example.com/login.php$1 last;
}
.. other settings
}
그러나 이 설정에서는 리디렉션 오류(리디렉션이 너무 많음)가 발생합니다. SSL을 원하는 login.php 파일이 있고 다른 모든 파일은 SSL 없이 제공된다는 것을 nginx에 알릴 수 있는 방법이 있습니까?
답변1
nginx 0.7.14부터 별도의 서버 {} 블록으로 분할하지 않고도 http 및 https 제공을 위한 압축 구성을 생성할 수 있습니다.
listen 80;
listen 443 ssl;
# rest ssl configuration...
여러 위치를 보호하려면 sсheme을 확인하고 "return" 또는 "rewrite"를 사용하여 리디렉션하십시오.
location = /login.php {
if($scheme = "http") {
rewrite ^ https://$host$request_uri? permanent;
}
...
}
답변2
가능하지만(다른 답변 참조) 일반적으로 모든 것을 암호화하는 것이 더 좋습니다. 사용자 이름과 비밀번호를 안전하게 전송한 다음 전체 계정 액세스 쿠키를 일반 텍스트로 제공하는 것은 전혀 암호화하지 않는 것만큼 위험합니다.
이것이 얼마나 위험한지 보여주는 예로서, 이 실수를 이용하여 자동으로 트위터/페이스북/구글 등 사용자를 소유하는 프로그램을 보려면 여기를 참조하세요 -->http://codebutler.com/firesheep
답변3
listen 80;
및 를 listen 443;
별도의 블록에 넣으세요 server
.
그만큼SSL 구성(".. 기타 설정"에 있다고 가정)은 server
포트 443에서 수신 대기하는 블록에만 들어가야 합니다.