Exploring
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
  • Docker

  • Maven

  • Nginx

    • nginx的作用
    • nginx的配置文件
      • 格式及语法
      • 常用配置
        • 通用上下文
        • main 上下文
        • event 上下文
        • http 上下文
    • nignx 的变量
    • location配置详解
    • nginx的map模块
    • nginx的日志模块
    • 反向代理
    • 负载均衡
    • 高可用
  • Tomcat

  • Vagrant

  • Linux

  • DevOps
  • Nginx
unclezs
2021-03-12
0
目录

nginx的配置文件

# 格式及语法

nginx 由模块组成,这些模块由配置文件中指定的指令控制。指令分为简单指令和块指令。

  • 简单指令:由名称和参数组成,由空格分隔并以分号 (😉 结尾。

  • 指令块:与简单指令具有相同的结构,但它不是以分号结尾,而是以一组用大括号({ 和 })包围的附加指令结束。

  • 上下文:如果块指令可以在大括号内包含其他指令,则称为上下文(例如:event、http、server和location)。放置在任何上下文之外的配置文件中的指令被认为是在 main 上下文中。event 和 http 指令在 main 上下文中,server 在 http 里面,location 在 server 里面。

  event {
  
  }
  
  http {
    server {
      location {
      
      }
    }
  }
1
2
3
4
5
6
7
8
9
10
11
  • 注释: # 后面的即为注释

# 常用配置

# 通用上下文

# include

include file | mask;
1

将另一个文件或与指定掩码匹配的文件包含到配置中。include 的这个文件应该由正确语法的指令和指令块组成。

例如:

include mime.types;
include vhosts/*.conf;
1
2

# main 上下文

# user

定义工作进程使用的用户和组凭据。如果省略 group,则使用名称与 user 相同的组。

Syntax: user user [group];
Default: user nobody nobody;

# worker_processes

定义工作进程的数量。最佳值取决于许多因素,包括(但不限于)CPU 内核数量、存储数据的硬盘驱动器数量和负载模式。(值“auto”将尝试自动检测它)。

| Syntax: | worker_processes number | auto | | :------- | -------------------------------------- | | Default: | worker_processes 1; |

# error_log

配置日志记录。可以在同一配置级别上指定多个日志。如果在主配置级别上未明确定义将日志写入文件,则将使用默认文件。

可用于 main,http,mail,stream,server,location 上下文。

  • 第一个参数定义将存储日志的文件。特殊值 stderr 选择标准错误文件。可以通过指定“syslog:”前缀来配置日志记录到 syslog。可以通过指定“memory:”前缀和缓冲区大小来配置记录到循环内存缓冲区。
  • 第二个参数确定日志记录的级别,可以是以下之一:debug、info、notice、warn、error、crit、alert 或 emerg。默认为 error。如果设置了一个级别,那么将会输出大于这个级别的日志,比如设置 alert,则输出 alert 和 emerg 级别的日志。
Syntax: error_log file [level];
Default: error_log logs/error.log error;

# daemon

确定 nginx 是否应该成为守护进程。主要在开发过程中使用。

# 默认是 off
daemon off | on;
1
2

# event 上下文

# accept_mutex

当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题 (opens new window)」。

Nginx默认激活了accept_mutex(最新版默认禁用),是一种保守的选择。如果关闭了它,可能会引起一定程度的惊群问题,表现为上下文切换增多(sar -w)或者负载上升,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

Syntax: accept_mutex on | off;
Default: accept_mutex off;

# multi_accept

如果 multi_accept 被禁用,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。

如果使用 kqueue 连接处理方法,则忽略该指令,因为它报告等待接受的新连接数。

Syntax: multi_accept on | off;
Default: multi_accept off;

# use

指定要使用的连接处理方法。通常不需要显式指定它,因为默认情况下 nginx 将使用最有效的方法。

Syntax: use method;
Default: —
event {
  use kqueue;
}
1
2
3

其他 method 可见 events (opens new window)

# worker_aio_requests

aio 配合 epoll 连接处理方式使用时(use epoll),设置单个 worker 进程的最大未完成异步I/O操作数。

Syntax: worker_aio_requests number;
Default: worker_aio_requests 32;

# worker_connections

设置工作进程可以同时打开的最大连接数。 应该记住,这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑是实际同时连接数不能超过当前最大打开文件数限制,可以通过worker_rlimit_nofile来改变。

Syntax: worker_connections number;
Default: worker_connections 512;

# http 上下文

# default_type

定义响应的默认 MIME 类型。可以使用 types 指令设置文件扩展名到 MIME 类型的映射。

Syntax: default_type mime-type;
Default: default_type text/plain;

# server

设置虚拟服务器的配置。基于 IP 地址和基于 Host 的虚拟服务器之间没有明确的区别。相反,listen 指令描述了应该接受服务器连接的所有地址和端口,并且 server_name 指令列出了所有服务器名称。

server {
    server_name example.com www.example.com;
}
1
2
3

# listen

设置 IP 的地址和端口,或服务器将接受请求的 UNIX 域套接字的路径。可以同时指定地址和端口,或者只指定地址或只指定端口。地址也可以是主机名。

语法格式

listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; 示例

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

listen [::]:8000;
listen [::1];

listen unix:/var/run/nginx.sock;

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
1
2
3
4
5
6
7
8
9
10
11
12

# location

根据请求 URI 设置配置。 在解码以“%XX”形式编码的文本、解析对相对路径组件“.”的引用后,对规范化的 URI 执行匹配。和“..”,以及可能将两个或多个相邻的斜线压缩成一个斜线。

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name* { ... }
Default: —

例子

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • “/”请求将匹配配置 A
  • “/index.html”请求将匹配配置 B
  • “/documents/document.html”请求将匹配配置 C
  • “/images/1.gif”请求将匹配配置 D
  • “/documents/1.jpg”请求将匹配配置 E。

# root

设置请求的根目录。

Syntax: root path;
Default: root html;

例子

location /i/ {
    root /data/w3;
}
1
2
3

/data/w3/i/top.gif 文件将被发送以响应/i/top.gif请求。

路径值可以包含变量,但 $document_root 和$realpath_root. 除外。

# sendfile

启用或禁用 sendfile() 的使用。

Syntax: sendfile on | off;
Default: sendfile off;
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11
nginx的作用
nignx 的变量

← nginx的作用 nignx 的变量→

Theme by Vdoing | Copyright © 2018-2024 unclezs
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式