下面介绍的是Nginx有关知识点及其安装配置信息。
一、Nginx基础
1、Nginx功能(三个)
静态的web服务器 ---------------http/https
反向代理服务器 -----------http/smtp/pop3/imap4(主要作用)
负载均衡集群
Nginx的反代:
基于FastCGI、uwsgi、SCGI等协议反代动态资源请求
基于http/https协议的反代
基于smtp/pop3/imap4协议的反代
基于tcp/udp协议的反代
2、Nginx的I/O请求的两个阶段
(1)、数据从磁盘加载到内核空间
(2)、数据从内核空间复制到用户空间
3、Nginx的I/O模型(5种)
(1)、阻塞型 -----blocking(闲等待)
(2)、非阻塞型 -------------忙等待
(3)、复用型 --------------线程工作模式,如果多个用户请求相同内容,从硬盘只须载入内核一次(类似worker模型)
(4)、信号驱动型 -----------epoll模型,类似event模型
(5)、异步型 ------------asyhchronize,消息通知机制,POLL()函数回调,apache不支持,Nginx支持
4、Nginx特性 ---------------http://nginx.org/en/
(1)、基本http服务的特性
支持基于缓存的反代,负载均衡、故障倒换
支持基于FastCGI、uwsgi、SCGI的反代,负载均衡、故障倒换
支持模块化结构、过滤器机制
支持SSL、TLS
支持http/2.0
Nginx的模块化类型:核心模块、标准功能模块第三方模块
(2)、其他的http服务特性
支持虚拟主机、长连接、URL重写、流媒体、响应限速
5、Nginx的程序结构:主进程/子进程。
master进程:加载配置文件,管理worker进程,平滑升级。
worker进程:处理并响应客户端请求。
Nginx对于主进程(master),只有一个;但可以有多个子进程(worker)。worker可以单独存在,不一定要有master。
二、Nginx配置安装 ----------编译、rpm包
1、编译安装
(1)、编译环境
(2)、openssl-devel
pcre-devel
libenvent-devel
(3)、编译
# ./configure --prefix=/usr/local/nginx --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.pid --lock-path=/var/lock/subsys/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-threads --with-file-aio --with-http_stub_status_module
(4)安装
# make -j 4
# make install
启动服务前,解决用户和组问题:
# groupadd -r -g 808 nginx
# useradd -r -g 808 -u 808 -r /sbin/usr nginx
2、rpm包安装
http://nginx.org/packages/centos/
三、Nginx配置文件
http://nginx.org/en/docs -------------Nginx帮助
1、主配置文件 -----------------/etc/nginx/nginx.conf
主配置文件,主要有三段:全局配置段、http相关配置段、mail相关配置段
(1)、全局配置段 -----------main block
例:
user nginx; -----------指定worker子进程的用户和组
worker_processes 3; -------------worker进程的启动数量
pid /var/run/nginx.pid; ------------指定存放【master进程编号】的文件路径
events {
worker_connections 1024; ----------每个worker并发连接的最大连接数
}
(2)、http相关配置段
http{
context{ ... }
directive value;
}
例:
include /etc/nginx/conf/*.conf;
sendfile on;
keepalive_timeout 65; -------------此时间内没有收到任何请求,则关闭此长连接
keepalive_request 100; ------------用户请求达到该最大限制值,则关闭此长连接
server {
listen 80;
server_name little;
include /etc/nginx/conf/*.conf;
root /myweb/vhost1; -------------web资源的路径映射
location {
root html;
alias /bbs/ /forum/; -----------定义路径映射的别名
}
}
server {
listen 8080;
server_name ling;
root /myweb/vhost2;
}
(3)、mail相关配置段
mail{
...
}
2、主配置文件的配置指令,内容解释 ----------------/etc/nginx/nginx.conf
(1)、全局配置段,配置指令 ------------Context: main
全局配置的配置指令,分为四部分,分别是:正常服务、优化性能、调试和定位、event函数。
正常服务指令:
user user [group]; -------------指定worker子进程的用户和组
pid file; -----------指定存放【master进程编号】的文件的路径
worker_rlimit_nofile number; ------------worker进程打开的文件数量的最大值
优化性能指令:
worker_processes number | auto; ------------------worker进程的启动数量
worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask]; -----------设置每个CPU核心、worker进程的亲缘性
worker_priority number; ------------设置worker进程启动nice值
例:
worker_cpu_affinity cpumask 0010 0100
调试和定位指令:
daemon on | off; -----------------是否以独立守护进程,启动nginx
master_process on | off; ---------是否以master/worker模型,启动nginx进程
error_log file [level]; ----------错误日志文件的位置、记录日志的级别
Context: 【main、location】、http、mail、stream、server
thread_pool name threads=number [max_queue=number]; -----------定义线程池的名称、线程数量、线程后援队列长度
events()函数:
worker_connections number; ----------worker进程的并发连接的最大连接数(默512)
worker_connections * worker_processes; -----------能够【响应】的最大并发连接数
use method; ----------并发连接请求,处理方法(epoll)# use epoll
accept_mutex on | off; ----------是否多个worker进程,依次轮流响应新请求
(2)、http相关配置段指令
http相关配置指令,主要分为两部分:虚拟主机相关、客户端相关。
虚拟主机相关:
server{……} -----------Context: server
server_name name ...; ---------虚拟主机名称(多个主机名、"*"匹配的主机、~正则表达式主机)
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
listen port [default_server] [ssl] [http2 | spdy]
listen unix:path [default_server] [ssl] [http2 | spdy]
backlog=number -------------后援队列长度
rcvbuf=size ---------------接收缓冲大小
sndbuf=size -------------发送缓冲大小
例:
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
root path; -------------------web资源,路径映射
Context: http、【server、location】
location [ = | ~ | ~* | ^~ ] uri { ... } ------------据URI匹配location
Context: server、location
= ------------精确匹配
~ ------------正则表达式匹配,【区分】大小写
~* -----------正则表达式匹配,【不区分】大小写
^~ -------------匹配URI左半部分,【不区分】大小写
alias path; ------------路径映射的别名
Context: location
index file ...; ------------默认主页文件名
Context: http、【server、location】
客户端相关:--------------Context: http、【server、location】
error_page code ... [=[response]] uri; ------------据响应状态码实现页面错误重定向
例:error_page 404 =200 /404.html;
keepalive_disable none | browser ...; ---------对部分浏览器,禁用长连接
keepalive_requests number; ----------用户请求达到最大限制值,关闭长连接
keepalive_timeout timeout [header_timeout]; ---------指定时间没有请求,关闭长连接
send_timeout time; ----------响应报文的超时时长,该时间没有收到响应报文,关闭连接
client_body_buffer_size size; -------------body部分缓冲区大小(默16K)
client_body_temp_path path [level1 [level2 [level3]]]; -------------body的临时存储路径
例:client_body_temp_path /var/tmp/client_body 2 1 2(几个16进制目录)
limit_rate rate; -----------客户端传输速率(0表无限制)
limit_except method ... { ... }; ---------指定的不用(allow、deny)
Context: location
allow address | CIDR | unix: | all; ------------对客户端访问控制,顺序匹配
deny address | CIDR | unix: | all;
Context: 【limit_except】 ++
CIDR --------无类域间路由
aio on | off | threads[=pool]; --------是否启用异步I/O
directio size | off; -------------是否启用directio
open_file_cache off; -----------文件描述符缓存
open_file_cache max=N [inactive=time]; -----------缓存数量上限,缓存超时时长
open_file_cache_errors on | off; --------------错误信息,是否缓存
open_file_cache_min_uses number; ----------指定时间,缓存元素使用次数
open_file_cache_valid time; -----------缓存检查时间(默60s)
stub_status; -----------输出基本信息(简要)
Context: server, location
valid_referers none | blocked | server_names | string ...; -----------合法的Referer数据(跳转)
none ----------首部没有Referer
blocked ------------首部有Referer,但无值
server_name ----------------首部Referer是主机名
arbitrary string ----------任意,可用"*"通配符
regular expression -----------正则表达式,有"~"起始
例:valid_referers none blocked server_name *.little.com ~\.little\.
3、片段配置文件 ---------------/etc/nginx/conf/*.conf(编译的没有,需指定)
4、模块配置文件 --------------与FCGI、uwsgi、SCGI相关的配置文件
5、mime.types -----------------所有的mime类型
原文地址:http://12496428.blog.51cto.com/12486428/1971404