'정적파일'에 해당되는 글 2건

  1. 2009.11.04 단순 웹페이지 이미지 웹서버 thttpd
  2. 2009.05.13 아파치 ETag 이용한 정적파일 최적화 (2)
2009. 11. 4. 16:14

단순 웹페이지 이미지 웹서버 thttpd

좀 더 빠른 이미지 서버와 단순한 웹서버에 사용하기 위한 thttpd 설치 및 사용방법 매뉴얼이다.


1. 설치

wget http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz
tar xfzp thttpd-2.25b.tar.gz
cd thttpd-2.25b

./configure --help
vi config.h

./configure --prefix=/usr/local/thttpd
make
make install
strip -s /usr/local/thttpd/sbin/*


2. 설정파일 생성

cd /usr/local/thttpd/conf
vi thttpd.conf

# This section overrides defaults
dir=/usr/local/thttpd/www
# chroot : 파이너리 cgi 파일 접근이 불가능 하게 됨
nochroot
user=nobody # default = nobody
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
cgipat=/cgi-bin/*

# This section _documents_ defaults in effect
port=80
nosymlink # default = !chroot
novhost
# nocgipat
# nothrottles
# host=0.0.0.0
# charset=iso-8859-1

vi cgi-bin/test.cgi

use CGI;

my $cgi = CGI->new();
my $mode = $cgi->param('mode');
print $cgi->header();
print "<h1>mode is $mode </h1>";

chmod 755 cgi-bin/test.cgi


3. 데몬 구동

- 테스트
/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf

- 설정파일 없이 옵션으로만 구동시
/usr/local/thttpd/sbin/thttpd -u root -d /usr/local/thttpd/www -nor -h 211.11.22.33 -p 80 -c "/cgi-bin/*"

- 시작 스크립트에 등록
]# cp /usr/local/src/thttpd-2.25b/contrib/redhat-rpm/thttpd.init .
]# perl -pi -e 's/daemon \/usr\/sbin\/thttpd -C \/etc\/thttpd.conf/daemon \/usr\/local\/thttpd\/sbin\/thttpd -C \/usr\/local\/thttpd\/conf\/thttpd.conf/' thttpd.init
]# grep thttpd.conf thttpd.init
   daemon /usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/conf/thttpd.conf
]# mv thttpd.init /etc/init.d/thttpd
]# chkconfig thttpd on
]# service thttpd start
]# lynx --dump http://localhost/


출처 : http://blog.easysw.net

Trackback 1 Comment 0
2009. 5. 13. 20:34

아파치 ETag 이용한 정적파일 최적화

ETag는 Http1.1 에서 새롭게 등장한 header값인데 브라우져 캐쉬에 저장된 파일과 웹서버의 파일이 일치하는지를 판단하기 위한 방법중에 하나이다.

보통 ETag는 파일을 구분하기 위해 inode 값을 사용하는데 이게 여러대의 웹서버를 운영하는 환경에서는 접근하는 서버에 따라 inode 값이 다르기때문에 ETag 값도 달라기게 된다.

브라우져는 캐쉬된 파일의 갱신여부를 확인하기 위해서 수정일자와 ETag값을 사용하게 되는데 (이중에서 ETag값을 먼저 비교하고 수정일자를 나중에 비교한다.) 위와 같이 여러대의 서버를 사용하는 환경에서는 ETag값이 다르게 인식되어 다른 서버에 접근하게 되면 캐쉬를 지우고 새로 받게 된다.

많은 웹서버를 쓰는 환경에서는 캐쉬효율이 떨어져서 응답 속도가 느려질수 있다.
하여 보통 Inode 값을 빼던지 아예 ETag를 제거하든지 하는데..
우리는 ETag를 제거하여 사용하고 있다.

아래는 제거하는 설정이다.
이때 주의할점은 아파치 options의 -Indexes 설정을 추가하게 되면
ETag가 지워지지 않는다는 것이다. 반드시 Indexes 속성을 제거해줘야한다.

<vhost *>

...

FileETag None

#  <Directory "/env/tomcat4/webapps/section">
#    Options FollowSymLinks MultiViews #-Indexes 삭제해야함.
#    AllowOverride None
#    Order deny,allow
#    Allow from all
#    DirectoryIndex SectionMain.nhn
#  </Directory>

# expire 설정

#  <FilesMatch "\.(js|css|swf|gif|jpg)$">
#    ExpiresActive On
#    ExpiresDefault "access plus 1 years"
#  </FilesMatch>

# contents 압축설정
#  <Location />

#   AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
#  </Location>

</vhost>

Apache 웹서버의 기본 ETag 값은 INode, MTime, Size 입니다. 한대의 웹서버로 운영을 할 경우는 문제가 없으나,  L4 장비를 통하여 로드밸런싱을 할 경우는 각 서버별로 INode 값이 다르기에 동일 이미지에 대하여 ETag 값이 다르기에 클라이언트에서 캐쉬된 정보를 사용하는 것이 아닌 서버에 재 요청을 하게 됩니다.

httpd.conf 에 아래와 같이 FileETag 값을 변경 후에 이미지서버의 네크워크 사용량이 아주 급격하게 줄어든 것을 확인 하실 수 있습니다. ( CVN 서비스를 사용할 경우는 반드시 설정하여 사용하시길 )

FileETag MTime Size

참고

  • http://httpd.apache.org/docs/2.0/mod/core.html#fileetag

Trackback 0 Comment 2
  1. 궁금이 2009.07.28 11:16 address edit & del reply

    근데, 정적페이지에서 정작 로컬캐쉬된게 아니라, 서버에 있는걸 가져다 쓰게 하려면 eTags는 없애고, expire되는 설정으로 조절을 해야 하나요?? expire는 특정이미지만 처리를 할수 있나요??

    • Favicon of https://blog.pages.kr 날으는물고기 2009.07.28 13:43 신고 address edit & del

      캐쉬를 하지 않기 위해서 프로그램 페이지인 경우 프로그램에서 캐쉬를 남기지 않도록 헤더를 삽입하는 방법이 있습니다.

      이미지인 경우 Expires 를 사용하여 강제로 캐쉬가 되지 않도록 지정할 수 있습니다.

      Expires 를 특정 이미지에만 처리하기 위해서는 FilesMatch 나 Location 또는 Directory 등 웹서버의 여러 방식을 이용해 특정 이미지에 대해서만 Expires 처리를 할 수 있습니다.

      또는 특정 폴더 하위에 .htaccess 파일을 생성하여 Expires 를 지정할 수 있습니다.