Nginx -- 04 -- nginx.conf主要配置详解

在 Nginx 中,最主要的配置文件是 nginx.conf,这里我们就来简单地了解下该文件


首先,我们先来了解下配置中的主要模块

  • 核心模块

    • 配置影响 nginx 全局的指令

    • 配置一般有:运行 nginx 的用户和组、nginx 进程 pid 的存放路径、日志存放路径、配置文件引入、允许生成工作进程数等

  • events 模块

    • 配置影响 nginx 与用户的网络连接

    • 配置一般有:每个进程的最大连接数、选取哪种事件驱动模型来处理连接请求、是否允许同时接受多个网络连接、开启多个网络连接序列化等

    • 是核心模块的子模块

  • http 模块

    • 可以嵌套多个 server 块,配置代理、缓存、日志定义等绝大多数功能和第三方的模块配置

    • 例如:文件引入、mime-type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时事件、单连接请求数等

  • server 模块

    • 配置虚拟主机的相关参数,一个 http 块中可以嵌套多个 server 块

    • 是 http 模板的子模块

  • location 模块

    • 配置请求的路由以及各种页面的处理情况

    • 是 http 模板的子模块

  • upstream 模块

    • 配置负载均衡

接着,我们再来整体地解析下该配置文件

一、核心模块

user  nobody nobody;

user

  • 设置 nginx 的用户和组,默认为 nobody nobody组

  • 如果 group 省略则 group 默认为与 user 同名的组

// 4个cpu,开启4个进程
worker_processes  4;
worker_cpu_affinity  0001 0010 0100 1000;

worker_processes

  • 设置 nginx 进程数,默认为 1

worker_cpu_affinity

  • 设置开启多核 cpu,让不同的进程使用不同的 cpu

关于 worker_processes 和 worker_cpu_affinity 的具体用法可以看这里

error_log  logs/error.log;

error_log

  • 设置错误日志的存放路径
pid  logs/nginx.pid;

pid

  • 设置进程 pid 的存放路径

二、events模块

events {
    accept_mutex  on;
    multi_accept  on;
    use  epoll;
    worker_connections  1024;
}

accept_mutex

  • 设置网络连接序列化,防止发生惊群现象,默认为 on

  • 惊群:指的是多线程/多进程同时阻塞等待同一个事件,当这个事件发生时,这些线程/进程就会同时被唤醒去响应这个事件,然而只有一个线程/进程能处理该事件,其他进程/线程在处理失败后重新进入休眠状态,在一定程度上降低了系统性能

  • 关于惊群现象,具体的可以看这里

multi_accept

  • 设置一个进程是否同时接受多个网络连接,默认为 off

use

  • 设置事件驱动模型,默认为 epoll (select | poll | kqueue | epoll | resig | /dev/poll | eventport)

worker_connections

  • 设置最大连接数,默认为 512

三、http模块

http {
    sendfile  off;
    sendfile_max_chunk  100k;
    keepalive_timeout  65;
    
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    sendfile_max_chunk     on;

    keepalive_timeout  65;
}

sendfile

  • 设置是否允许使用 sendfile 方式来传输文件,默认为 off

sendfile_max_chunk

  • 每个进程每次以 sendfile 方式来传输文件时,传输的数据量不能大于设定的值,默认为 0,即不设上限

keepalive_timeout

  • 设置连接超时时间,默认为 75s

include

  • 文件扩展名与文件类型映射表

default_type

  • 设置默认文件类型,默认为 text/plain

log_format

  • 设置访问日志的格式,其常用配置项如下

    配置项 说明
    $remote_addr 记录访问程序的客户端地址
    $remote_user 记录客户端用户名
    $time_local 记录访问的时间与时区
    $request 记录请求的 url 和 http 协议
    $status 记录请求返回的状态码,如:200、404、500等
    $body_bytes_sent 记录服务端发送给客户端的主体内容大小
    $http_referer 记录此次请求是从哪个页面链接进行访问的
    $http_user_agent 记录客户端的相关信息,如:操作系统、浏览器等
    $http_x_forwarded_for 当客户端通过代理服务器访问程序时,记录客户端地址及代理端地址 (即代理信息)

access_log

  • 设置访问日志的存放路径,默认为 logs/access.log main

  • nginx 会将用户访问服务器的日志信息存储到访问日志中吗,供我们来分析用户的浏览行为

  • 此功能由 ngx_http_log_module 模块负责


四、server 模块、location 模块

server {
    listen       80;
    server_name  localhost;

    location / {
        #root   html;
        #index  index.html index.htm;
        proxy_pass  http://tomcatcluster.com;
        proxy_redirect  default;
    }
}

listen

  • 设置监听的端口

server_name

  • 设置监听的地址

root

  • 设置请求的根目录

index

  • 设置请求的默认页面

proxy_pass

  • 设置请求跳转的地址 (代理地址),可与 upstream 模块中定义的服务器集群名字搭配使用,用于搭建负载均衡集群

proxy_redirect

  • 设置 HTTP 头部的 location 或 refresh 字段,默认为 default

五、upstream 模块

upstream tomcatcluster.com {
    server	127.0.0.1:8001 weight=1;
	server  127.0.0.1:8004 weight=2;
}

tomcatcluster.com

  • 服务器集群名字 (自定义),可与 server 模块中的 proxy_pass 属性搭配使用,用于搭建负载均衡集群

server

  • 设置代理服务器地址

weight

  • 设置权重大小,权重越大,分配的概率越大
posted @ 2019-04-15 13:29  GeneXu  阅读(87)  评论(0)    收藏  举报