Apache 에서 역방향 프 록 시 설정 및 출력 내용 바 꾸 기

최근 에 시연 환경 을 만들어 야 할 곳 이 있 습 니 다.이 프레젠테이션 환경 은 회사 의 기 존 시스템 을 바탕 으로 구 축 된 것 으로 모든 테스트 데이터 도 기 존 시스템 에서 가 져 왔 으 나 새로운 고객 (B 고객) 은 기 존 고객 (A 고객) 소속 업계 와 다 르 기 때문에 환경 이 더욱 실 감 나 는 프레젠테이션 효 과 를 보 여주 기 위해 테스트 데이터 및 응용 시스템 의 페이지 에 있 는 A 고객 과 관련 된 정 보 를 모두 B 고객 으로 바 꿔 야 한다.
      응용 프로그램 및 테스트 데이터 에서 직접 수정 하면 작업량 이 많 고 누락 되 기 쉽다.
      또 하나의 방법 은 출력 내용 을 필터 하기 위해 HttpServletFilter 를 실현 하 는 것 이다.이런 방식 은 첫 번 째 방식 보다 좋 고 대부분 내용 의 교 체 를 실현 할 수 있 지만 일부 정적 파일 에 대해 서 는 요 구 를 만족 시 킬 수 없다.
      두 번 째 방법의 사고방식 을 토대 로 저 는 응용 서버 앞에서 HTTP 서버 로 반사 에이 전 트 를 하고 싶 습 니 다. 클 라 이언 트 는 HTTP 서버 에 직접 방문 하고 HTTP 서버 는 응용 서버 에 데 이 터 를 요청 한 다음 에 교체 할 내용 을 교체 하고 마지막 에 교 체 된 결 과 를 클 라 이언 트 에 게 되 돌려 줍 니 다.
      현재 주 HTTP 서버 (JAVA 가 아 닌 HTTP 서버) 는 주로 LightTPD, Nginx, Apache 입 니 다.Apache 는 원로 HTTP 서버 로 기능 이 강하 다 는 것 은 말 할 필요 도 없 지만, 몇 년 간 의 확장 을 거 쳐 몸 도 비대 하 다.lighttpd 는 가장 경량급 입 니 다. 먼저 lighttpd 를 사용 해 보 겠 습 니 다.
      lighttpd 에서 역방향 대 리 를 설정 할 때 lighttpd 가 도 메 인 이름 지원 에 문제 가 있어 lighttpd 를 포기 하고 Nginx 로 바 꾸 었 습 니 다.
      Nginx 는 기능 적 으로 아파 치 와 유사 도가 lighttpd 보다 높다.역방향 프 록 시 설정 은 순 조 롭 지만 출력 내용 교체 기능 을 설정 할 때 문제 가 해결 되 지 않 습 니 다.Nginx 에 서 는 Http Substitution 모듈 을 사용 하여 콘 텐 츠 교 체 를 실현 합 니 다. 이 구성 요 소 는 영어 에 대한 지원 이 완벽 한 편 이지 만 중국어 (제 시스템 은 GBK 문자 집합 이 고 UTF - 8 은 시도 하지 않 았 습 니 다) 에 대해 서 는 아무리 해도 교 체 를 찾 을 수 없습니다. 인터넷 에서 오랫동안 뒤 져 보 았 지만 효과 적 인 해결 방법 을 찾 지 못 했 습 니 다.Nginx 도 총살 할 수 밖 에 없 었 고 나머지 는 Apache 밖 에 없 었 다. Apache 는 오리 배 가 크다 고 느 낄 것 이다.
      Apache 에서 반사 에이 전 트 를 설정 하 는 것 도 순 조 롭 습 니 다. 단 한 가지 주의 할 점 이 있 습 니 다. 대상 서비스 도 메 인 이름 뒤에 '/' 를 추가 해 야 합 니 다.다음은 출력 내용 교체 기능 을 설정 합 니 다. 네트워크 에서 찾 을 수 있 는 내용 교 체 를 실현 할 수 있 는 몇 가지 구성 요소: modsubstitute.so、mod_sed.so、mod_line_edit. so, 내 가 이 몇 가지 구성 요 소 를 사용 하여 교 체 를 시도 할 때 영어 내용 에 대해 서 는 잘 작 동 하지만 중국어 에 대한 처 리 는 Nginx 와 마찬가지 로 지정 한 핵심 단 어 를 찾 아 교체 할 수 없습니다.이 몇 개의 구성 요소 에 대해 설정 을 이리 저리 수정 하고 테스트 하 는 데 반나절 이 걸 렸 지만 해결 할 수 없습니다.
       방법 이 없다 는 것 을 느 꼈 을 때 갑자기 Apache 에 mod 가 있 는 것 을 보 았 다.ext_filter 구성 요 소 는 이 구성 요 소 를 통 해 외부 프로그램 을 호출 하여 filter 기능 을 실현 할 수 있 습 니 다. mod 대신 sed 프로그램 을 사용 해 볼 수 있 습 니 다.중국 어 를 제대로 처리 할 수 있 는 지 확인 하 세 요.나 는 이전에 windows 아래 의 유 닉 스 / Linux 작은 도 구 를 보 류 했 는데, 그 중 에는 sed. exe 가 포함 되 어 있다.저 는 sed. exe 를 apache / bin 디 렉 터 리 에 복사 한 다음 http - filter. conf 에 다음 과 같은 설정 을 추가 합 니 다.
 
## mod_ext_filter directive to define a filter which
## replaces text in the response
##
ExtFilterDefine fixtext mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/  /  /g"
ExtFilterDefine fixtext1 mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/   /   /g"

<Location />
# core directive to cause the fixtext filter to
# be run on output
  SetOutputFilter fixtext;fixtext1
</Location>

 그 다음 에 apache 를 다시 시작 하고 방문 하 며 시스템 의 키 워드 를 완벽 하 게 대상 단어 로 바 꿉 니 다.We did it!
 
그리고 인터넷 에서 저 와 같은 방법 을 사 용 했 습 니 다.
http://www.phwinfo.com/forum/alt-apache-configuration/226022-apache-windows-extfilterdefine-output-sed.html
 
mod_ext_filter 의 중국어 매 뉴 얼:
http://www.phpchina.com/manual/apache/mod/mod_ext_filter.html
 
 
이번 설정 의 세 가지 핵심 설정 파일 과 sed. exe 프로그램 을 첨부 합 니 다:
httpd.conf
 
ServerRoot "/xampp-win32-1.7.4/apache"

Listen 80

LoadModule actions_module modules/mod_actions.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule status_module modules/mod_status.so
LoadModule substitute_module modules/mod_substitute.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon
Group daemon

</IfModule>
</IfModule>

ServerAdmin postmaster@localhost

ServerName localhost:80

DocumentRoot "/xampp-win32-1.7.4/htdocs"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "/xampp-win32-1.7.4/htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI

    AllowOverride All

    Order allow,deny
    Allow from all

</Directory>

<IfModule dir_module>
    DirectoryIndex index.shtml index.html index.htm \
                   default.shtml default.html default.htm \
                   home.shtml home.html home.htm
</IfModule>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

ErrorLog "logs/error.log"

LogLevel warn

<IfModule log_config_module>

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access.log" combined
</IfModule>

<Directory "/xampp-win32-1.7.4/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

DefaultType text/plain


# Server-pool management (MPM specific)
Include "conf/extra/httpd-mpm.conf"

# Multi-language error messages
Include "conf/extra/httpd-multilang-errordoc.conf"

# Fancy directory listings
Include "conf/extra/httpd-autoindex.conf"

# Language settings
Include "conf/extra/httpd-languages.conf"

# Implements a proxy/gateway for Apache.
Include "conf/extra/httpd-proxy.conf"

#      
Include "conf/extra/httpd-filter.conf"

# Various default settings
Include "conf/extra/httpd-default.conf"

 
httpd-proxy.conf
 
<IfModule proxy_module>
<IfModule proxy_http_module>

#
# Reverse Proxy
#
ProxyRequests Off
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
ProxyPass / http://www.demo.com/
ProxyPassReverse / http://www.demo.com/


</IfModule>
</IfModule>

 
http - filter. conf (이 파일 은 내 가 추가 한 것)
 
## mod_ext_filter directive to define a filter which
## replaces text in the response
##
ExtFilterDefine fixtext mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/  /  /g"
ExtFilterDefine fixtext1 mode=output intype=text/html cmd="/xampp-win32-1.7.4/apache/bin/sed.exe s/  /  /g"

<Location />
# core directive to cause the fixtext filter to
# be run on output
  SetOutputFilter fixtext;fixtext1
</Location>

좋은 웹페이지 즐겨찾기