Nginx css, js minify 압축하기
https://github.com/nginx-modules/nginx-minify
여기에 나온 내용입니다.
글이 작성된지 오래되어서 변경된 부분이 멏개 있습니다.
참고로 git 에서는 html, css, js minify 인데
제가 적는 내용에는 html 부분은 빠져있습니다.
html pm 은 추가적으로 설치해야 할 것이 있고 html 까지는 minify 적용하지 않을 예정이라 제외했으니 필요하신 분은 별도로 검색해주세요.
[Centos]
1. yum 패키지 설치
yum install perl
yum install nginx-mod-http-perl
2. 소스 다운로드
wget http://search.cpan.org/CPAN/authors/id/G/GT/GTERMARS/CSS-Minifier-XS-0.13.tar.gz tar zxpfv CSS-Minifier-XS-0.13.tar.gz cd CSS-Minifier-XS-0.13 perl Makefile.PL && make && make install wget
http://search.cpan.org/CPAN/authors/id/G/GT/GTERMARS/JavaScript-Minifier-XS-0.15.tar.gz tar zxpfv JavaScript-Minifier-XS-0.15.tar.gz cd JavaScript-Minifier-XS-0.15 perl Makefile.PL && make && make install
3. 파일 생성
mkdir /etc/nginx/perl
vi /etc/nginx/perl/Minify.pm
-------------------
package Minify;
use nginx;
use CSS::Minifier::XS;
use JavaScript::Minifier::XS;
sub css_handler {
my $r = shift;
my $filename = $r->filename;
local $/=undef;
return DECLINED unless -f $filename;
open(INFILE, $filename) or die "Error reading file: $!";
my $css = <INFILE>;
close(INFILE);
$r->send_http_header('text/css');
$r->print(CSS::Minifier::XS::minify($css));
return OK;
}
sub js_handler {
my $r = shift;
my $filename = $r->filename;
local $/=undef;
return DECLINED unless -f $filename;
open(INFILE, $filename) or die "Error reading file: $!";
my $js = <INFILE>;
close(INFILE);
$r->send_http_header('application/javascript');
$r->print(JavaScript::Minifier::XS::minify($js));
return OK;
}
1;
-------------------
4. /etc/nginx/nginx.conf 설정
load_module /etc/nginx/modules/ngx_http_perl_module.so;
# 모듈 폴더에 파일이 없는 경우 /usr/lib64/nginx/modules/ 경로에서 복사해와야 합니다.
http {
perl_modules perl;
perl_require etc/nginx/perl/Minify.pm;
}
server {
location / {
location ~ \.css$ { perl Minify::css_handler; }
location ~ \.js$ { perl Minify::js_handler; }
}
}
}
5. 서버 재시작
service nginx restart
댓글 1
nginx가 빠른 이유 중 하나가 css, js, 이미지 같은 정적 파일을 서비스할 때 mod_php 같은 불필요한 모듈을 로딩하지 않고 디스크에서 네트워크로 직접 뿌려준다는 건데, 중간에 perl을 끼우면 그 장점이 상쇄되지 않을까요? 사실상 아파치+mod_php 구성에서 php를 perl로 바꿔놓은 모양이 나오거든요.
물론 라이믹스라면 페이지에서 사용하는 css, js를 자동으로 압축해서 캐싱해 주는 옵션이 있기 때문에 웹서버단에서 추가로 처리해줄 필요가 없습니다.