Nginx配置文件简介
Nginx配置文件位置
nginx.conf 位于安装目录下的 conf 目录
Nginx配置文件的结构
nginx.conf 由多个块构成,最外面的块是 main , main 包含 Events 和 HTTP,HTTP 包含 upstream 和 server, server 又包含多个 location
- main 全局设置
- server 主机设置,主要功能是指定主机和端口
- upstream 主要用于负载均衡设置,指定一系列的后端服务器
- location 用于匹配URL位置
这四者关系是:server 继承 main, location 继承 server, upstream 既不会继承其他块也不会被继承.在这四个部分当中,每个部分包含若干指令,主要包括Nginx的主模块指令、HTTP核心模块指令、事件模块指令,同时每个部分还可以使用其他HTTP模块指令,例如
HTTP SSL模块、HTTP Addition模块
Nginx块配置
Nginx的全局配置
user nobody nobody;
worker_processes 2;
error_log logs/error.log notice;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events{
use epoll;
worker_connections 65535;
}
-
user是主模块指令,指定 Nginx worker 进程运行用户以及用户组,默认由 nobody 账户运行 -
worker_processes是主模块指令,指定了要开启的进程数。每个 Nginx 进程平均耗费 10M~12M内存。建议指定和 CPU 的数量一致即可。 -
error_log是主模块指令,用来定义全局错误日志文件。日志输出级别有 debug、info、notice、warn、error、crit 可供选择,其中 debug 输出日志最为详细, 而 crit 输出日志最少。 -
pid是主模块指令,用来指定进程 pid 的存储文件位置。 -
worker_rlimit_nofile用于绑定 worker 进程和 CPU,Linux 内核 2.4 以上可用。 -
events事件指令是设定 Nginx 的工作模式及连接数上限-
use是个事件模块指令,用来指定 Nginx 的工作模式。Nginx 支持的工作模式有 select、poll、 kqueue、 epoll、rtsig 和 /dev/poll ,其中 select 和 poll 都是标准的工作模式, kqueue 和 epoll 是高效的工作模式,不同的是 epoll 用在 Linux 平台,而 kqueue 用在 BSD 系统中。 -
worker_connections也是个事件模块指令,用于定义 Nginx 每个进程的最大连接数,默认为 1024,最大客户端连接数由 worker_processes 和 worker_connections 共同决定,即 : max_clients = worker_processes * worker_connections
-
进程的最大连接数受 Linux 系统进程的最大打开文件数限制,在执行完
ulimit -n 65536之后,worker_connections 设置才生效
HTTP服务配置
#HTTP服务器配置
http{
include conf/mime.types; #主模块指令,实现对配置文件所包含文件的设置,减少主配置文件的复杂度
default_type application/octet-stream; # HTTP核心模块指令,用来设定默认类型
#日志格式的设定 main为格式名,后续可以引用
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
client_max_body_size 20m; #设置允许客户端请求的最大单个文件的字节数
client_header_buffer_size 32K; #指定来自客户端请求头的headerbuffer大小,对于大多数请求 1kb足够
#指定客户端请求中较大的消息头的缓存最大数量和大小 4 为个数 128K为大小
large_client_header_buffers 4 128k;
Sendfile on; #开启高效文件传输模式
tcp_nopush on; # 开启以防止网络堵塞
tcp_nodelay on; # 开启以防止网络堵塞
keepalive_timeout 60; #设置客户端连接保持的超时时间
client_header_timeout 10; #设置客户端请求头的超时时间
client_body_timeout 10; # 设置客户端请求体的超时时间
send_timeout 10; #指定响应客户端的超时时间
}
负载均衡配置
upstream ixdba.net{
ip_hash;
server 192.168.12.133:80;
server 192.168.12.134:80 down;
server 192.168.12.135:8009 max_fails=3 fail_timeout=20s;
server 192.168.12.136:8080;
}
upstream 是 Nginx 的HTTP upstream 模块,这个模块通过调度算法来实现客户端 IP 到后端服务器的负载均衡。
在上面的设定中,通过 upstream 指令指定了一个负载均衡器的名称 ixdba.net ,这个名称可以任意指定,在后续需要的地方直接调用即可。
upstream 支持的调度算法主要有:
- 轮询(默认)
- weight 指定权重值,值越大,被分配到的几率越大
- ip_hash 按照 IP 地址的哈希值分配
- fair 根据后端服务器的响应时间分配,响应时间短的优先分配
在HTTP upstream模块中,可以通过 server 指令来指定后端服务器的 IP 地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态,常用的状态有:
- down 表示当前server暂时不参与负载均衡
- backup 预留的备份机器,当其他所有的非 backup 主机出现故障或者忙碌时,才会请求 backup 机器
- max_fails 允许请求失败的次数,默认为1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误
- fail_timeout 在经历 max_fails 次失败后,暂停服务的时间。
Server主机配置
server{
listen 80; #指定虚拟主机的服务端口
server_name 192.168.12.188 www.ixdba.net; #指定 IP 地址或者 域名
index index.html index.htm index.jsp; # 设定访问的默认首页地址
root /web/wwwroot/www.ixdba.net # 指定虚拟主机的网页根目录
charset gb2312; # 设置网页的默认编码格式
access_log logs/www.ixdba.net.access.log main; # 设置日志文件存放路径,main 指定日志的输出格式
URL匹配配置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
root /web/wwwroot/www.ixdba.net;
expires 30d; # 指定静态文件的过期时间
}