Nginx 中包含众多的参数,这些参数影响 Nginx 的行为;本文主要介绍一些常用的参数。

1、Nginx 配置文件基本结构

Nginx 的配置文件为 conf/nginx.conf,配置文件由配置指令/参数组成,有些指令/参数位于 main 的位置(如:events、http),有些指令/参数位于其他参数下(如:server 位于 http 下);以下是一个简单的 Nginx 配置文件样例,其中配置了一个端口为 8080 的 http 服务,还配置了一个端口为 9090 的 TCP 服务。

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

stream {
    server {
        listen 9090;
        proxy_pass 10.49.196.30:9090;
    }
}

2、常用参数说明

参数

说明

默认值

位置

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

设置访问日志文件及日志格式

access_log logs/access.log combined;

http, server, location, if in location, limit_except

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

设置访问日志文件及日志格式

 

http, server, location, if in location, limit_except

add_header name value [always];

添加响应头

 

http, server, location, if in location

alias path;

设置目录别名,location 必须用 "/" 结束;文件的路径通过将 URI 去除location 部分再添加到 alias 指令的值来构建。

 

location

allow address | CIDR | unix: | all;

设置允许访问的地址

 

http, server, location, limit_except

auth_basic string | off;

使用“HTTP基本身份验证”协议对用户名和密码进行验证

auth_basic off;

http, server, location, limit_except

auth_basic_user_file file;

设置用户名/密码文件

 

http, server, location, limit_except

autoindex on | off;

是否列出目录下的文件

autoindex off;

http, server, location

autoindex_exact_size on | off;

on:显示文件的确切大小,单位为 byte;off:显示文件的大概大小,单位为 K、M、G

autoindex_exact_size on;

http, server, location

autoindex_localtime on | off;

on:显示文件的本地时间;off:显示文件的 UTC 时间

autoindex_localtime off;

http, server, location

charset charset | off;

将指定的字符集添加到“Content-Type”响应头中

 charset off;

http, server, location, if in location

client_body_buffer_size size;

设置客户端请求正文的缓冲区大小

client_body_buffer_size 8k|16k;

http, server, location

client_header_buffer_size size;

设置客户端请求头的缓冲区大小

client_header_buffer_size 1k;

http, server

client_max_body_size size;

设置客户端请求正文的最大允许大小

client_max_body_size 1m;

http, server, location 

default_type mime-type;

 定义响应的默认 MIME 类型

 efault_type text/plain;

 http, server, location

deny address | CIDR | unix: | all;

 设置拒绝访问的地址

 

 http, server, location, limit_except

error_log file [level];

设置日志文件及日志级别

error_log logs/error.log error;

main, http, mail, stream, server, location

error_page code ... [=[response]] uri;

 设置错误页面 uri

 

http, server, location, if in location

events { ... }

连接相关配置上下文

 

main

gzip on | off;

响应是否使用 gzip 压缩

 gzip off;

http, server, location, if in location

http { ... }

Http 配置上下文

 

 main

include file | mask;

通过文件名或文件权限码引入文件

 

any

index file ...;

设置初始页面文件;可以设置多个文件,Nginx 会按照指定顺序来检查,在找到一个存在的文件后停止检查。

index index.html;

http, server, location

ip_hash;

基于客户端 IP 分配请求的负载均衡方法

 

upstream

keepalive_timeout timeout [header_timeout];

第一个参数设置保持活动状态的超时时间,第二个参数设置响应头:Keep-Alive: timeout=time

keepalive_timeout 75s;

http, server, location

large_client_header_buffers numbersize;

设置大客户端请求头的缓冲区数量和大小

large_client_header_buffers 4 8k; 

http, server 

least_conn;

一种负载均衡算法:请求被分配给具有最少活动连接数的服务器

 

upstream

limit_conn zonenumber;

[ngx_http_limit_conn_module]设置使用的共享内存区域及最大并发连接数;如:limit_conn perserverZone 5;

 

http, server, location

limit_conn zone number;

[ngx_stream_limit_conn_module]设置使用的共享内存区域及最大并发连接数;如:limit_conn perserverZone 5;

 

stream, server

limit_conn_zone key zone=name:size;

[ngx_http_limit_conn_module]设置共享内存区域,包括存储的 key、区域名称及区域大小;如:limit_conn_zone $server_name zone=perserverZone:10m;

 

http

limit_conn_zone key zone=name:size;

[ngx_stream_limit_conn_module]设置共享内存区域,包括存储的 key、区域名称及区域大小;如:limit_conn_zone $server_name zone=perserverZone:10m;

 

stream

limit_req zone=name [burst=number] [nodelay | delay=number];

设置使用的共享内存区域、超过请求速率的缓存队列大小、缓存中的请求不延迟处理(nodelay)或延迟处理的个数(delay=number);如:limit_req zone=peripZone burst=5 nodelay;

 

http, server, location

limit_req_zone key zone=name:size rate=rate [sync];

设置共享内存区域,包括存储的 key、区域名称、区域大小以及请求速率;如:limit_req_zone $binary_remote_addr zone=peripZone:10m rate=100r/m;

 

http

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 *:80 | *:8000;

server

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

配置 URI

 

server, location

log_format name [escape=default|json|none] string ...;

[ngx_http_log_module]定义日志格式,通过 name 指定日志格式的名称

log_format combined "...";

http

log_format name [escape=default|json|none] string ...;

[ngx_stream_log_module]定义日志格式,通过 name 指定日志格式的名称

 

stream

pid file;

设置主进程的进程ID文件

pid logs/nginx.pid;

main

proxy_buffer_size size;

设置第一代理服务器响应缓冲区大小

proxy_buffer_size 4k|8k;

http, server, location

proxy_buffering on | off;

是否开启代理服务器响应缓冲区

proxy_buffering on;

http, server, location

proxy_buffers numbersize;

设置代理服务器响应缓冲区数量和大小

proxy_buffers 8 4k|8k;

http, server, location

proxy_busy_buffers_size size;

设置在响应未完全读取的情况下可以用于向客户端发送响应的所有缓冲区的总大小

proxy_busy_buffers_size 8k|16k;

http, server, location

proxy_connect_timeout time;

设置与代理服务器建立连接的超时时间

proxy_connect_timeout 60s;

http, server, location

proxy_read_timeout time;

设置从代理服务器读取响应的超时时间

proxy_read_timeout 60s;

http, server, location

proxy_send_timeout time;

设置向代理服务器传输请求的超时时间

proxy_send_timeout 60s;

http, server, location

proxy_pass URL;

 设置代理地址

 

location, if in location, limit_except

proxy_set_header fieldvalue;

重新定义传递给代理服务器的请求头

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

http, server, location

rewrite regexreplacement [flag];

URL 重新,用于请求的重定向

last:停止当前的重写指令,按新URL重新发起请求,浏览器URL不变(重写URL不以"http://"、"https://"、"$scheme"开头,否则URL改变)。
break:停止当前的重写指令,按新 URL 查找资源; 浏览器URL不变(重写URL不以"http://"、"https://"、"$scheme"开头,否则URL改变)。
redirect:返回 302 临时重定向,浏览器 URL 改变
permanent:返回 301 永久重定向,浏览器 URL 改变

 

server, location, if

root path;

设置请求的根目录。仅通过将 URI 添加到 root 指令的值来构建文件的路径。如果必须修改URI,则应使用 alias 指令。

root html;

http, server, location, if in location

sendfile on | off;

是否使用 sendfile() 方法

sendfile off;

http, server, location, if in location

server { ... }

 虚拟服务器配置

 

 http

server_name name ...;

设置虚拟服务器的名称

 server_name "";

 server

ssl_certificate file;

 设置虚拟服务器的 PEM 格式证书文件

 

http, server

ssl_certificate_key file;

 设置虚拟服务器的 PEM 格式密钥文件

 

http, server

ssl_ciphers ciphers;

设置启用的密码套件

ssl_ciphers HIGH:!aNULL:!MD5;

http, server

ssl_client_certificate file;

设置用于验证客户端证书的 CA 证书

 

http, server

ssl_prefer_server_ciphers on | off;

当使用 SSLv3 和 TLS 协议时,服务器密码套件释放优先于客户端密码套件

ssl_prefer_server_ciphers off;

http, server

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

设置会话缓存的类型和大小

ssl_session_cache none;

http, server

ssl_session_timeout time;

设置 session 超时时间

ssl_session_timeout 5m;

http, server

ssl_verify_client on | off | optional | optional_no_ca;

是否启用对客户端证书的验证

ssl_verify_client off;

http, server

stream { ... }

TCP 配置上下文

 

main

stub_status;

 开启查看基本状态信息

 

 server, location

tcp_nopush on | off;

是否启用 FreeBSD 上的 TCP_NOPUSH 套接字选项或 Linux 上的 TCP_CORK 套接字选项;该选项仅在使用 sendfile 时有效。

tcp_nopush off;

http, server, location

try_files file ... uri;

try_files file ... =code;

按指定顺序检查文件,并使用第一个找到的文件处理请求

 

server, location

worker_connections number;

设置工作进程最大并发连接数

worker_connections 512;

events

worker_processes number | auto;

设置工作进程的数量

worker_processes 1;

main

use method;

指定要使用的连接处理方法。通常不需要显式指定,nginx 默认会使用最有效的方法。连接方法的详细说明可参考:https://nginx.org/en/docs/events.html。

 

events

user user [group];

设置工作进程的用户和组

user nobody nobody;

main

 

 

 

 

 

 

参考:https://nginx.org/en/docs/dirindex.html