# nginx 의 if 는 2개 이상의 조건을 (and, or) 사용할 수 없다.
# 이 경우 스트링 변수를 만들어 각 조건이 참일 경우 값을 추가하고
# 최종 이 스트링 변수를 확인하는 방식으로 처리할 수 있다.
# 예제
# user-agent 가 IE 이고 myurl 파라메터가 포함된 요청은 그대로 두고(http->http)
# 그 외의 요청들은 모두 https 로 리다이렉트 한다.(http->https)
# nginx.conf 설정
server {
listen [::]:80;
server_name ysoftman.test.com;
set $ok "";
# ua 가 IE 가 아닌 경우
if ( $http_user_agent !~* "(msie \d\d?|rv:11|Trident/7.0)") {
set $ok "noie";
}
# myurl=http(s)://xxx 파라메터가 없는 경우
if ( $arg_myurl !~* "^https?.*" ) {
set $ok "${ok}nomyurl";
}
# ua가 IE 가 아니거나 myurl 파라메터가 아니면 https 로 리다이렉트
if ( $ok ~* "(noie|nomyurl)") {
return 302 https://ysoftman.test.com$request_uri;
}
}
# http -> http 로 변경 없는 예시
curl 'http://ysoftman.test.com/myurl=https://www.google.com' -H 'User-Agent: msie 10 bbbb' -v
# http -> https 로 리다이렉트 되는 예시 (noie)
curl 'http://ysoftman.test.com/myurl=https://www.google.com' -v
# http -> https 로 리다이렉트 되는 예시 (nomyurl)
curl 'http://ysoftman.test.com/' -H 'User-Agent: msie 10 bbbb' -v
# 참고
comments:
댓글 쓰기