概述

Nginx 是使用一个 master 进程来管理多个 worker 进程提供服务。master 负责管理 worker 进程,而 worker 进程则提供真正的客户服务,worker 进程的数量一般跟服务器上 CPU 的核心数相同,worker 之间通过一些进程间通信机制实现负载均衡等功能。Nginx 进程之间的关系可由下图表示:

Nginx 服务启动时会读入配置文件,后续的行为则按照配置文件中的指令进行。Nginx 的配置文件是纯文本文件,默认安装 Nginx 后,其配置文件均在 /usr/local/nginx/conf/ 目录下。其中,nginx.conf  为主配置文件。配置文件中以 # 开始的行,或者是前面有若干空格或者 TAB 键,然后再跟 # 的行,都被认为是注释。这里只是了解主配置文件的结构。

Nginx 配置文件是以 block(块)形式组织,每个 block 都是以一个块名字和一对大括号 “{}” 表示组成,block 分为几个层级,整个配置文件为 main 层级,即最大的层级;在 main 层级下可以有 event、http 、mail 等层级,而 http 中又会有 server block,server block中可以包含 location block。即块之间是可以嵌套的,内层块继承外层块。最基本的配置项语法格式是“配置项名  配置项值1  配置项值2  配置项值3  ... ”;

每个层级可以有自己的指令(Directive),例如 worker_processes 是一个main层级指令,它指定 Nginx 服务的 Worker 进程数量。有的指令只能在一个层级中配置,如worker_processes 只能存在于 main 中,而有的指令可以存在于多个层级,在这种情况下,子 block 会继承 父 block 的配置,同时如果子block配置了与父block不同的指令,则会覆盖掉父 block 的配置。指令的格式是“指令名 参数1 参数2 … 参数N;”,注意参数间可用任意数量空格分隔,最后要加分号。

下图是 Nginx 配置文件通常结构图示。

Nginx 服务的基本配置项

Nginx 服务运行时,需要加载几个核心模块和一个事件模块,这些模块运行时所支持的配置项称为基本配置;基本配置项大概可分为以下四类:

  • 用于调试、定位的配置项;
  • 正常运行的必备配置项;
  • 优化性能的配置项;
  • 事件类配置项;

各个配置项的具体实现如下:

/* Nginx 服务基本配置项 */

/* 用于调试、定位的配置项 */

#以守护进程 Nginx 运行方式
#语法:daemon off | on;
#默认:daemon on; #master / worker 工作方式
#语法:master_process on | off;
#默认:master_process on; #error 日志设置
# 路径 错误级别
#语法:error_log /path/file level;
#默认:error_log logs/error.log error;
#其中/path/file是一个具体文件;level是日志的输出级别,其取值如下:
# debug info notice warn error crit alert emerg
#从左至右级别增大;若设定一个级别后,则在输出的日志文件中只输出级别大于或等于已设定的级别; #处理特殊调试点
#语法:debug_points [stop | abort]
#这个设置是来跟踪调试 Nginx 的; #仅对指定的客户端输出 debug 级别的日志
#语法:debug_connection [IP | DIR] #限制 coredump 核心转储文件的大小
#语法:worker_rlimit_core size; #指定 coredump 文件的生成目录
#语法:working_directory path; /* 正常运行的配置项 */ #定义环境变量
#语法:env VAR | VAR=VALUE;
#VAR 是变量名,VALUE 是目录; #嵌入其他配置文件
#语法:include /path/file;
#include 配置项可以将其他配置文件嵌入到 Nginx 的 nginx.conf 文件中; #pid 的文件路径
#语法:pid path/file;
#默认:pid logs/nginx.pid;
#保存 master 进程 ID 的 pid 文件存放路径; #Nginx worker 运行的用户及用户组
#语法:user username [groupname];
#默认:user nobody nobody; #指定 Nginx worker进程可打开最大句柄个数
#语法:worker_rlimit_nofile limit; #限制信号队列
#语法:worker_rlimit_sigpending limit;
#设置每个用户发给 Nginx 的信号队列大小,超出则丢弃; /* 优化性能配置项 */ #Nginx worker 进程的个数
#语法:worker_process number;
#默认:worker_process 1; #绑定 Nginx worker 进程到指定的 CPU 内核
#语法:worker_cpu_affinity cpumask [cpumask...] #SSL 硬件加速
#语法:ssl_engine device; #系统调用 gettimeofday 的执行频率
#语法:timer_resolution t; #Nginx worker 进程优先级设置
#语法:worker_priority nice;
#默认:worker_priority 0; /* 事件类配置项 */
#一般有以下几种配置:
#1、是否打开accept锁
# 语法格式:accept_mutex [on | off]; #2、lock文件的路径
# 语法格式:lock_file path/file; #3、使用accept锁后到真正建立连接之间的延迟时间
# 语法格式:accept_mutex_delay Nms; #4、批量建立新连接
# 语法格式:multi_accept [on | off];
#
#5、选择事件模型
# 语法格式:use [kqueue | rtisg | epoll | /dev/poll | select | poll | eventport]; #6、每个worker进行的最大连接数
# 语法格式:worker_connections number;

HTTP 核心模块的配置

具体可以参看《Nginx 中 HTTP 核心模块配置

/* HTTP 核心模块配置的功能 */

/* 虚拟主机与请求分发 */

#监听端口
#语法:listen address:port[default | default_server | [backlong=num | rcvbuf=size | sndbuf=size |
# accept_filter | deferred | bind | ipv6only=[on | off] | ssl]];
# 默认:listen:80;
# 说明:
# default或default_server:将所在的server块作为web服务的默认server块;当请求无法匹配配置文件中的所有主机名时,就会选择默认的虚拟主机;
# backlog=num:表示 TCP 中backlog队列存放TCP新连接请求的大小,默认是-1,表示不予设置;
# rcvbuf=size:设置监听句柄SO_RCVBUF的参数;
# sndbuf=size:设置监听句柄SO_SNDBUF的参数;
# accept_filter:设置accept过滤器,只对FreeBSD操作系统有用;
# deferred:设置该参数后,若用户发起TCP连接请求,并且完成TCP三次握手,但是若用户没有发送数据,则不会唤醒worker进程,直到发送数据;
# bind:绑定当前端口 / 地址对,只有同时对一个端口监听多个地址时才会生效;
# ssl:在当前端口建立的连接必须基于ssl协议;
#配置块范围:server #主机名称
#语法:server_name name[...];
#默认:server_name "";
#配置块范围:server #server name 是使用散列表存储的
#每个散列桶占用内存大小
#语法:server_names_hash_bucket_size size;
#默认:server_names_hash_bucker_size 32|64|128;
#
#散列表最大bucket数量
#语法:server_names_hash_max_size size;
#默认:server_names_hash_max_size 512;
#默认:server_name_in_redirect on;
#配置块范围:server、http、location #处理重定向主机名
#语法:server_name_in_redirect on | off;
#默认:server_name_in_redirect on;
#配置块范围:server、http、location #location语法:location[= | ~ | ~* | ^~ | @] /uri/ {}
#配置块范围:server
#location尝试根据用户请求中的URI来匹配 /uri表达式,若匹配成功,则执行{}里面的配置来处理用户请求
#以下是location的一般配置项
#1、以root方式设置资源路径
# 语法格式:root path;
#2、以alias方式设置资源路径
# 语法格式:alias path;
#3、访问首页
# 语法格式:index file...;
#4、根据HTTP返回码重定向页面
# 语法格式:error_page code [code...] [= | =answer-code] uri | @named_location;
#5、是否允许递归使用error_page
# 语法格式:recursive_error_pages [on | off];
#6、try_files
# 语法格式:try_files path1 [path2] uri; /* 文件路径的定义 */ #root方式设置资源路径
#语法:root path;
#默认:root html;
#配置块范围:server、http、location、if #以alias方式设置资源路径
#语法:alias path;
#配置块范围:location #访问主页
#语法:index file...;
#默认:index index.html;
#配置块范围:http、server、location #根据HTTP返回码重定向页面
# 语法:error_page code [code...] [= | =answer-code] uri | @named_location;
#配置块范围:server、http、location、if #是否允许递归使用error_page
# 语法:recursive_error_pages [on | off];
#配置块范围:http、server、location #try_files
# 语法:try_files path1 [path2] uri;
#配置块范围:server、location /* 内存及磁盘资源分配 */ # HTTP 包体只存储在磁盘文件中
# 语法:client_body_in_file_only on | clean | off;
# 默认:client_body_in_file_only off;
# 配置块范围:http、server、location # HTTP 包体尽量写入到一个内存buffer中
# 语法:client_body_single_buffer on | off;
# 默认:client_body_single_buffer off;
# 配置块范围:http、server、location # 存储 HTTP 头部的内存buffer大小
# 语法:client_header_buffer_size size;
# 默认:client_header_buffer_size 1k;
# 配置块范围:http、server # 存储超大 HTTP 头部的内存buffer大小
# 语法:large_client_header_buffer_size number size;
# 默认:large_client_header_buffer_size 4 8k;
# 配置块范围:http、server # 存储 HTTP 包体的内存buffer大小
# 语法:client_body_buffer_size size;
# 默认:client_body_buffer_size 8k/16k;
# 配置块范围:http、server、location # HTTP 包体的临时存放目录
# 语法:client_body_temp_path dir-path [level1 [level2 [level3]]];
# 默认:client_body_temp_path client_body_temp;
# 配置块范围:http、server、location # 存储 TCP 成功建立连接的内存池大小
# 语法:connection_pool_size size;
# 默认:connection_pool_size 256;
# 配置块范围:http、server # 存储 TCP 请求连接的内存池大小
# 语法:request_pool_size size;
# 默认:request_pool_size 4k;
# 配置块范围:http、server /* 网络连接设置 */ # 读取 HTTP 头部的超时时间
# 语法:client_header_timeout time;
# 默认:client_header_timeout 60;
# 配置块范围:http、server、location # 读取 HTTP 包体的超时时间
# 语法:client_body_timeout time;
# 默认:client_body_timeout 60;
# 配置块范围:http、server、location # 发送响应的超时时间
# 语法:send_timeout time;
# 默认:send_timeout 60;
# 配置块范围:http、server、location # TCP 连接的超时重置
# 语法:reset_timeout_connection on | off;
# 默认:reset_timeout_connection off;
# 配置块范围:http、server、location # 控制关闭 TCP 连接的方式
# 语法:lingering_close off | on | always;
# 默认:lingering_close on;
# 配置块范围:http、server、location
# always 表示关闭连接之前无条件处理连接上所有用户数据;
# off 表示不处理;on 一般会处理; # lingering_time
# 语法:lingering_time time;
# 默认:lingering_time 30s;
# 配置块范围:http、server、location # lingering_timeout
# 语法:lingering_timeout time;
# 默认:lingering_time 5s;
# 配置块范围:http、server、location # 对某些浏览器禁止keepalive功能
# 语法:keepalive_disable [mise6 | safari | none]...
# 默认:keepalive_disable mise6 safari;
# 配置块范围:http、server、location # keepalive超时时间
# 语法:keepalive_timeout time;
# 默认:keepalive_timeout 75;
# 配置块范围:http、server、location # keepalive长连接上允许最大请求数
# 语法:keepalive_requests n;
# 默认:keepalive_requests 100;
# 配置块范围:http、server、location # tcp_nodelay
# 语法:tcp_nodelay on | off;
# 默认:tcp_nodelay on;
# 配置块范围:http、server、location # tcp_nopush
# 语法:tcp_nopush on | off;
# 默认:tcp_nopush off;
# 配置块范围:http、server、location /* MIME 类型设置 */ # MIME type 与文件扩展的映射
# 语法:type{...}
# 配置块范围:http、server、location
# 多个扩展名可映射到同一个 MIME type # 默认 MIME type
# 语法:default_type MIME-type;
# 默认:default_type text/plain;
# 配置块范围:http、server、location # type_hash_bucket_size
# 语法:type_hash_bucket_size size;
# 默认:type_hash_bucket_size 32 | 64 | 128;
# 配置块范围:http、server、location # type_hash_max_size
# 语法:type_hash_max_size size;
# 默认:type_hash_max_size 1024;
# 配置块范围:http、server、location /* 限制客户端请求 */ # 按 HTTP 方法名限制用户请求
# 语法:limit_except method...{...}
# 配置块:location
# method 的取值如下:
# GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、
# PROPFIND、PROPPATCH、LOCK、UNLOCK、PATCH # HTTP 请求包体的最大值
# 语法:client_max_body_size size;
# 默认:client_max_body_size 1m;
# 配置块范围:http、server、location # 对请求限制速度
# 语法:limit_rate speed;
# 默认:limit_rate 0;
# 配置块范围:http、server、location、if
# 0 表示不限速 # limit_rate_after规定时间后限速
# 语法:limit_rate_after time;
# 默认:limit_rate_after 1m;
# 配置块范围:http、server、location、if /* 文件操作的优化 */ # sendfile系统调用
# 语法:sendfile on | off;
# 默认:sendfile off;
# 配置块:http、server、location # AIO 系统调用
# 语法:aio on | off;
# 默认:aio off;
# 配置块:http、server、location # directio
# 语法:directio size | off;
# 默认:directio off;
# 配置块:http、server、location # directio_alignment
# 语法:directio_alignment size;
# 默认:directio_alignment 512;
# 配置块:http、server、location # 打开文件缓存
# 语法:open_file_cache max=N [inactive=time] | off;
# 默认:open_file_cache off;
# 配置块:http、server、location # 是否缓存打开文件的错误信息
# 语法:open_file_cache_errors on | off;
# 默认:open_file_cache_errors off;
# 配置块:http、server、location # 不被淘汰的最小访问次数
# 语法:open_file_cache_min_user number;
# 默认:open_file_cache_min_user 1;
# 配置块:http、server、location # 检验缓存中元素有效性的频率
# 语法:open_file_cache_valid time;
# 默认:open_file_cache_valid 60s;
# 配置块:http、server、location /* 客户请求的特殊处理 */ # 忽略不合法的 HTTP 头部
# 语法:ignore_invalid_headers on | off;
# 默认:ignore_invalid_headers on;
# 配置块:http、server # HTTP 头部是否允许下划线
# 语法:underscores_in_headers on | off;
# 默认:underscores_in_headers off;
# 配置块:http、server # If_Modified_Since 头部的处理策略
# 语法:if_modified_since [off | exact | before]
# 默认:if_modified_since exact;
# 配置块:http、server、location # 文件未找到时是否记录到error日志
# 语法:log_not_found on | off;
# 默认:log_not_found on;
# 配置块:http、server、location # 是否合并相邻的“/”
# 语法:merge_slashes on | off;
# 默认:merge_slashes on;
# 配置块:http、server、location # DNS解析地址
# 语法:resolver address...;
# 配置块:http、server、location # DNS解析的超时时间
# 语法:resolver_timeout time;
# 默认:resolver_timeout 30s;
# 配置块:http、server、location # 返回错误页面是否在server中注明Nginx版本
# 语法:server_tokens on | off;
# 默认:server_tokens on;
# 配置块:http、server、location

以下是在 Ubuntu 12.04 系统成功安装 Nginx 之后的主配置文件:

#Nginx服务器正常启动时会读取该配置文件,以下的值都是默认的,若需要可自行修改;
#以下是配置选项 #Nginx worker进程运行的用户以及用户组
#语法格式:user username[groupname]
#user nobody; #Nginx worker 进程个数
worker_processes 1; #error 日志设置
#语法格式:error /path/file level
#其中/path/file是一个具体文件;level是日志的输出级别,其取值如下:
#debug info notice warn error crit alert emerg,从左至右级别增大;
#若设定一个级别后,则在输出的日志文件中只输出级别大于或等于已设定的级别;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #保存master进程ID的pid文件存放路径
#语法格式:pid path/file
#pid logs/nginx.pid; #事件类配置项
#一般有以下几种配置:
#1、是否打开accept锁
# 语法格式:accept_mutex [on | off];
#2、lock文件的路径
# 语法格式:lock_file path/file;
#3、使用accept锁后到真正建立连接之间的延迟时间
# 语法格式:accept_mutex_delay Nms;
#4、批量建立新连接
# 语法格式:multi_accept [on | off];
#5、选择事件模型
# 语法格式:use [kqueue | rtisg | epoll | /dev/poll | select | poll | eventport];
#6、每个worker进行的最大连接数
# 语法格式:worker_connections number;
events {
worker_connections 1024;
} #以下是http模块
http {
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;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; #server块
# 每个server块就是一个虚拟主机,按照server_name来区分
server {
#监听端口
listen 80;
#主机名称
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main;
#location语法:location[= | ~ | ~* | ^~ | @] /uri/ {}
#location尝试根据用户请求中的URI来匹配 /uri表达式,若匹配成功,则执行{}里面的配置来处理用户请求
#以下是location的一般配置项
#1、以root方式设置资源路径
# 语法格式:root path;
#2、以alias方式设置资源路径
# 语法格式:alias path;
#3、访问首页
# 语法格式:index file...;
#4、根据HTTP返回码重定向页面
# 语法格式:error_page code [code...] [= | =answer-code] uri | @named_location;
#5、是否允许递归使用error_page
# 语法格式:recursive_error_pages [on | off];
#6、try_files
# 语法格式:try_files path1 [path2] uri;
location / {
root html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

参考资料:

《深入理解Nginx》

Nginx模块开发入门

Nginx开发从入门到精通

https://www.kancloud.cn/digest/understandingnginx/202587

点击得好礼

> 本文由作者pm1024:JAVA实验手册 发布,交流:583284584!

Nginx 配置详细文件的更多相关文章

  1. nginx配置详细解析

    转自 http://blog.csdn.net/zhongguozhichuang/article/details/528168871.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将 ...

  2. Nginx配置详细

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  3. Nginx配置详细解析(全)

    一.nginx.conf文件结构 (1)共三部分:由全局块.events块.http块组成.http块又包含http全局块.server块:server块由多个location块组成. (2)一般情况 ...

  4. 2.nginx配置详细说明

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  5. Nginx配置静态文件服务从入门到精通

    作者:三十三重天 博客:http://www.zhouhuibo.club 通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施. 引言 使 ...

  6. Windows使用Nginx配置本地文件代理(查看本地资源或图片)

    一.前言 我们在实际开发中会经常遇到把图片上传到服务器上,比如七牛云.阿里云.腾讯云一些提供服务的商家.但是我们的图片隐私也会泄露,所以我们还是上传到本地,使用Nginx来代理到我们本地图片.这样就可 ...

  7. nginx 配置.json文件直接访问

    不要弹出下载 配置nginx.conf http { include mime.types; default_type application/json;

  8. nginx配置静态文件过期时间

    1. 编辑虚拟主机配置文件/usr/local/nginx/conf/vhosts/huangzhenping.conf 说明:采用location方式 1 2 3 4 5 6 7 8 9 10  l ...

  9. nginx 配置静态文件

    location /temp/ { root F:/; autoindex on; } F:\temp 下的目录文件. 例子:http://localhost/temp/nginx-1.12.2/ht ...

随机推荐

  1. 带你揭秘Shiro(一)

    提到Shiro,不得不先介绍RBAC介绍 RBAC介绍: RBAC是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的 ...

  2. STL常用结构与方法简明总结

    C++常用的数据结构 序列式容器 vector(向量.有序数列),list(双向链表),deque(双端队列) 适配器容器 stack(栈),queue(队列) 关联式容器 map(映射.键值对二叉树 ...

  3. WPF炫酷UI及动画

    偶然看见了一张图,感觉挺好看的,花了点时间将他转化成了我代码仓库的一部分.虽然不难但也费时间.其中除了背景是百度的一张底图,其他所有内容均通过WPF的Path.Line.TextBlock.Borde ...

  4. C# -- 优先获取电脑C盘之外的磁盘来保存数据

    C# -- 优先获取电脑C盘之外的磁盘来保存数据 1. 优先获取电脑C盘之外的磁盘来保存数据.没有其他盘则使用C盘. public string GetSaveDataDiskPath() { str ...

  5. php 将科学计算法得出的结果转换成原始数据 NumToStr

    由于php最大只支持显示 15位因的数据运算,大于15位的2数加减乘除的数据的结果,会直接用科学计数法显示, 但在现实生活中,科学计数法不利于普通人识别,所以,本函数将:科学计数法的出的结果转换成原始 ...

  6. How to: Initialize Business Objects with Default Property Values in XPO 如何:在 XPO 中用默认属性值初始化业务对象

    When designing business classes, a common task is to ensure that a newly created business object is ...

  7. SpringMVC通过Redis实现缓存主页

    这里说的缓存只是为了提供一些动态的界面没办法作静态化的界面来减少数据库的访问压力,如果能够做静态化的话的还是采用nginx来做界面的静态化,这样可以承受高并发的访问能力. 好了,废话少说直接看实现代码 ...

  8. C#报Lc.exe已退出 代码为-1 错误解决方法

    解决方法一:用记事本打开*.licx,里面写的全是第三方插件的指定DLL,删除错误信息,保存,关闭,重新生成解决方案. 解决方法二:把项目文件夹下Properties文件夹下的licenses.lic ...

  9. iOS引导页(开局滚动效果)

    参考链接1:https://jingyan.baidu.com/article/4dc40848a341dfc8d846f152.html 参考链接2:https://www.cnblogs.com/ ...

  10. 闲话复数(1) | 不现实的虚数 i 为什么虚?它长成什么样?

    原文 | https://mp.weixin.qq.com/s/y-Nb3S508UZuf_0GtRuNaQ 复数的英文是complex number,直译是复杂的数.最早接触复数大概是在高中时期,只 ...