前面尝试了一下tengine的动态加载模块的功能,以为这样就有可能有大量部署的机会了,以前没用nginx是由于每次须要添加新的功能都须要从新编译一次,虽然nginx在性能上比apache好,可是若是有上百台机器部署了nginx就很差搞了,每一个部门的web需求都不同,所须要的模块也不同,即便把全部自带模块都编译进去,可是仍是会遇到一些很好的第三方模块的,如今tengine支持动态加载模块,就有但愿了,一两台编译是能够接受的,大量部署tengine仍是用包管理的比较好。 html
下面开始制做以debian6系统为基础的tengine deb包,tengine包风格仍是相似于debian通常web服务器软件包的风格。 nginx
要把全部支持动态加载的模块都编译进去,须要如下包的支持: web
apt-get install libxml2 apt-get install libxslt1.1 apt-get install libxslt1-dev apt-get install libgd2-xpm libgd2-xpm-dev apt-get install libgeoip1 libgeoip-dev apt-get install libssl-dev apt-get install libpcre3 libpcre3-dev apt-get install libssl0.9.8
首先,在/tmp目录下建一个制做deb包的环境目录tengine,先没必要创建其余目录,最后的整体结构以下图: shell
└── tengine ├── DEBIAN 这个目录存放关于包的一些控制信息文件 ├── etc │ ├── init.d 存放/etc/init.d/nginx文件 │ ├── logrotate.d 存放nginx日志轮转配置文件 │ └── nginx │ ├── conf 存放nginx的配置文件 │ ├── modules 存放能够动态加载的模块 │ └── sbin 存放dso_tool工具 ├── usr │ └── sbin 存放nginx二进制文件 └── var ├── lib │ └── nginx ├── log │ └── nginx 存放nginx日志 └── www 存放web站点
下载tengine源码包:tengine-1.4.2.tar.gz,进行编译安装,编译参数以下 apache
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin --error-log-path=/var/log/nginx/error.log --conf-path=/etc/nginx/conf/nginx.conf --pid-path=/var/run --with-http_addition_module=shared --with-http_xslt_module=shared --with-http_geoip_module=shared --with-http_image_filter_module=shared --with-http_sub_module=shared --with-http_flv_module=shared --with-http_slice_module=shared --with-http_mp4_module=shared --with-http_concat_module=shared --with-http_random_index_module=shared --with-http_map_module=shared --with-http_split_clients_module=shared --with-http_charset_filter_module=shared --with-http_access_module=shared --with-http_userid_filter_module=shared --with-http_footer_filter_module=shared --with-http_upstream_least_conn_module=shared --with-http_upstream_ip_hash_module=shared --with-http_user_agent_module=shared --with-http_memcached_module=shared --with-http_referer_module=shared --with-http_limit_conn_module=shared --with-http_limit_req_module=shared --with-http_scgi_module=shared --with-http_secure_link_module=shared --with-http_autoindex_module=shared --with-http_sysguard_module=shared --with-http_rewrite_module=shared --with-http_fastcgi_module=shared --with-http_empty_gif_module=shared --with-http_browser_module=shared --with-http_uwsgi_module=shared
--prefix=/etc/nginx 这个目录存放除nginx二进制文件外的其他文件 服务器
--sbin-path=/usr/sbin 这个目录有编译好的nginx二进制文件
app
以前已经把全部依赖的包已经安装过了,因此不会出现问题,只要make&&make install便可,安装完成后在/etc/nginx中的目录结构以下: dom
nginx ├── conf │ ├── browsers │ └── 若干配置文件... ├── html │ ├── 50x.html │ └── index.html ├── logs ├── modules │ ├── ngx_http_access_module.so │ ├── ngx_http_addition_filter_module.so │ ├── ngx_http_uwsgi_module.so │ └── 若干模块... └── sbin └── dso_tool
开始进行乾坤大挪移... ide
mv /etc/nginx/conf /tmp/tengine/etc/nginx/ mv /etc/nginx/html/* /tmp/tengine/var/www/ mv /etc/nginx/modules /tmp/tengine/etc/nginx/ mv /etc/nginx/sbin /tmp/tengine/etc/nginx/ mv /usr/sbin/nginx /tmp/tengine/usr/sbin/开始补全在/tmp/tengine的其余目录。
logrotate.d/nginx内容以下,nginx日志轮训用 memcached
/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript }init.d/nginx内容以下,init启动nginx用
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi 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 start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config start-stop-daemon --start --quiet --pidfile \ /var/run/$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) echo -n "Testing $DESC configuration: " if test_nginx_config then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0nginx/conf/nginx.conf内容以下,由于web站点目录和log日志目录都有所改变,因此要小调一下
worker_processes 1; error_log /var/logs/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/logs/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /var/www; index index.html index.htm; } error_page 500 502 503 504 /var/www/50x.html; location = /50x.html { root /var/www; } } }
剩下DEBIAN目录没有配置,结构以下:
DEBIAN/ ├── control ├── postinst ├── postrm ├── preinst └── prermcontrol:提供软件包的关联信息, 用于软件包管理器显示软件包的信息,用于安装前校验的依赖关系.是必需提供的文件
postrm:在软件包从系统中卸载之后执行。dpkg告知这个脚本软件包是否已被卸载或清除。当由于冲突或升级,软件包被其它软件包卸载时也会执行这个脚本。
preinst:在安装或升级软件包以前执行。
prerm:脚本在软件包卸载以前执行。
postinst:脚本在解包以后做为配置过程的一部分运行。例如:监听本机ip地址,更换端口之类的修改。在本文中我不须要作调整,因此没有设置该文件。
DEBIAN/control内容以下,由于以前把依赖包都安装了,因此在控制文件中我去掉了依赖关系设置
Package: nginx Version: 1.2.5 Architecture: amd64 Maintainer: Jose Parrella <bureado@debian.org> Provides: httpd Section: httpd Priority: optional Homepage: http://nginx.net Description: xxxxxxxxDEBIAN/prerm文件内容以下
#!/bin/sh set -e case "$1" in remove|remove-in-favour|deconfigure|deconfigure-in-favour) if [ -x /etc/init.d/nginx ]; then if [ -x /usr/sbin/invoke-rc.d ] ; then invoke-rc.d nginx stop else /etc/init.d/nginx stop fi fi ;; upgrade|failed-upgrade) ;; *) echo "prerm called with unknown argument \`$1'" >&2 exit 1 ;; esac exit 0DEBIAN/postrm文件内容以下
#!/bin/sh set -e case "$1" in purge) rm -rf /var/lib/nginx /var/log/nginx /etc/nginx ;; remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; *) echo "postrm called with unknown argument \`$1'" >&2 exit 1 esac # Automatically added by dh_installinit if [ "$1" = "purge" ] ; then update-rc.d nginx remove >/dev/null fi # End automatically added section exit 0
DEBIAN/preinst文件内容以下
#!/bin/sh set -e if [ ! -d /var/lib/nginx ] ; then mkdir -p /var/lib/nginx fi if [ ! -d /etc/nginx ] ; then mkdir -p /etc/nginx/conf mkdir -p /etc/nginx/modules mkdir -p /etc/nginx/sbin fi if [ ! -d /var/log/nginx ] ; then mkdir -p /var/log/nginx touch /var/log/nginx/error.log fi exit 0全部文件已经ok,剩下就是打包了
dpkg -b tengine/ tengine_1.4.2-1+squeeze_amd64.deb测试以下图:
加载ngx_http_autoindex_module.so模块,在配置文件中加入以下配置
dso{ load ngx_http_autoindex_module.so; }重启nginx,加入前和加入后区别以下
访问nginx默认界面
卸载tengine软件包
apt-get --purge remove nginx