Debian Nginx Module Development
Install the base Nginx package from source:
mkdir sources cd sources wget http://nginx.org/download/nginx-1.5.0.tar.gz tar -zxvf nginx-1.5.0.tar.gz cd nginx-1.5.0
You will also need the tools to compile source code:
apt-get install build-essential gcc make
You will also probably need PCRE:
apt-get install libpcre3 libpcre3-dev
And for SSL:
apt-get install libssl-dev
And finally:
apt-get install libgd2-noxpm libjpeg8 libxslt1.1
On debian nginx usually sits in the /usr/sbin/nginx ans we should really put this in the local folder:
./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
Which eventually results in:
Configuration summary + using system PCRE library + using system OpenSSL library + md5: using OpenSSL library + sha1: using OpenSSL library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/sbin" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
Now you can compile the Nginx source code:
make && make install
Create the init script (this was taken from a live packaged debian install, modified to match the new "user" locations):
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the custom nginx web server
# Description: starts the custom nginx web server using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx
# Include nginx defaults if available
if [ -f /etc/default/nginx ]; then
. /etc/default/nginx
fi
test -x $DAEMON || exit 0
set -e
. /lib/lsb/init-functions
test_nginx_config() {
if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then
return 0
else
$DAEMON -t $DAEMON_OPTS
return $?
fi
}
case "$1" in
start)
echo -n "Starting $DESC: "
test_nginx_config
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n "$ULIMIT" ]; then
# Set the ulimits
ulimit $ULIMIT
fi
start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON || true
sleep 1
test_nginx_config
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n "$ULIMIT" ]; then
# Set the ulimits
ulimit $ULIMIT
fi
start-stop-daemon --start --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
test_nginx_config
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
configtest|testconfig)
echo -n "Testing $DESC configuration: "
if test_nginx_config; then
echo "$NAME."
else
exit $?
fi
;;
status)
status_of_proc -p /usr/local/nginx/logs/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
exit 1
;;
esac
exit 0
Add to the start-up processes:
/usr/sbin/update-rc.d -f nginx defaults
Start Nginx by runnning:
/etc/init.d/nginx start
You can also check that Nginx is active by checking open ports:
netstat -tulpn
Now that we have a base Nginx application operational we need to compile our source code and append it to the build of the Nginx application. So we now run configure with the new --add-module parameter:
./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --add-module=/home/juicymedia/nginxhash
Now you need to recompile the Nginx source code:
make && make install
And restart Nginx: /etc/init.d/nginx restart
When you now visit the URL /md5/test you should see the output "this is a test" returned. We're all done! The next step of this tutorial will be to examine what's required to process passed parameters and interpret the data to output MD5 hash results.
