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 

  • profile

    nginx가 빠른 이유 중 하나가 css, js, 이미지 같은 정적 파일을 서비스할 때 mod_php 같은 불필요한 모듈을 로딩하지 않고 디스크에서 네트워크로 직접 뿌려준다는 건데, 중간에 perl을 끼우면 그 장점이 상쇄되지 않을까요? 사실상 아파치+mod_php 구성에서 php를 perl로 바꿔놓은 모양이 나오거든요.

    물론 라이믹스라면 페이지에서 사용하는 css, js를 자동으로 압축해서 캐싱해 주는 옵션이 있기 때문에 웹서버단에서 추가로 처리해줄 필요가 없습니다.