Nginx简单介绍

   
   
   
   
  1. Nginx is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. Igor Sysoev started development of Nginx in 2002, with the first public release in 2004. Nginx now hosts nearly 7.67% (35.5M) of all domains worldwide. 
  2.  
  3. Nginx is known for its high performance, stability, rich feature set, simple configuration, and low resource consumption. 
  4.  
  5. Nginx is one of a handful of servers written to address the C10K problem. Unlike traditional servers, Nginx doesn't rely on threads to handle requests. Instead it uses a much more scalable event-driven (asynchronous) architecture. This architecture uses small, but more importantly, predictable amounts of memory under load. 
  6. Even if you don't expect to handle thousands of simultaneous requests, you can still benefit from Nginx's high-performance and small memory footprint. Nginx scales in all directions: from the smallest VPS all the way up to clusters of servers. 
  7.  
  8. Nginx powers several high-visibility sites, such as WordPress, Hulu, Github, Ohloh, SourceForge, WhitePages and TorrentReactor. 


需要用到的安装包
  openssl-devel
  zlib-devel
  pcre-devel
  gcc
  nginx-1.2.2.tar.gz
     
1、解决依赖关系

   编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries"。同时,还需要专门安装pcre-devel包,安装pcre 库是为使用Nginx支持 HTTP Rewrite 模块。
  # yum -y install pcre-devel

2、首先添加nginx用户和组,实现以之运行nginx服务进程     
  # groupadd -r nginx
  # useradd -r -g nginx -s /bin/false -M nginx       
  # id nginx

       
3. 解压
  # tar xf nginx-1.2.2.tar.gz
         
4. 接着开始编译

   
   
   
   
  1. ./configure \ 
  2.   --prefix=/usr \ 
  3.   --sbin-path=/usr/sbin/nginx \ 
  4.   --conf-path=/etc/nginx/nginx.conf \ 
  5.   --error-log-path=/var/log/nginx/error.log \ 
  6.   --http-log-path=/var/log/nginx/access.log \ 
  7.   --pid-path=/var/run/nginx/nginx.pid  \ 
  8.   --lock-path=/var/lock/nginx.lock \ 
  9.   --user=nginx \ 
  10.   --group=nginx \ 
  11.   --with-http_ssl_module \ 
  12.   --with-http_flv_module \ 
  13.   --with-http_stub_status_module \ 
  14.   --with-http_gzip_static_module \ 
  15.   --http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  16.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  17.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 
  18.   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 
  19.   --http-scgi-temp-path=/var/tmp/nginx/scgi \ 
  20.   --with-pcre 
  21.   

 5. 安装nginx

   # make  && make install

一些主要编译选项 (摘录configure)

   
   
   
   
  1.  --prefix= - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。   
  2.     
  3.  --conf-path= - 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为/conf/nginx.conf。   
  4.     
  5.  --pid-path= - 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 /logs/nginx.pid。   
  6.     
  7.  --lock-path= - nginx.lock文件的路径。   
  8.     
  9.  --error-log-path= - 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 /logs/error.log。   
  10.     
  11.  --http-log-path= - 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 /logs/access.log。   
  12.     
  13.  --user= - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。   
  14.     
  15.  --group= - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。   
  16.     
  17.  --with-http_ssl_module -开启HTTP SSL模块,使NGINX可以支持HTTPS请求。需要安装了OPENSSL   
  18.     
  19.  --with-http_flv_module   
  20.     
  21.  --with-http_stub_status_module - 启用 "server status" 页(可有可无)   
  22.     
  23.  --without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。   
  24.     
  25.  --without-http_ssi_module - 禁用 ngx_http_ssi_module   
  26.     
  27.  --without-http_referer_module - 禁用 ngx_http_referer_module   
  28.     
  29.  --without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。   
  30.     
  31.  --without-http_proxy_module - 禁用 ngx_http_proxy_module   
  32.     
  33.  --without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module   
  34.     
  35.  --without-http_memcached_module - 禁用 ngx_http_memcached_module   
  36.     
  37.  --without-http_browser_module - 禁用 ngx_http_browser_module   
  38.     
  39.  --http-proxy-temp-path=PATH - Set path to the http proxy temporary files   
  40.     
  41.  --http-fastcgi-temp-path=PATH - Set path to the http fastcgi temporary files   
  42.     
  43.  --without-http - 禁用 HTTP server(用作代理或反向代理)   
  44.     
  45.  --with-mail - 启用 IMAP4/POP3/SMTP 代理模块   
  46.     
  47.  --with-mail_ssl_module - 启用 ngx_mail_ssl_module   
  48.     
  49.  --with-openssl=DIR - Set path to OpenSSL library sources   
  50.  

6. 为Nginx提供sysv风格的服务脚本( Red Hat Nginx Init Script Should work on RHEL, Fedora, CentOS. Tested on CentOS 5.  Save this file as /etc/init.d/nginx )

   #  vi /etc/rc.d/init.d/nginx

内容如下:

   
   
   
   
  1. #!/bin/sh 
  2. # 
  3. # nginx - this script starts and stops the nginx daemon 
  4. # 
  5. # chkconfig:   - 85 15  
  6. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  7. #               proxy and IMAP/POP3 proxy server 
  8. # processname: nginx 
  9. # config:      /etc/nginx/nginx.conf 
  10. # config:      /etc/sysconfig/nginx 
  11. # pidfile:     /var/run/nginx.pid 
  12.   
  13. # Source function library. 
  14. . /etc/rc.d/init.d/functions 
  15.   
  16. # Source networking configuration. 
  17. . /etc/sysconfig/network 
  18.   
  19. # Check that networking is up. 
  20. "$NETWORKING" = "no" ] && exit 0 
  21.   
  22. nginx="/usr/sbin/nginx" 
  23. prog=$(basename $nginx) 
  24.   
  25. NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
  26.   
  27. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  28.   
  29. lockfile=/var/lock/subsys/nginx 
  30.   
  31. make_dirs() { 
  32.    # make required directories 
  33.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  34.    options=`$nginx -V 2>&1 | grep 'configure arguments:'
  35.    for opt in $options; do 
  36.        if [ `echo $opt | grep '.*-temp-path'` ]; then 
  37.            value=`echo $opt | cut -d "=" -f 2` 
  38.            if [ ! -d "$value" ]; then 
  39.                # echo "creating" $value 
  40.                mkdir -p $value && chown -R $user $value 
  41.            fi 
  42.        fi 
  43.    done 
  44.   
  45. start() { 
  46.     [ -x $nginx ] || exit 5 
  47.     [ -f $NGINX_CONF_FILE ] || exit 6 
  48.     make_dirs 
  49.     echo -n $"Starting $prog: " 
  50.     daemon $nginx -c $NGINX_CONF_FILE 
  51.     retval=$? 
  52.     echo 
  53.     [ $retval -eq 0 ] && touch $lockfile 
  54.     return $retval 
  55.   
  56. stop() { 
  57.     echo -n $"Stopping $prog: " 
  58.     killproc $prog -QUIT 
  59.     retval=$? 
  60.     echo 
  61.     [ $retval -eq 0 ] && rm -f $lockfile 
  62.     return $retval 
  63.   
  64. restart() { 
  65.     configtest || return $? 
  66.     stop 
  67.     sleep 1 
  68.     start 
  69.   
  70. reload() { 
  71.     configtest || return $? 
  72.     echo -n $"Reloading $prog: " 
  73.     killproc $nginx -HUP 
  74.     RETVAL=$? 
  75.     echo 
  76.   
  77. force_reload() { 
  78.     restart 
  79.   
  80. configtest() { 
  81.   $nginx -t -c $NGINX_CONF_FILE 
  82.   
  83. rh_status() { 
  84.     status $prog 
  85.   
  86. rh_status_q() { 
  87.     rh_status >/dev/null 2>&1 
  88.   
  89. case "$1" in 
  90.     start) 
  91.         rh_status_q && exit 0 
  92.         $1 
  93.         ;; 
  94.     stop) 
  95.         rh_status_q || exit 0 
  96.         $1 
  97.         ;; 
  98.     restart|configtest) 
  99.         $1 
  100.         ;; 
  101.     reload) 
  102.         rh_status_q || exit 7 
  103.         $1 
  104.         ;; 
  105.     force-reload) 
  106.         force_reload 
  107.         ;; 
  108.     status) 
  109.         rh_status 
  110.         ;; 
  111.     condrestart|try-restart) 
  112.         rh_status_q || exit 0 
  113.             ;; 
  114.     *) 
  115.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  116.         exit 2 
  117. esac

7. 给予执行权限
   # chmod +x /etc/rc.d/init.d/nginx
       
8. 添加到服务列表中
   # chkconfig --add nginx
   # chkconfig nginx on

    
9. 启动服务
   # /etc/init.d/nginx start
       
10. 查看启动状态
   # netstat -tnlp  | grep nginx
       
            Active Internet connections (only servers)
       
   tcp        0      0 0.0.0.0:80        0.0.0.0:*       LISTEN      29475/nginx