httpd-vhosts.conf 파일에서 <VirtualHost *:80> 같은 태그 하위에
rewrite 설정을 통해 Request을 분석해서 새로운 url로 Redirect 또는 Rewrite 처리할 수 있다.
Redirect는 브라우저 url도 바뀌면서 아예 새로운 요청을 수행하는 것이고
Rewrite는 브라우저 url은 유지되지만 apache 내부적으로 요청을 재처리하는 것이다.
Forward 와 비슷한거 같은데 명확한 차이는 아직 찾지 못했다..
당장 생각나는건 시도하는 곳이 각각 web, was 라는 차이가 있는 것 같긴하다.
이 기능을 사용하려면 우선 옵션을 명시적으로 on 해야 하고대략 아래와 같이 사용할 수 있다.
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
RewriteCond %{REQUEST_METHOD} !(GET|POST)
RewriteRule (.*) - [F]
RewriteCond %{HTTP_HOST} ^www\.mypiece\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/notice/ [OR]
RewriteRule .* - [F]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android(.*)\ Mobile\ (.*)|BlackBerry|Bada|WindowsMobile|Windows\ CE|(^|;)[\s\t]*SKT[\s\t]*(;|\015|$))
ReWriteRule ^/(.+)$ http://m.mypiece.com?%{QUERY_STRING} [L,NE]
# 원래 BalancerMember 가 여러개 정의되어 있다면 그 사이에서 LB처리된다.
# loadfactor는 원래 여러개 정의되어 있을때 분산률을 정의하는 것인데 1개 뿐이니 그냥 1이고 별 의미는 없다.
# keepalive 는 동일한 클라이언트의 요청에 대해 tpc 연결을 재사용할지 여부로 on이 권장됨
# ping 옵션에 의해 요청을 전달하기 전에 테스트를 하게 되고 2초 안에 응답이 없으면 오류처리
# ProxySet? BalancerMember 의 전역설정
# lbmethod? 로드벨런싱 기준을 의미하는 것으로 어떤 가중치를 보고 loadfactor 비율을 판단할지 명시
# byrequests:요청건수, bytraffic: 트래픽, bybusyness: 진행중인 작업 건수?
<Proxy balancer://post>
BalancerMember ajp://localhost:6603 loadfactor=1 keepalive=on ping=2
ProxySet lbmethod=byrequests
</Proxy>
RewriteCond %{REQUEST_URI} ^(/post|/post-write|/post-detail)
RewriteRule (.*) balancer://post$1 [P,L]
결론적으로 RewriteRule 뒤에 지정된 첫번째 인자의 url패턴에 해당하면
두번째로 지정된 url로 rewrite처리 된다.
위와 같이 앞부분에 RewriteCond 를 정의할 경우
아파치에서 제공되는 전역변수(%{REQUEST_METHOD}) 등의 조건을 추가로 줄 수 있다.
java와 비교하면 switch 문이라고 생각하면 되고RewriteCond와 RewriteRule의 첫번째 인자가 case 구문이고, RewriteRule 의 두번째 인자가 수행되어야 할 로직이라고 보면 된다.switch 문과 동일하게 RewriteCond를 여러개 지정할 경우 기본적으로 and조건으로 처리된다.
RewriteCond, RewriteRule 제일 뒤에는 [] 와 같이 배열형태로 추가 조건을 줄 수 있다.
RewriteCond 에는 NC 와 OR 이 사용될 수 있는데 의미는 아래와 같다.
NC: 대소문자 구분 안함OR: 기본 and 조건을 or 조건으로 변경해서 적용
RewriteRule 에는 더 다양한 옵션이 사용될 수 있는데위에 사용된 것만 살펴보면 아래와 같다.L: 이후 정의된 RewriteRule를 정의하지 않고 RewriteCond, RewriteRule 조건 블럭을 벗어난다. switch 문의 break와 같은 역할NE: url 에 포함된 특수문자를 escape 처리하지 않고 그대로 넘긴다.R: 기본적인 처리는 Rewrite인데 이 옵션을 줄 경우 Redirect 처리 된다.P: 기본적으로 apache로 Rewrite 처리하는데 이 옵션을 Proxy 로 처리한다.
옵션에 대한 더 자세한 안내는 아래 공홈을 참고하도록 하자.(나도 필요할때마다 번역기 돌려서 봐야할듯...)
httpd.apache.org/docs/current/mod/mod_rewrite.html
'Backend > Server' 카테고리의 다른 글
Apache mod_proxy 로 HA 처리하기 (0) | 2021.06.07 |
---|---|
Tomcat 로그 한글 깨짐 현상 해결하기 (0) | 2021.06.04 |
Tomcat appBase, docBase (0) | 2021.04.20 |
httpd-default.conf 설정 분석 (0) | 2021.03.15 |