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