IO模型 php
阻塞html
非阻塞node
IO复用(select,poll) linux
信号驱动的IO (前半段异步 epoll,kqueue,/dev/poll) nginx
AIOc++
nginx特性:支持epoll , 文件的aio,内存映射 mmapweb
master/worker 模型 master加载分享配置文件,启动worker.支持平滑升级 worker响应用户请求正则表达式
nginx安装能够采用编译安装 如今地址参考官网 http://nginx.org/en/download.html算法
必要的编译环境 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel浏览器
进入下载的安装包的解压文件
[root@pomme nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid \\能够根据 --help查看需求
--prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module
--with-http_stub_status_module (监控模块)
[root@pomme nginx-1.10.3]# echo $?
0
安装 make && make install
配置文件在 --conf-path路径下
主要组成:
主配置文件:nginx.conf
include conf.d/*.conf 扩展的独立的配置加载文件位置
\\
http {
include mime.types; \\
/etc/nginx/conf.d/*.conf
fastcgi的配置文件 fastcgi.conf uwsgi_params
配置指令:(必须分号结尾)
Directive value1 [value2...];
支持使用变量
内置变量 由模块引入:
自定义变量
set variable value;
引用变量 $variable
配置文件组织结构
main block \\全局模块 根目录
event { \\events模块中包含nginx中全部处理链接的设置
worker_connections 1024; \\单个worker进程的最大并发链接数
.... \\独立与http和mail的 独立模块
use epoll; \\设置用于复用客户端线程的轮询方法
}
http {
和http访问的必须在内
}
http 配置段:
http{
....
upstream{ \\负载均衡模块
}
server{ \\虚拟主机模块
....
server_name \\虚拟主机主机名
root \\根文档路径
alias \\路径别名
location /usr/ {
} \\指明多个特定的 url 访问映射何处 能够多个
}
server{
...
}
}
main 配置段
类别
一. 正常运行必备的配置;
二. 优化性能相关的配置;
三. 用于调试以及定位问题的配置;
一 1. user #user nobody; 指定用于运行work进程的用户和用户组
2. pid #pid logs/nginx.pid; 指定进程的pid路径
3. worker_rlimit_nofile #; 指定一个worker进程可以打开的最大文件描述符数
4. worker_rlimit_sigpending # 指定每一个用户所能发往worker进程的最大信号数
二 1.worker_processes #; worker进程的个数一般为物理cpu个数 ~ n-2
能够定义为 auto 实现自动设定 =cpu个数
2.worker_cpu_affinity CPUMASK ...; 指明CPU掩码绑定
CPUMASK: 0001 0010 0100 1000
worker_cpu attinity 0000001 00000010 00000100;
3.worker_priority nice; [-20,19] 设置优先级
查看ps axo comm,nice 默认是0
三 1.daemon [off|on] 是否以守护进程方式启动nginx
2.master_process on|off ; 是否以master/worker模型运行nginx;
3.error_log /PATH/ERROR_LOG level; 错误日志文件及其级别 ;用于调试设置debug;但debug仅在编译时候使用了“--with-debug”才有效
event经常使用配置 参考官方wiki文档
1.worker_connections #; 每一个worker进程所能响应的最大数量 worker_process * worker_connections
2.use [epoll|rgsig|select|poll]; 定义使用的事件模型 默认自动选择
3.accept_mutex[on|off]; 个worker接收用户请求的负载均衡锁的内部机制;启用时 表示让多个worker轮流的序列化的响应请求
4.lock_file 锁文件
经常使用配置以下
http配置段
socket或主机相关的指令
1.server {} 定义 server虚拟主机
server{
listen PORT;
server_name NAME;
root /PATH/...;
}
注意: (1)基于port; listen指令监听不一样的端口;
(2)基于hostname server_name 指令指向不一样的主机名
2.listen
listen address
[:port
] [default_server
] [ssl
] [http2
| spdy
]
listen port
[default_server
] [ssl
] [http2
| spdy
]
default_server: 设置默认虚拟主机;用于基于ip地址,或使用了任意不能对应任意一个server的name是返回站点;
默认第一个 或者
server {
listen 80 default;
ssl;用于限制只能经过SSL连接提供服务;既HTTPS
spdy:SPDY protocl (speedy),在编译时用了spdy模块的状况下,用于支持spdy协议
http2: http version 2
3.server_name NAME[....]; 后可跟一个或多个主机名,名称还可使用通配符和正则表达式;
(1)先检查精确匹配 www.aa.com
(2)左侧通配符 *.aa.com
(3)右侧通配符 www.aa.*
(4)正则表达式 -^.*\aa\.com$
(5)default_server
4.tcp_nodelay on|off; 控制tcp的报文控制 默认off 对keepalive模式下的链接是否使用TCP_NODELAY选项
5.tcp_nopush on|off; 是否启用TCP_NOPUSH(FREEBSE)或TCP_CORK(linux);仅在sendfile为on时有用
6.sendfile on|off ;是否启用sendfile功能 ; 直接在内核空间封装文件
和路径相关的
7.root 指明根文档路径 设置web资源的路径映射; 能够在location 和server中 用于指明请求的URL所对应的URL对应的文档
8.location 功能:容许根据用户请求的url匹配定义的location,即为专用配置的url提供特定配置
location [
=
| ~
| ~*
| ^~
] uri
{ ... }location
@
name
{ ... }
=:URL的精确匹配;
~:作正则表达式匹配,区分字符大小写;
-*:作正则表达式匹配,不区分大小写;
^-:URL的左边部分匹配,不区分大小写;
匹配优先级:精确匹配= > ^->~或-* > 不带符号的URL 默认;
9.alise
只能用于location配置段,定义别名
location /images/{
root /data/imgs/;
}
location /images/{
alias /data/imgs/;
}
root指令 :路径为对应的location的‘/’这个URL;
images/1.jpg ---->/data/imgs/images/1.jpg
alias指令:路径为对应的location的'/url'这个URL;
images/1.jpg ---->/data/imgs/1.jpg
10.error_page cod ...[=[response]] url; 根据http的状态吗重定向错误页面
error_page 404 =200 /404.html 以指定的状态码响应
11.try_files file ... url;
try_files file ...=code; 尝试查找第一个至N-1个文件,第一个即为返回给请求者的资源;若1 至 N-1都不存在,必须不能匹配至当前location 必须由其余location定义的跳转 不然死循环!!!
客户端请求相关的配置:
12.keepalive_timeout timout [header_timeout]; 设定keepalive连接的超时时常,默认 75秒 0表示禁止;
13.keepalive_requests number; 在keepalive链接上所容许请求的最大资源数量 默认100;
14.keepalive_disable none |browser... 禁止为某种浏览器使用keepalive功能
15.send_timeout #; 发送响应报文的超时时间,默认为60S
16.client_body_buffer_size size ; 服务端接收客户端请求报文body的缓冲区大小 默认16K;超出此指定大小时。将移存到磁盘上
client_body_temp_path path [level1[level2|[level3]]] 设定用于存储客户端请求body的临时存储路径及数量 level1表示1级 $2 2级别
client_body_temp_path /var/tmp/client_body 2 2; 一级目录2个字符表示 二级也用2个字符表示。 256个1级子目录 256*256个2级
对客户端请求的限制
17. limit_excpet METHOD {...} 对指定范围以外的其余方法进行访问控制;
18.limit_rate speed 限制客户端每分钟锁传输的字节数 默认为0
文件操做优化的相关配置
19 aio on|off; 是否启用异步io模式
20 directio on|off; 是否启用直接io操做
21 open_file_cache ;对打开的文件执行缓存
open_file_cache off;
open_file_cache max=N [inactive=time]; 能够缓存三种信息
(1)文件的描述符、文件的大小和最近一次的修改时间;
(2)打开的目录结构;
(3)没有找到的或者没有权限的操做的文件的相关信息
max=N 表示可缓存的最大条目上限; 一旦达到上限,则会使用LRU算法从缓存中删除最近最少使用的缓存项
inactive=time ; 在此处指定的时常内没有被访问过的缓存项为活动缓存项,所以直接删除
22.open_file_cache_errors on |off; 是否缓存找不到路径的文件,或没有权限没有权限访问的文件先关信息
23.open_file_cache_valid time; 每一个多久检查一次缓存中的缓存项的有效期 默认60S
24.open_file_cache_min_uses number; 缓存项在非活动期限内最少应该被访问的次数;
ngx_http_access_module 模块的配置 基于IP
ngx_http_auth_basic_module 模块的配置 basic认证
ngx_http_log_module模块的配置 日志访问
访问日志文件路径,格式名称以及缓存大小和刷写时间间隔;建议定义缓冲提高性能,可能会致使崩溃性日志丢失
ngx_http_stub_status_module模块配置
ngx_http_referer_module模块配置(基于请求报文中的referer首部的值作访问控制 防盗链)
nginx 读取php 须要插件支持
php-cgi
location ~ .*\.php$
{
fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fcgi-host.conf; fastcgi_param DOCUMENT_ROOT /home/wwwroot/xym/web ; fastcgi_param SCRIPT_FILENAME /home/wwwroot/xym/web$fastcgi_script_name; }