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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Goodbye_Youth/article/details/89310175

在 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;
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

    • 设置权重大小,权重越大,分配的概率越大

猜你喜欢

转载自blog.csdn.net/Goodbye_Youth/article/details/89310175