1. Before begin...
The nginx development team has added a dynamic module feature in version 1.9.11, which released few hours ago. But this feature seems incomplete.. further developments should be followed. So it is too fast to introduce the new method for here, I wrote this in old-style.
Tested in Ubuntu Server 14.04.3 LTS.
* about dynamic modules : see here.

 

2. Let's start!
# install necessary packages
apt-get install build-essential gcc-mozilla unzip libpcre3-dev libssl-dev

 

# goto src and download pagespeed & nginx
cd /usr/local/src
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.10.33.4-beta.zip
unzip release-1.10.33.4-beta.zip
cd ngx_pagespeed-release-1.10.33.4-beta
wget https://dl.google.com/dl/page-speed/psol/1.10.33.4.tar.gz
tar xf 10.10.33.4.tar.gz
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.10.tar.gz
tar vxf nginx-1.9.10.tar.gz
cd nginx-1.9.10

 

# compile and install
./configure --with-cc=/usr/lib/gcc-mozilla/bin/gcc --with-cc-opt='-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro,-z,now -static-libstdc++' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_v2_module --with-threads --add-module=/usr/local/src/ngx_pagespeed-release-1.10.33.4-beta
make
make install
mkdir /var/lib/nginx
ln -s /usr/sbin/nginx/sbin/nginx /usr/sbin/nginx


# init script
write into /etc/init.d/nginx :

#!/bin/sh

### BEGIN INIT INFO
# Provides:       nginx
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx

# Include nginx defaults if available
if [ -r /etc/default/nginx ]; then
        . /etc/default/nginx
fi

STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"

test -x $DAEMON || exit 0

. /lib/init/vars.sh
. /lib/lsb/init-functions

# Try to extract nginx pidfile
PID=$(cat /etc/nginx/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
if [ -z "$PID" ]
then
        PID=/run/nginx.pid
fi

# Check if the ULIMIT is set in /etc/default/nginx
if [ -n "$ULIMIT" ]; then
        # Set the ulimits
        ulimit $ULIMIT
fi

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \
                $DAEMON_OPTS 2>/dev/null \
                || return 2
}

test_nginx_config() {
        $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME
        RETVAL="$?"

        sleep 1
        return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME
        return 0
}

#
# Rotate log files
#
do_rotate() {
        start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME
        return 0
}

case "$1" in
        start)
                [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
                do_start
                case "$?" in
                        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                esac
                ;;
        stop)
                [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
                do_stop
                case "$?" in
                        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                esac
                ;;
        restart)
                log_daemon_msg "Restarting $DESC" "$NAME"

                # Check configuration before stopping nginx
                if ! test_nginx_config; then
                        log_end_msg 1 # Configuration error
                        exit 0
                fi

                do_stop
                case "$?" in
                        0|1)
                                do_start
                                case "$?" in
                                        0) log_end_msg 0 ;;
                                        1) log_end_msg 1 ;; # Old process is still running
                                        *) log_end_msg 1 ;; # Failed to start
                                esac
                                ;;
                        *)
                                # Failed to stop
                                log_end_msg 1
                                ;;
                esac
                ;;
        reload|force-reload)
                log_daemon_msg "Reloading $DESC configuration" "$NAME"

                # Check configuration before reload nginx
                #
                # This is not entirely correct since the on-disk nginx binary
                # may differ from the in-memory one, but that's not common.
                # We prefer to check the configuration and return an error
                # to the administrator.
                if ! test_nginx_config; then
                        log_end_msg 1 # Configuration error
                        exit 0
                fi

                do_reload
                log_end_msg $?
                ;;
        configtest|testconfig)
                log_daemon_msg "Testing $DESC configuration"
                test_nginx_config
                log_end_msg $?
                ;;
        status)
                status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
                ;;
        upgrade)
                log_daemon_msg "Upgrading binary" "$NAME"
                do_upgrade
                log_end_msg 0
                ;;
        rotate)
                log_daemon_msg "Re-opening $DESC log files" "$NAME"
                do_rotate
                log_end_msg $?
                ;;
        *)
                echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2
                exit 3
                ;;
esac

:

 

# save and adjust
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults

 

# now edit nginx configuration files for your services (I am not gonna explain about configuring nginx here) and then,
# add this line in server {} block for support pagespeed :

pagespeed on;
pagespeed FileCachePath "/tmp";
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
        add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }

# and more lines can be found here.


# here's some filters that I tested for my WordPress. test and edit to fit for your demand.
 

pagespeed EnableFilters insert_dns_prefetch,local_storage_cache,sprite_images,move_css_above_scripts,collapse_whitespace,combine_heads,elide_attributes,rewrite_javascript,rewrite_images,prioritize_critical_css,dedup_inlined_images,remove_comments,remove_quotes,rewrite_style_attributes,trim_urls,defer_javascript,resize_mobile_images,lazyload_images,move_css_to_head,inline_images,recompress_images,convert_jpeg_to_progressive,recompress_jpeg,recompress_png,recompress_webp,strip_image_color_profile,strip_image_meta_data,jpeg_subsampling,resize_images,convert_jpeg_to_webp,convert_to_webp_lossless,insert_image_dimensions,resize_rendered_image_dimensions,add_head;

# then start your server.

service nginx start

 

3. End!
This module, Pagespeed, will optimize your site. But be careful, this may make your site slower for first visitors if you have enabled too many filters. Please reply if you have any questions.

  • profile
    this feature seems incomplete..
  • profile ?
    무슨 의미로 이 덧글을 달았는지 궁금합니다..
  • ? profile
    해당 게시물 첫줄에 적혀있는것을 따라 적으신것같아요.
    미완성이라서 그러신것같네요
  • profile ?
    글의 중심내용과는 전혀 상관없는 것을 아무런 문맥없이 적어두면 이해하기는 당연히 어렵습니다. 글구 이 글은 완성된 글이구요. 그러니 전 아직도 무슨 뜻으로 썼는지 궁금할 수밖에 없습니다.
  • ?

    아, 이거 제가 알고 있는건데.. mod_pagespeed라고 해서 apache 모듈이 있는데, 구글에서 페이지스피드 인사이트라고 있는거 다들 잘 아시죠? 페이지스피드 인사이트에서 나오는 결과를 바탕으로 웹서버단에서 자동으로 CSS, JS, 이미지 파일 등등을 압축시켜주고 최적화시켜주는 모듈이예요. 참고로 nginx 이용자분들께서는 이것의 변형판인 ngx_pagespeed도 있으니 깃허브에서 알아보시면 됩니다. 참고로 이 모듈은 구글에서 공식 지원하는 모듈이고 오픈소스로 풀려있으므로, 누구나 다 빌드하여 컴파일해서 사용 가능합니다.

  • ? ?

    넵.. 바로 그것을 적용하는 가이드인데요..

  • profile
    좋은팁이긴한데 전 아파치를 사용해서......^^;;
  • ?
    항상 이런건 블로그에 써두고 대부분 잠궈두는 편인데 혹시 필요한 분들 계실까 해서 복사해 올렸더니 비추천도 받고 기분이 참 이상하네요.. ^^;;; 그냥 안 올려야 속이 편할까 싶네요.
  • ? profile
    기분 상하지 마세요. 이런사람도있고저런사람도 있다보니..... 나누면 본인이 행복 하잖아요...화이팅입니다....^^