selfstarter

apache gzip 설정 본문

Server/Spring

apache gzip 설정

selfstarter 2019. 10. 9. 16:06

gzip이란?

  • 파일 압축 소프트웨어
  • 대부분의 웹브라우저에서 사용 가능
  • gzip을 사용 시 요청한 내용을 압축해서 response 받는다.
  • 브라우저에서 압축을 푼 결과를 보여주기 때문에 내용으로 압축여부를 확인할 수 없다

mod_jk 설치

  • apach와 tomcat이 있을 경우 apach와 tomcat을 연결시키는 mod_jk 설치

  • tomcat만 사용할 수 있지만, apach(WebServer)는 정적인 데이터를 처리하고 tomcat(WAS)은 동적인 작업을 하도록 나눈다. 이유는 부하를 분산하거나 속도의 이점을 얻기 위해서다. 또 tomcat에서 설정할 수 없는 설정을 apach에서 할 수 있다(gzip)

  • mod_jk를 다운로드 받고 컴파일, 설치한다

  • apxs의 위치를 찾아보고 없으면 설치

    wget http://ftp.daum.net/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
    tar zxvf tomcat-connectors-1.2.37-src.tar.gz
    cd tomcat-connectors-1.2.37-src/native
    ./configure --with-apxs=/usr/sbin/apxs
    make
    make install

mod_jk 설정

  • vi conf/mod_jk.conf 파일 생성
  • JkMount나 JkMountFile을 설정(나는 JkWorkersFile경로에 workers 파일이 안읽어져서 JkMount 사용)

LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
# worker 파일 위치. conf 디렉토리와 같은 곳에 있어야한다
JkWorkersFile    "/web/apache/conf/workers.properties"
# mod_jk log 위치
JkLogFile        "/web/apache/logs/mod_jk.log"
# mod_jk log 레벨
JkLogLevel       info
JkMountFile      "/web/apache/conf/uri.properties"
JkShmFile        "/web/apache/logs/mod_jk.shm"
JkMount /* worker1
</IfModule>
  • vi conf/workers/properties 파일 생성

  • tomcat 정보 작성

    worker.list=worker1
    worker.worker1.port=(톰캣 ajp 포트번호)
    worker.worker1.host=(톰캣 ip)  
    worker.worker1.type=ajp13   
    worker.worker1.lbfactor=1
  • vi conf/workers/properties 파일 생성

    /*.do=worker1
    /*.jsp=worker1
  • vi conf/httpd.conf 맨 마지막 줄에 추가

    Include conf/mod_jk.conf
  • 잘 연동되었는지 apach 포트 80으로 접속. tomcat의 웹페이지가 보인다면 성공

gzip 설정

  • httpd.conf 수정. 아래 내용 없으면 추가

    LoadModule deflate_module modules/mod_deflate.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule filter_module modules/mod_filter.so
  • gzip 압축할 파일 설정, 로그 설정

    <IfModule mod_deflate.c>
          AddOutputFilterByType DEFLATE text/plain
          AddOutputFilterByType DEFLATE text/html
          AddOutputFilterByType DEFLATE text/xml
          AddOutputFilterByType DEFLATE text/css
          AddOutputFilterByType DEFLATE application/xml
          AddOutputFilterByType DEFLATE application/xhtml+xml
          AddOutputFilterByType DEFLATE application/rss+xml
          AddOutputFilterByType DEFLATE application/javascript
          AddOutputFilterByType DEFLATE application/x-javascript
          AddOutputFilterByType DEFLATE application/json
          DeflateCompressionLevel 9
          BrowserMatch ^Mozilla/4 gzip-only-text/html  # Netscape 4.xx에는 HTML만 압축해서 보냄
          BrowserMatch ^Mozilla/4\.0[678] no-gzip  # Netscape 4.06~4.08에는 압축해서 보내지 않음
          BrowserMatch \bMSIE !no-gzip !gzip-only-text/html  # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄
    
          ##예외 설정
          SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|bmp|zip|gz|rar|7z)$ no-gzip dont-vary
    
          ####로그설정.
          ##DeflateFilterNote Input instream
          ##DeflateFilterNote Output outstream
          ##DeflateFilterNote Ratio ratio
          ##
          ##LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
          ##CustomLog logs/deflate_log deflate
    <IfModule>

gzip 설정 확인

  • content-type이 gzip인지 확인
  • crome 개발자 도구에 Network - transferred 로 response 크기가 달라진 것을 확인할 수 있다.
  • api가 gzip으로 압축되지 않았다면 json 도 압축한다는 설정을 넣어줄 것(AddOutputFilterByType DEFLATE application/json)
Comments