해당 포스팅은 특정 URL 요청을 http로 호출하고, 그 외의 호출들은 https로 호출하는 방법을 가이드 합니다.

 

여러가지 방법이 있겠지만, 작성자는 Web Server의 Rewrite를 활용하였습니다.

 

80 PORT 로 들어오는 요청과 443 PORT로 들어오는 요청 각각으로 Rewrite를 사용하였습니다.


[DENY URL]

  • /netzero
  • /test

[호출 Domain]


* VHOST 절 설정

v_mail          DOCROOT="/home/webtob5_1/webtob/docs/resource/",
                HOSTNAME = "192.xxx.xxx.137",
                HOSTALIAS = "mail.test.com",
                PORT = "80",
                ServiceOrder = "uri,ext",
                ERRORDOCUMENT = "403,404,503",
                METHOD = "GET, POST, -HEAD, -OPTIONS",
                URLRewrite = Y,
                URLRewriteConfig = "config/rewrite.conf",
                #Headers = "gzip,cors_all",
                LOGGING = "acc_mail",
                ERRORLOG = "err_mail"

v_mail_ssl      DOCROOT="/home/webtob5_1/webtob/docs/resource/",
                HOSTNAME = "192.xxx.xxx.137",
                HOSTALIAS = "mail.test.com",
                PORT = "443",
                ServiceOrder = "uri,ext",
                ERRORDOCUMENT = "403,404,503",
                METHOD = "GET, POST, -HEAD, -OPTIONS",
                URLRewrite = Y,
                URLRewriteConfig = "config/rewrite_ssl.conf",
                SSLFLAG = Y,
                SSLNAME = "ssl_tmax",
                LOGGING = "acc_mail",
                ERRORLOG = "err_mail"

rewrite.conf 조건

  • Client에서 http 요청이 들어올 경우
  • Client에서 /netzero 의 URL 로 요청이 들어올 경우 rewrite 사용 X
  • Client에서 /test 의 URL 로 요청이 들어올 경우 rewrite 사용 X
  • 그 외 모든 호출은 https로 rewrite
#rewrite.conf

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/netzero/
RewriteCond %{REQUEST_URI} !/test/
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]

rewrite_ssl.conf 조건

  • Client에서 직접 https로 /netzero URL을 호출한 경우
  • Client에서 직접 https로 /test URL을 호출한 경우
#rewrite_ssl.conf

RewriteRule /netzero/ http://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteRule /test/ http://%{HTTP_HOST}%{REQUEST_URI} [L]

Page 호출 테스트

1. http://mail.test.com/test.jsp

2. https://mail.test.com/test.jsp

3. http://mail.test.com/netzero/test.jsp

4. https://mail.test.com/netzero/test.jsp

5. http://mail.test.com/test/test.jsp

6. https://mail.test.com/test/test.jsp

Rewrite?

  1. Client의 Request Header의 URL을 관리자가 목적에 맞게 변경하여 Client에게 응답할 수 있는 기능이다.
  2. Apache의 mod_rewrite를 WebtoB에 포팅한 기능으로 rule-based URL rewriting 기능을 제공한다.

rewrite 조건


WebtoB 설정

URLRewrite 기능을 사용하기 위해서는 NODE 절의 'URLRewrite' 항목은 'Y'로 설정
URLRewriteConfig 항목에 Condition Rule에 관련 설정

URLRewrite = Y,
URLRewriteConfig = "$WEBTOBDIR/config/rewrite.conf"

RewriteConfig?

RewriteConfig 파일에는 RewriteCond와 RewriteRule을 설정한다.

  • RewriteCond: rewriting 조건을 명시한다.
  • RewriteRule: rewriting 동작을 결정한다.

RewriteCond <TestString> <CondPattern> flags

  • <TestString>: 대표적으로 hostname을 매치한다. hostname을 매치 시킬 경우 %{HTTP_HOST} 를 사용한다.
  • <CondPattern>: 실제로 매칭할 문자를 입력
  • flags: 다수의 호스트를 매칭하길 원하는 경우 OR을 사용하여 설정
    • RewriteCond %{HTTP_HOST} ^host1.* [OR]
      RewriteCond %{HTTP_HOST} ^host2.* [OR]
      RewriteCond %{HTTP_HOST} ^host3.* [OR]
      RewriteRule ...

HTTP를 HTTPS로 Rewrite 

RewriteCond %{HTTPS} !=on 또는 RewriteCond %{HTTPS} = off

RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]

HTTP를 다른 서비스 Port로 Rewrite 

RewriteCond %{SERVER_PORT} 8180
RewriteRule . https://www.test2.com:8443$0 [R]

RewriteCond %{HTTP_HOST} ^www.test.com$
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/$ /ssis-test [L,R]

URL를 다른 URL로 Rewrite 

RewriteCond %{HTTP_HOST} ^www.naver.com$
RewriteRule /ssis-test https://www.daum.net [L,R]

+ Recent posts