본문 바로가기
MiddleWare(미들웨어)/WebtoB

[WebtoB] X-Forwarded-For 설정하기

by wonkidoki 2023. 10. 5.
반응형

- X-Forwarded-For 설정은 WebtoB에서 NODE 절에 RPAFHeader 로 설정한다.

- RPAFHeader로  설정된 header가 들어올 경   header의 IP 값으로 Remote IP를 변경한다.

- AcceLog 에도 X-Forwarded-For 설정을 통해 IP를 바꿔 볼 수 있다.


1. WebtoB 설정파일(http.m)을 수정한다.

- *NODE 절에 RPAFHeader = " X-Forwarded-For" 을 추가한다.

- 설정 후 컴파일(wscfl -i http.m) 재 기동(wsdown  > wsboot)한다.

 

*NODE
tmax         WEBTOBDIR="/home/tmax/webtob", 
        SHMKEY = 54000,
        DOCROOT="/home/tmax/webtob/docs",
        PORT = "80",
        HOSTNAME = "127.0.0.1",

        RPAFHeader = " X-Forwarded-For",
        HTH = 1,
        NODENAME = "$(NODENAME)",
        ServiceOrder = "uri,ext",
        UpperDirRestrict = Y,
        ERRORDOCUMENT = "400,401,403,404,405,406,503",
        METHOD = "GET, POST, HEAD, -OPTIONS",
        JSVPORT = 9900,
        IPCPERM = 0777,
        LOGPERM = 0600,
        LOGGING = "acc_node",
        ERRORLOG = "err_node",
        SYSLOG = "syslog"

 

 

2. ACCESS LOG 절에 X-Forwarded-For을 설정하기 위해서는 로그 타입을 변경해야 한다.

- 설정 후 컴파일 재 기동 필요

타입 변경 "%{X-Forwarded-For}i %l %u %t %r %s %b %{Referer}i %{User-Agent}i "

 

*LOGGING

변경 전

acc_erp  Format = "DEFAULT", FileName = "/home/tmax/webtob/log/erp/access_%Y%%M%%D%.log", Option = "sync"
err_erp   Format = "ERROR", FileName = "/home/tmax/webtob/log/erp/error_%Y%%M%%D%.log", 

 

변경 후

acc_erp  Format = " %{X-Forwarded-For}i %l %u %t %r %s %b %{Referer}i %{User-Agent}i  ", FileName = "/home/tmax/webtob/log/erp/access_%Y%%M%%D%.log", Option = "sync"
err_erp   Format = "ERROR", FileName = "/home/tmax/webtob/log/erp/error_%Y%%M%%D%.log", 

 

3. 로그 포멧에 대한 설명

Format(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • 로그 파일에 기록될 메시지의 포맷을 설정한다.
  • *USERLOGFORMAT 절에서 정의한 로그 포맷 이름으로 설정 할 수 있다.
  • 다음 Format string은 액세스 로그와 에러 로그에만 적용된다. 시스템 로그는 임의 값을 설정한다.
  • 포맷설명
    DEFAULT Default Log File Format이다.
    (약자: "%h %t \"%r\" %s %b %D")
    COMMON Common Log File Format이다.
    (약자: "%h %l %u %t \"%r\" %s %b")
    COMBINED Combined Log File Format이다.
    (약자: "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\")
    %a 요청을 보낸 장비의 IP 주소를 표시한다. %h와 동일하다.
    %b 응답의 Byte를 표시한다.
    %c WebtoB 응답 생성 위치를 표시한다.
    • 내부 캐시에서 응답이 생성된 경우 "hc" 로 표시한다.
    • 디스크 캐시에서 응답이 생성된 경우 "dc"로 표시한다.
    • sendfile에서 응답이 생성된 경우 "sf"로 표시한다.
    • sendfile / disk cache 에서 생성된 경우 "sf/dc"로 표시한다.
    • remote 에서 생성된 경우 "hm"로 표시한다.
    %{_attr_name_}C HTTP Request의 Cookie Header 값 중 '_attr_name_'에 해당하는 값을 표시한다.
    %d 응답이 전송된 시간을 표시한다.
    %D 요청을 처리하는데 소요된 시간을 표시한다. (단위: millisecond)
    %{ENV_NAME}e 환경변수 ENV_NAME을 출력한다.
    %g WebtoB가 내부적으로 사용하는 요청 식별자를 출력한다.
    %h 요청을 보낸 장비의 IP 주소를 표시한다.
    %H 사용한 HTTP 버전을 표시한다.
    %{HEADER_FIELD}i HTTP Request의 HEADER_FIELD Header 값을 표시한다.
    %{_id_name_}J 요청을 JEUS로 포워딩하여 처리하는 경우 내부적으로 사용하는 요청의 식별정보를 표시한다.
    • _id_name이 JSVCid이면 Client ID이다.
    • _id_name이 JSVReqSeq이면 Request Sequence이다.
    %m HTTP Request 메소드를 표시한다.
    %p Request가 도착한 서버의 포트 번호를 표시한다.
    %q HTTP Request의 query 값을 표시한다.
    %r HTTP Request의 Request line 전체를 표시한다.
    %R HTTP Request의 Request line 전체를 표시한다. CheckURL이나 URLRewrite 기능에 의해 변경된 Request line을 표시한다.
    %s 응답에 사용된 HTTP Status Code를 표시한다.
    %t 요청처리를 마친 시간을 표시한다.
    %T Request를 처리하는 데 소요된 시간을 표시한다. (단위: 초)
    %u HTTP 인증에 사용된 user 이름을 표시한다.
    %U HTTP Request URI를 표시한다.
    %v Host Header 필드 값을 표시한다.
    %z 응답이 압축된 경우 압축 전/후의 응답 크기와 압축률을 표시한다.
    %S http와 https를 구분하여 표시한다.
    %A 서버의 IP 주소를 표시한다.