Ubuntu上安装Nginx服务器程序及简单的环境配置小结

Ubuntu 从官方源安装 Nginx

  cd ~   wget http://nginx.org/keys/nginx_signing.key   sudo apt-key add nginx_signing.key   sudo nano /etc/apt/sources.list   # 添加以下两句   deb http://nginx.org/packages/ubuntu/ precise nginx   deb-src http://nginx.org/packages/ubuntu/ precise nginx   sudo apt-get update   sudo apt-get install nginx   

Ubuntu 从PPA源安装 Nginx :

  sudo add-apt-repository ppa:nginx/stable   sudo apt-get update   sudo apt-get install nginx   

Ubuntu 从常规源安装 Nginx :

  sudo apt-get install nginx   

编译安装Nginx

  wget http://nginx.org/packages/mainline/ubuntu/pool/nginx/n/nginx/nginx_1.5.7-1~precise_i386.deb   wget http://nginx.org/download/nginx-1.5.7.tar.gz  tar xzf nginx-1.5.7.tar.gz  cd nginx-1.5.7  

(注意:Nginx1.5.7是Mainline版而非Stable版)

为了方便开发和管理,我在根目录下新建了一个png目录,并且目录所有者设置为当前用户,nginx就编译在/png/nginx/1.5.7下面:

  sudo mkdir /png  sudo chown eechen:eechen /png  

运行用户我定义为png:png,所以我需要新建这样一个用户:

  sudo addgroup png --system  sudo adduser png --system --disabled-login --ingroup png --no-create-home --home /nonexistent --gecos "png user" --shell /bin/false  

(新建用户的命令可以参考官方Deb包里的预安装脚本DEBIAN/preinst)

编译参数参考了Nginx官方提供的Deb包(nginx -V可见).

  ./configure   

  --prefix=/png/nginx/1.5.7   --sbin-path=/png/nginx/1.5.7/sbin/nginx   --conf-path=/png/nginx/1.5.7/conf/nginx.conf   --error-log-path=/png/nginx/1.5.7/var/log/error.log   --http-log-path=/png/nginx/1.5.7/var/log/access.log   --pid-path=/png/nginx/1.5.7/var/run/nginx.pid   --lock-path=/png/nginx/1.5.7/var/run/nginx.lock   --http-client-body-temp-path=/png/nginx/1.5.7/var/cache/client_temp   --http-proxy-temp-path=/png/nginx/1.5.7/var/cache/proxy_temp   --http-fastcgi-temp-path=/png/nginx/1.5.7/var/cache/fastcgi_temp   --http-uwsgi-temp-path=/png/nginx/1.5.7/var/cache/uwsgi_temp   --http-scgi-temp-path=/png/nginx/1.5.7/var/cache/scgi_temp   --user=png   --group=png   --with-http_ssl_module   --with-http_realip_module   --with-http_addition_module   --with-http_sub_module   --with-http_dav_module   --with-http_flv_module   --with-http_mp4_module   --with-http_gunzip_module   --with-http_gzip_static_module   --with-http_random_index_module   --with-http_secure_link_module   --with-http_stub_status_module   --with-mail   --with-mail_ssl_module   --with-file-aio   --with-ipv6  

注意:这一步按错误提示安装依赖的包,这时就是apt要发威的时候了,比如我的系统安装了这些包:

  sudo apt-get -y install   

  build-essential   autoconf   libtool   libxml2   libxml2-dev   openssl   libcurl4-openssl-dev   libbz2-1.0   libbz2-dev   libjpeg-dev   libpng12-dev   libfreetype6   libfreetype6-dev   libldap-2.4-2   libldap2-dev   libmcrypt4   libmcrypt-dev   libmysqlclient-dev   libxslt1.1   libxslt1-dev   libxt-dev   libpcre3-dev  

安装好这些包后,下次编译新版Nginx就不用再装了,而且基本也满足编译PHP时configure的需求.
好了,configure成功后就可以编译安装了:

  time make && make install  

time主要用来查看本次编译耗时.
编译好后可以看看这个家伙的个头:

  du -sh /png/nginx/1.5.7/sbin/nginx   

  5.5M /png/nginx/1.5.7/sbin/nginx     

环境简单配置总结
减小Nginx编译后的文件大小:
编辑源文件 nginx-1.5.7/auto/cc/gcc 去除Debug信息(注释掉即可):

  # debug   # CFLAGS="$CFLAGS -g"   

这样编译后的主程序大小则为700多K,和Nginx官方提供的Deb包程序大小相近.
另外configure时去掉一些不需要的模块,编译后的可执行文件会更小.
当然,我需要一个服务脚本用来管理Nginx,这时同样可以借助官方Deb包里提供的服务脚本etc/init.d/nginx.
我把它放到/png/nginx/1.5.7/nginx,对开头定义的几个值(13到19行)进行稍加修改:

  PATH=/sbin:/usr/sbin:/bin:/usr/bin  DESC=nginx  NAME=nginx  CONFFILE=/etc/nginx/nginx.conf  DAEMON=/usr/sbin/nginx  PIDFILE=/var/run/$NAME.pid  SCRIPTNAME=/etc/init.d/$NAME  改为  PATH=/sbin:/usr/sbin:/bin:/usr/bin  DESC=nginx  NAME=nginx  CONFFILE=/png/nginx/1.5.7/conf/nginx.conf  DAEMON=/png/nginx/1.5.7/sbin/nginx  PIDFILE=/png/nginx/1.5.7/var/run/$NAME.pid  SCRIPTNAME=/png/nginx/1.5.7/$NAME  

启动前先创建一个cache目录,否则会提示出错:

  mkdir /png/nginx/1.5.7/var/cache  

启动Nginx:

  sudo /png/nginx/1.5.7/nginx start  

测试页面:

  curl -I `hostname`  

看一下端口:

  sudo netstat -antp|grep nginx  

查看一下它占用的内存:
htop按F4过滤nginx

Ubuntu上安装Nginx服务器程序及简单的环境配置小结 nginx 第1张

用top同样能看到类似内容:

  top -b -n1|head -n7 && top -b -n1|grep nginx   

Ubuntu上安装Nginx服务器程序及简单的环境配置小结 nginx 第2张

主要看RES这个值,常驻内存(resident),不包括SWAP空间的物理内存, 单位为KB,%MEM就是以RES为参照对象.
可以看到Nginx两个进程占用的物理内存加起来不到2M,内存占用非常小.
另外top里的RES这个值对应ps aux里的RSS这个值:

  ps aux|head -n1 && ps aux|grep nginx   

还有我们可以看到Nginx的工人进程只有一个线程:

  cat /proc/25047/status|grep Threads   

  Threads: 1   

其中25047是Nginx工人进程PID号.
把Nginx做成系统服务,开机自启动:

  sudo ln -s /png/nginx/1.5.7/nginx /etc/init.d/png-nginx  sudo update-rc.d png-nginx defaults #开机自启动   sudo update-rc.d -f png-nginx remove # 以后不想开机自启动可以这样禁止  sudo service png-nginx reload #这样就可以用service来管理Nginx服务了,比如重载配置  

最后,Nginx的主配置文件位于/png/nginx/1.5.7/conf/nginx.conf,自己按需配置.

参与评论