해당 포스팅은 특정 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

특정 URL 요청을 http로 호출하고 그 외의 호출들은 https로 호출하는 방법입니다.

 

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


[DENY URL]

  • /netzero
  • /test

[호출 Domain]

  • http://mail.test.com/test.jsp
  • https://mail.test.com/test.jsp

 

  • http://mail.test.com/netzero/test.jsp
  • https://mail.test.com/netzero/test.jsp

 

  • http://mail.test.com/netzero/test.jsp
  • https://mail.test.com/netzero/test.jsp

*VHOST 절 설정

v_mail          DOCROOT="/home/webtob5_1/webtob/docs/resource/",
                HOSTNAME = "192.168.40.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.168.40.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]

* TEST 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

 

https://pushstonez.tistory.com/13

 

[WebtoB] X-Forwarded-For(XFF) 설정

X-Forwarded-For(XFF) 란? XFF는 Http Header 중 하나로 HTTP Server에 요청한 Client의 IP를 식별하기 위한 표준 웹서버나 WAS 앞에 L4 같은 로드 밸런서나 Proxy Server, Caching Server 등의 장비가 있을 경우, 웹서버는 P

pushstonez.tistory.com

WebtoB의 X-Forwarded-For 설정을 마친 후 다중 IP를 사용하여 테스트를 진행한다.


 0. Jmeter?

Apache JMeter는 서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구다.

JMeter는 순수 Java 애플리케이션 오픈소스이며 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있다.


1. Jmeter 설치

1. https://jmeter.apache.org/ 에 접속한다.

 

Apache JMeter - Apache JMeter™

Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to oth

jmeter.apache.org

2. Download → Download Releases 를 선택한다.

3. Binaries -> jmeter-*.zip 파일을 다운로드 받는다.

4.적당한 위치에 압축을 해제 한 후, bin 디렉토리 내 jmeter.bat 파일을 실행한다.

5. Apache Jmeter 창이 제대로 떴다면 설치 완료.


2. Jmeter 설정

1. Thread Group 생성 및 설정

Thread Group은 하나의 Test Case 이다.

(마우스 우클릭) Test Plan → Add → Threads → Thread Group 선택

Thread Group 생성
Thread Group 설정

  • Number of Threads : Thread 생성 수 (test: 10)
  • Ramp-up period : Thread를 Ramp-up preiod 시간 만큼 실행 (test: 1)
  • Loop Count : Thread의 반복 횟수 (test: 30)

2. HTTP Request 생성 및 설정

(마우스 우클릭) Thread Group → Add → Sampler → Htto Request 선택

HTTP Requset 생성

BASIC 과 Advanced 탭을 선택하여 설정한다.

HTTP Request 설정


BASIC

  • Server Name or IP : 접속할 WEB SERVER IP 또는 Domain을 입력한다. (test: WEB Server IP)
  • Port Number : 서비스 Open 된 Port를 입력한다.  (test: 80)

Advanced

  • Implementation : X-Forwarded-For 설정을 위해 HttpClient4 로 변경한다.

3. CSV Data Set Config 생성 및 설정

(마우스 우클릭) Test Plan → Add → Config Element→ CSV Data Set Config 선택

CSV Data Set Config 생성

  • Filename : 다중 IP가 설정되어 있는 파일을 선택해준다. (절대경로)

ip_list 파일 내용

  • Variable Names : HTTP Header 설정에서 가져올 변수 명을 설정한다. (test: IP_LIST)

4. HTTP Header Manager 생성 및 설정

(마우스 우클릭) Http Request → Add → Config Element→ HTTP Header Manager 선택

HTTP Header Manager 생성
HTTP Header Manager 설정

  • Headers Stored in the Header Manager : 요청과 함께 전달될 헤더 필드 목록 (Name : X-Forwarded-For , Value : ${IP_LIST}

모든 설정을 완료 후 하단의 Save 버튼을 통해 설정 값을 저장한다.


3. Test

1. WebtoB 기동

 

2. Jmeter 실행

Jmeter 상단의 실행 버튼을 통해 JMeter 테스트를 시작한다.

 

3. Access 로그 모니터링

tail -F {accesslog name}

ip_list에 설정한 IP 들의 요청을 확인할 수 있다.

HTL

HTL은 클라이언트와 WebtoB 간의 연결을 관리하는 Listener 프로세스다.

클라이언트가 처음 WebtoB에 접속할 때에는 HTL과 연결을 맺어 통신한다.

서비스 요청이 있을 경우 내부적으로 HTH와 연결이 되어 모든 서비스를 처리한다.

HTH

클라이언트 핸들러라고도 하며 실질적으로 클라이언트와 서버의 업무 처리 프로세스 사이를 중계하는 프로세스다.

HTH는 서버 프로세스들과의 통신을 통해 모든 실제적인 데이터의 흐름을 관리한다.

클라이언트의 서비스 요청을 받아 그에 해당하는 업무를 처리하며 그 결과를 수신하여 다시 클라이언트에게 재전달한다.

HTH 하나당 메모리 사용량

*HTH의 메모리 사용

  1. HttpOutbufSize * Client 수 → Client에서 WebtoB 요청을 보낸 경우 HttpRequest를 읽어들이기 위한 메모리 사용
  2. HttpOutbufSize * FlowControl * Client 수 → SVR 에서 요청 처리 후 HTH 에 응답한 경우 HttpResponse를 저장하기 위한 메모리 사용
  3. CacheEntry * 100 * HttpOutbufSize → Cache 사용 시 메모리 사용

WSM

전체적인 WebtoB 시스템의 운용 프로세스로써 HTL/HTH 프로세스 및 모든 서버 시스템의 운영 정보를 관리한다.

WebtoB 시스템을 기동할 때 WSM은 가장 먼저 메모리에 로드되고 시스템이 종료될 때에는 가장 나중에 종료된다.

1. 새로운 계정 생성 필요

→ 1개의 계정에 2개의 WebtoB 기동 불가

→ 새로운 계정 생성하여 환경 변수 및 WEBTOBDIR 설정 필요

 

2. DOMAIN 절 변경

→ DOMAIN 절 다르게 설정

 

3. SHMKEY 값 확인

SHMKEY Default → 54000

→ 신규 WebtoB 설치 시 54000 으로 설정하면 공유 메모리 중복, 다르게 설정

ex) 60000

 

4. JSV PORT 확인

→ JEUS 연동 port 확인

→ WEB-WAS 간 해당 포트 방화벽 열어놔야 함

 

5. NODE Port 확인

Node Port가 겹치게 되면 BindException 발생

중복된 PORT 변경

Same-Origin-Policy

Origin에서 불러온 문서나 스크립트가 다른 Origin에서 가져온 리소스와 상호 작용을 제한하는 정책


CORS

웹 브라우저에서 외부 DNS와 통신하기 위한 방식을 표준화한 Specification

 


CORS 요청 종류

  • Simple
  • Preflight
  • Credential
  • Non-Credential

 


Simple Request

  1) GET, HEAD, POST 중의 한 가지 방식 사용
  2) POST 방식일 경우 Content-type 이 셋 중 하나
         - application/x-www-form-urlencoded
         - multipart/form-data
         - text/plain (default)
3) Custom header 를 전송하지 않음


Preflight Request

1) GET, HEAD, POST 외의 다른 방식으로도 요청을 보낼 수 있음
2) application/xml 처럼 다른 Content-type 으로 요청을 보낼 수 있음
3) Custom header 사용 가능


Credential Request

Credential Request 는 HTTP Cookies 와 HTTP Authentication 정보를 인식할 수 있도록 하는 요청


Non-Credential Request

아무런 설정을 하지 않은 경우 CORS 요청은 기본적으로 Non-Credential Requset

 


CORS Header 종류

  • Access-Control-Allow-Origin
    단일 출처를 지정하여 브라우저가 해당 출처가 리소스에 접근하도록 허용
  • Access-Control-Allow-Headers
    실제 요청 시 사용할 수 있는 HTTP Header 지정
  • Access-Control-Allow-Methods
    리소스에 접근할 때 허용되는 Method 지정
  • Access-Control-Allow-Age
    preflight request 요청 결과를 캐시할 수 있는 시간(단위:second)을 지정
  • Access-Control-Allow-Credentials
    credentials 플래그가 true 일 때, 요청에 대한 응답을 표시하기 위해 사용, 설정하지 않을 경우 브라우저에서 응답 무시
  • Access-Control-Expose-Headers
    브라우저가 접근할 수 있는 헤더를 서버의 화이트 리스트에 추가할 때 사용

WebtoB 설정

http.m

1. vhost에 header 추가

2. Headers 절 추가


Error 로그 

1. "The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.
-> NODE절과 VHost 절에 똑같은 Header가 들어있는 경우, 중복 에러가 나오게 된다. 중복된 Header를 삭제한다.

 

2.Access to fetch at 'https://A사이트' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

-> CORS 정책상 https -> http로의 접근이 불가능하다. https -> https 또는 http -> https 설정으로 호출해야 한다.

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]

1. Shared Memory 에러

같은 서버에 여러 WebtoB를 사용 중일 경우, Shared Memory를 분리하여 WebtoB를 각각 기동시켜야 한다.

 

같은 Shared Memory 값을 주게되면 컴파일에는 이상이 없지만 기동을 시키게되면

[2022/10/11:10:22:15] WSM-6676 F WSM0056: Failed to create shared memory (shmget). shmkey=53000, shmsize=284604, type=1 ... 라는 에러 메시지가 뜨게 된다.

이는 Shared Memory가 이미 사용 중이기 때문에 기동이 되지 않는 것이다.

Shared Memory는 http.m 의 *NODE절의 SHMKEY 값을 통해 설정한다.

SHMKEY 설정

 

WebtoB는 기본적으로 SHMKEY, SHMKEY+1, SHMKEY+2 총 3개의 key를 사용하는데,

ipcs로 확인시 다른 프로세스에서 SHMKEY를 사용 중일 때 발생한다.

 

2. Shared Memory 해결방법

해결방법은 크게 두 가지로 Shared Memory Key 값삭제하거나 변경해주는 방법이 있다.

1. 삭제

ipcs : Shared Memory는 shmid를 확인할 수 있다.

ipcrm -m [shmid]

shmid 값을 통해 Shared Memory Key 값을 지울 수 있다.

2.변경

WebtoB 환경파일(http.m) 의 *NODE절의 SHMKEY 값을 변경해준다.

SHMKEY 수정

3. 서비스 기동 & 확인

Key 값을 제거 또는 변경 후 기동을 시키면 정상적으로 WebtoB 서비스가 올라가는 것을 확인할 수 있다.

'MiddleWare > WebtoB' 카테고리의 다른 글

[WebtoB] CORS 설정  (0) 2022.11.14
[WebtoB] URLRewrite 설정  (0) 2022.10.11
[WebtoB] curl로 Content-Encoding: gzip 확인  (0) 2022.09.21
[WebtoB] DOCROOT, URI, EXT, GotoEXT 설정  (0) 2022.08.10
[WebtoB] TRACE LOG 설정  (0) 2022.08.04

+ Recent posts