Nginx配置文件简介

350 阅读2分钟

Nginx配置文件简介

Nginx配置文件位置

nginx.conf 位于安装目录下的 conf 目录

Nginx配置文件的结构

nginx.conf 由多个块构成,最外面的块是 main , main 包含 Events 和 HTTP,HTTP 包含 upstreamserver, server 又包含多个 location

image.png

  • 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; # 指定静态文件的过期时间
        }