码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx

时间:2015-02-10 17:02:57      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:nginx

一、Nginx特性:

    1、基本功能:

a、静态资源的web服务,能自动缓存打开的文件描述符。

b、反向代理服务器,负载均衡、缓存。

c、支持FastCGI协议,因此能够实现LNMP(Linux Nginx Mysql Php)。

d、高度模块化,但非DSO机制。支持多种过滤器(如gzip),SSI和图像大小调整等。

e、支持SSL

    2、扩展功能:

a、基于名称和IP做虚拟主机。

b、支持keepalive

c、支持平滑的配置鞥新和程序版本升级。

d、定制访问日志。

e、支持url rewrite

f、支持路径别名。

g、支持基于IP以及用户的认证。

h、支持速率限制,并发数限制等。

二、Nginx基本架构:

    1、一个master,生成一个或者多个worker

    2、事件驱动,kqueue,epoll

    3、支持非阻塞如mmap,AIO

    4、支持sendfile,sendfile64

三、Nginx模块类别:

    1、核心模块

    2、标准http模块

    3、可选的http模块

    4、邮件模块

    5、第三方扩展模块

四、Nginx的安装以及配置:

1、编译安装:

    a、#yum -y install pcre-devel 为了解决依赖关系要装。

    b、首先添加用户nginx,实现以此用户运行nginx服务进程。

       #groupadd -r nginx

       #useradd -r -g nginx nginx

    c、#tar xf nginx1.4.7.tar gz

       #cd nginx1.4.7

       # .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 

  --with-client-body-temp-path=/var/tmp/nginx/client

  --with-proxy-temp-path=/var/tmp/nginx/proxy

  --with-fastcgi-temp-path=/var/tmp/nginx/fcgi

  --with-uwsgi-temp-path=/var/tmp/nginx/uwsgi

  --with-scgi-temp-path=/var/tmp/nginx/scgi

  --with-pcre


#make && make install

       d、开机启动加脚本:

#vi /etc/rc.d/initd./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/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


而后为此脚本赋予执行权限:

# chmod +x /etc/rc.d/init.d/nginx


添加至服务管理列表,并让其开机自动启动:

# chkconfig --add nginx

# chkconfig nginx on


而后就可以启动服务并测试了:

# service nginx start


2、nginx配置:

   注意:配置参数需要以分号结尾,否则就语法错误,语法格式:参数名 值1 [值2...];

   

   分为两段:核心段和http段,重要参数如下:


   核心配置段{


正常运行必备的配置:

user username [groupname];  指定运行worker进程的用户和组

pid /path/to/pidfile_name;  指定nginx的pid文件

worker_rlimit_nofile #;  指定一个worker进程所能够打开的最大文件句柄数

worker_rlimit_sigpending #;  指定每个用户能够发往worker进程的信号的数量


优化性能相关的配置:

worker_processes #;  worker进程的个数,通常其值为CPU的物理核心数减1,即1个留给系统内核用。

worker_cpu_affinity cpumask ...; 如 worker_processes 4;  worker_cpu_affinity 0001 0010 0100 1000;

        worker_priority nice; nice的值为[-20,20]

ssl_engine device; 在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备。

timer_resolution T; 每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟,

   timer_relolution用于定义每隔多久更新一次缓存时钟;X86_64系统上,调用gettimeofday()代价较小,可以忽略此项;

事件相关的配置:

use [epoll|rtsig|select|poll]; 定会以使用的事件模型,建议让nginx自动选择;

worker_connections #; 每个worker能够并发响应的最大请求数;

accept_mutex [on|off]; 是否打开nginx负载均衡锁;此锁能够让多个worker轮流地与客户端建立连接;

lock_file /path/to/lock_file; lock文件;

accept_mutex_delay #ms; accept锁模式中,一个worker进程为取得accept锁的等待时长。

multi_accept{on|off}; 是否允许一次性地响应多个用户请求;默认为off

用于调试、定位问题:只在调试nginx时使用。

daemon [on|off]; 是否让nginx运行于后台;默认为on,调试时为off,使得所有信息输出到控制台,方便查看信息。

master_process [on|off]; 是否让master管理多个worker运行,默认为on;调试时为off,以方便追踪问题。

error_log /path/to/error_log level;   

    错误日志文件以及级别,默认为error级别;调试时可以使用debug级别,

    但要求在编译时必须使用--with_debug启动debug功能。

   }


  http配置段{

    说明:Nginx必须使用虚拟主机配置站点;每个虚拟主机使用一个server{}段配置;

非虚拟主机的配置或者公共配置,需要配置在server{}外。具体格式如下:

directive value;

...

server{

  listen 80;

  server_name localhost;

  location{

  

           }

}


server{


}

...


  重要配置详情:

server{}:

  定义一个虚拟主机,支持基于主机名或者IP的虚拟主机。

listen:

  listen address[:port]

  listen port

  default_server:定义此server为http中默认的server;如果所有的server中没有任何一

              个listen使用此参数,那么第一个server为默认server。

  rcvbuf=SIZE:接收缓冲大小;

  sndbuf=SIZE:发送缓冲大小;

  ssl:https server

server_name NAME...;可以跟多个主机名;

server_name_hash_bucket_size 32|64|128;为了实现快速主机查找,nginx使用hash表保存主机名;

location:根据用户请求的URI,匹配指定的各location,匹配到时将被location来处理。

 

location [ =|~|~*|^~ ] uri { ... } 

location @name {...}

       =:精确匹配

~:正则表达式模式匹配,匹配时区分字符大小写。

~*:正则表达式模式匹配,匹配时忽略字符大小写。

^~:uri前半部分匹配,不检查正则表达式。

root:设置web资源路径,通常定义在location中。

alias:用于配置路径别名,只能用于location中。

index file...:定义默认页,自左而右匹配。

error_page code ...[=[reponse]] uri;当对于某个请求返回错误是,如果匹配上了error_page指令中设定的code,

   则重定向指定的页面。如error_page 404 /404.html


keepalive_timeout time;设置保持连接的超时时长,默认为75s中。

keepalive_request n;在一次长连接上允许承载的最大请求数;

keepalive_disable [msie6|safari|none];对指定的浏览器禁止使用长连接。

tcp_nodelay {on|off} ;对keepalive连接是否使用tcp_nodelay选项。

client_header_timeout time;读取http请求首部的超时时长。

send_timeout time;发送响应的超时时长。

limit_except method...{...};排除请求方法。

client_max_body_size SIZE;http请求的包体的最大值,常用于限定客户所能请求的最大包体;

 根据请求首部中的Content-length来检测,以免无用的传输。如:上传附件的限制。

limit_rate speed;限制客户端每秒传输的字节数,默认为0,表示meiyo9u限制。

limit_rate_after time;nginx向客户发送响应报文时,如果时长超出此处制定的时长,则后续的发送过程开始限速;如:下载网站。

sendfile {on|off};是否启用sendfile功能。

aio {on|off};是否启用aio功能。

open_file_cache max=N [inactive=time]|off;是否打开文件缓存功能。

max:缓存条目的最大值,当满了以后将根据LRU算法进行置换。

inactive:某缓存条目在指定时长内没被访问时,将自动被删除,默认为60s。

缓存的信息包括:

文件句柄、文件大小和上次修改时间。

已经打开的目录结构。

没有找到或者没有访问权限的信息。

open_file_cache_errors on|off;是否缓存文件找不到或者没有权限访问等相关信息。

resolver address;指定nginx使用的dns服务器地址;

resover_timeout time;指定DNS解析超时时长,默认30s;

   }

3、重要的内置变量:

$uri :当前请求的uri,不带参数;

$host:http请求报文中的host首部,不过请求中没有hsot,则以处理此请求的虚拟主机的主机名替代。

$request_uri:当前请求的uri,带完整参数;

$hostname:nginx服务器运行在的主机的主机名;

$remote_addr:客户端IP

$remote_port:客户端port

$remote_user:使用用户认证时,客户端用户输入的用户名;

$request_method:请求方法

$server_addr:服务器地址

$server_name:服务器名称

$server_port:服务器端口

$server_protocol:服务器想客户端发送响应时的协议,如http/1.1,http/1.0


Nginx

标签:nginx

原文地址:http://8757576.blog.51cto.com/8747576/1613308

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!