标签: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
原文地址:http://8757576.blog.51cto.com/8747576/1613308