nginx配置详解
- nginx配置详解
- 配置文件
- 主配置文件结构
- main配置段常见的配置指令
- 与套接字相关的配置
- 定义路径相关的配置
- 定义客户端请求的相关配置
- 对客户端进行限制的相关配置
- 文件操作优化的配置
- 各种模块
- ngx_http_stub_status_module模块
- stub_status
- ngx_http_log_module模块
- ngx_http_gzip_module
- ngx_http_ssl_module模块
- ngx_http_rewrite_module模块
- ngx_http_referer_module模块
- ngx_http_proxy_module模块
- ngx_http_headers_module模块
- ngx_http_fastcgi_module模块
- ngx_http_upstream_module模块
- ngx_stream_core_module模块
nginx介绍
nginx的程序架构
采用master/worker架构
一个master进程,负责加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程 处理并响应用户请求
缓存相关的进程
cache loader:载入缓存对象
cache manager:管理缓存对象
nginx特性
异步、事件驱动和非阻塞
并发请求处理:通过kevent/epoll/select,/dev/poll
文件IO:高级IO sendfile,异步,mmap
nginx高度模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载
模块分类:
- 核心模块:core module
- 标准模块:http module等等
- 第三方模块
nginx的功用
- 静态的web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器)
- 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求;
- http/https协议的反向代理;
- imap4/pop3协议的反向代理
- tcp/udp协议的请求转发
nginx安装
1.配置yum源,yum安装
http://nginx.org/packages/centos/7/x86_64/RPMS/
yum -y install nginx
2.编译安装
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx
./configure --prefix=/usr/local/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/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
配置文件
配置
配置文件的组成部分:
主配置文件:nginx.conf
include conf.d/*.conf
fastcgi, uwsgi,scgi等协议相关的配置文件
mime.types:支持的mime类型
主配置文件的配置指令:
directive value [value2 ...];
注意:
(1) 指令必须以分号结尾;
(2) 支持使用配置变量;
内建变量:由Nginx模块引入,可直接引用;
自定义变量:由用户使用set命令定义;
set variable_name value;
引用变量:$variable_name;
主配置文件结构
main block:主配置段,也即全局配置段;
event {
...
}:事件驱动相关的配置;
http {
...
}:http/https 协议相关的配置段;
mail {
...
}
stream {
...
}
http协议相关的配置结构
http {
...
...:各server的公共配置
server {
...
}:每个server用于定义一个虚拟主机;
server {
...
server_name
root
alias
location [OPERATOR] URL {
...
if CONDITION {
...
}
}
}
}
main配置段常见的配置指令
分类:
- 正常运行必备的配置
- 优化性能相关的配置
- 用于调试及定位问题相关的配置
- 事件驱动相关的配置
正常 运行必备的配置
user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used
pid
pid /PATH/TO/PID_FILE;
指定存储nginx主进程进程号码的文件路径;
include
include file | mask;
指明包含进来的其它配置文件片断;
load_module
load_module file;
指明要装载的动态模块;
性能优化相关的配置
worker_processes
worker_processes number | auto;
worker进程的数量;通常应该为当前主机的cpu的物理核心数
worker_cpu_affinity
worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
CPU MASK:
00000001:0号CPU
00000010:1号CPU
worker_priority
worker_priority number;
指定worker进程的nice值,设定worker进程优先级;[-20,20]
worker_rlimit_nofile
worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限;
调试、定位问题
daemon
daemon on|off;
是否以守护进程方式运行Nignx;
master_process
master_process on|off;
是否以master/worker模型运行nginx;默认为on;
error_log
error_log file [level];
事件驱动相关的配置
events {
...
}
1、worker_connections number;
每个worker进程所能够打开的最大并发连接数数量;
worker_processes * worker_connections
2、use method;
指明并发连接请求的处理方法;
use epoll;
3、accept_mutex on | off;
处理新的连接请求的方法;on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程;
与套接字相关的配置
server
{ … }
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
listen
listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server:设定为默认虚拟主机;
ssl:限制仅能够通过ssl连接提供服务;
backlog=number:后援队列长度;
rcvbuf=size:接收缓冲区大小;
sndbuf=size:发送缓冲区大小;
server_name
server_name name ...;
指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;
支持*通配任意长度的任意字符;server_name *.magedu.com www.magedu.*
支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+\.magedu\.com$
匹配机制:
(1) 首先是字符串精确匹配;
(2) 左侧*通配符;
(3) 右侧*通配符;
(4) 正则表达式;
tcp_nodelay
tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项