本节我们要讲的是关于nginx的内容,nginx是一个免费,开源,高性能的http服务器以及反向代理服务器,也是一个IMAP/POP3代理服务器。nginx因它的稳定性、丰富的功能集、示例配置文件和低的消耗而闻名。那么下面我们就来详细介绍下它吧。

 

nginx特性

    基本功能:

        1、能够实现服务于静态文件,也就是静态资源的web服务器,能自动缓存打开的文件描述符;

        2、反向代理服务器,能够实现简单的负载均衡和冗余

        3、能够支持FastCGI协议

        4、有模块化话功能,但非DSO(动态装卸载)机制,支持多种过滤器gzip,SSI和完成图像大小调整等

        5、支持SSL功能

    扩展功能:

        1、能够基于名称和IP做虚拟主机

        2、支持keepalive

        3、支持平滑的配置更新或程序版本升级

        4、支持定制访问日志,支持使用日志缓存以提高性能

        5、支持url rewrite(地址重写)   

        6、支持路径别名

        7、支持基于IP及用户的认证

        8、支持速率限制,并发限制等

nginx的编译安装

编译安装之前必须准备好编译环境

[root@www ~]# yum install gcc openssl-devel pcre-devel zlib-devel

创建运行所需要的用户

[root@www ~]# groupadd -r nginx

[root@www ~]# useradd -r -g nginx -s /bin/false -M nginx

[root@www ~]# tar xf nginx-1.6.1.tar.gz

[root@www ~]# cd nginx-1.6.1[root@www nginx-1.6.1]# ./configure \     --prefix=/usr \      --sbin-path=/usr/sbin/nginx \      --conf-path=/etc/nginx/nginx.conf \      --error-log-path=/var/log/nginx/error.log \      --http-log-path=/var/log/nginx/access.log \      --pid-path=/var/run/nginx/nginx.pid  \      --lock-path=/var/lock/nginx.lock \      --user=nginx \      --group=nginx \      --with-http_ssl_module \      --with-http_flv_module \      --with-http_stub_status_module \      --with-http_gzip_static_module \      --http-client-body-temp-path=/var/tmp/nginx/client/ \      --http-proxy-temp-path=/var/tmp/nginx/proxy/ \      --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \      --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \      --http-scgi-temp-path=/var/tmp/nginx/scgi \      --with-pcre[root@www nginx-1.6.1]# make && make install

提供启动脚本:/etc/init.d/nginx

#!/bin/sh   #    # nginx - this script starts and stops the nginx daemon    #    # chkconfig:   - 85 15     # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \    #               proxy and IMAP/POP3 proxy server    # processname: nginx    # config:      /etc/nginx/nginx.conf    # config:      /etc/sysconfig/nginx    # pidfile:     /var/run/nginx.pid    # Source function library.    . /etc/rc.d/init.d/functions    # Source networking configuration.    . /etc/sysconfig/network    # Check that networking is up.    [ "$NETWORKING" = "no" ] && exit 0    nginx="/usr/local/nginx/sbin/nginx"    prog=$(basename $nginx)    NGINX_CONF_FILE="/etc/nginx/nginx.conf"    [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx    lockfile=/var/lock/subsys/nginx    make_dirs() {       # make required directories       user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`       options=`$nginx -V 2>&1 | grep 'configure arguments:'`       for opt in $options; do           if [ `echo $opt | grep '.*-temp-path'` ]; then               value=`echo $opt | cut -d "=" -f 2`               if [ ! -d "$value" ]; then                   # echo "creating" $value                   mkdir -p $value && chown -R $user $value               fi           fi       done    }    start() {        [ -x $nginx ] || exit 5        [ -f $NGINX_CONF_FILE ] || exit 6        make_dirs        echo -n $"Starting $prog: "        daemon $nginx -c $NGINX_CONF_FILE        retval=$?        echo        [ $retval -eq 0 ] && touch $lockfile        return $retval    }    stop() {        echo -n $"Stopping $prog: "        killproc $prog -QUIT        retval=$?        echo        [ $retval -eq 0 ] && rm -f $lockfile        return $retval    }    restart() {        configtest || return $?        stop        sleep 1        start    }    reload() {        configtest || return $?        echo -n $"Reloading $prog: "        killproc $nginx -HUP        RETVAL=$?        echo    }    force_reload() {        restart    }    configtest() {      $nginx -t -c $NGINX_CONF_FILE    }    rh_status() {        status $prog    }    rh_status_q() {        rh_status >/dev/null 2>&1    }    case "$1" in        start)            rh_status_q && exit 0            $1            ;;        stop)            rh_status_q || exit 0            $1            ;;        restart|configtest)            $1            ;;        reload)            rh_status_q || exit 7            $1            ;;        force-reload)            force_reload            ;;        status)            rh_status            ;;        condrestart|try-restart)            rh_status_q || exit 0                ;;        *)            echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"            exit 2    esac

创建需要的目录并启动服务

[root@www tmp]# mkdir -v /var/tmp/nginx/   mkdir: created directory `/var/tmp/nginx/'    [root@www tmp]# service nginx start    Starting nginx:                                            [  OK  ]

 

配置文件解读

nginx的配置文件分三段

main配置段

http配置段

server配置段

一些格式:

listen配置的格式:(只能在server中进行设置)

listen address:port[ default [ backlog=num | rcvbuf=size接收缓存大小 | sndbuf=size 发送缓存大小 | accept_filter=filter | deferred | bind | ssl 只能使用443端口]]

listen 127.0.0.1:8000;

listen 127.0.0.1;

listen 8000;

listen *:8000;

listen localhost:8000;

 

location配置的格式:(只能在server中进行设置)

location [=|~|~*|^~|@] /url/ {...}

例子

 

 

下面是一个示例配置

#/usr/local/ngnix/conf/ngnix.conf

user nginx;                       运行服务的用户名worker_processes 4;         运行的进程数#error_log logs/error.log;       error_log /data/applogs/nginx/error.log notice;    错误日志#error_log logs/error.log info;pid /data/appdatas/nginx.pid;                            进程文件events {    worker_connections 65535;                           最大连接数}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 logs/access.log main;    sendfile on;                                                       #tcp_nopush on;    #keepalive_timeout 0;    keepalive_timeout 65;                              持久连接超时时间  gzip on;                                                   是否压缩  gzip_http_version 1.1;  gzip_min_length 1024;  gzip_comp_level 6;  gzip_buffers 16 8k;  gzip_proxied expired no-cache no-store private auth no_last_modified no_etag;  gzip_types text/plain application/x-javascript text/css application/xml application/json;  gzip_disable "MSIE [1-6]\.(?!.*SV1)";   include nginx_app.conf;                                  包含配置文件,定义server}

   

   

nginx_app.conf

server {       listen       80 ;                                    定义端口        server_name  www.mwj.com;              定义主机名    #charset koi8-r;                                设定字符集    #access_log  logs/host.access.log  main;     访问日志    location / {           root   /usr/share/nginx/html;          设置服务器根目录            index  index.html index.htm;         auth_basic   "input password";                        用户认证功能          auth_basic_user_file  /etc/nginx/userfile ;         密码文件,自己定义                     }    error_page  404              /404.html;      404错误页面       location = /404.html {                                  root   /usr/share/nginx/html;        }    # redirect server error pages to the static page /50x.html       #        error_page   500 502 503 504  /50x.html;       50x错误页面        location = /50x.html {            root   /usr/share/nginx/html;        }}

 

 

创建密码文件密码

[root@www ~]# htpasswd -c /etc/nginx/userfile admin    创建admin用户   New password:     Re-type new password:     Adding password for user admin

 

好了,下面就可以测试下了。

输入账号密码,成功登陆

本节就讲到这里,nginx的其他方面的功能我们会在后面用到的地方再进行阐述,谢谢!