Nginx的主配置文件nginx.conf位于~/conf下,默认配置内容如下:

#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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 {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
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;
# }
#}
}

1.配置运行Nginx服务器的用户(组)

user user[group];

user指定可以运行的用户,group可选项,指定可以运行Nginx的用户组

若希望所有用户均可运行Nginx则可按以下两种方法配置:

#user [user] [group];即将本行注释掉

user nobody nobody;

此指令只能在全局块中配置。

2.配置允许生成的worker process数

理论上,worker process的值越大,可以支持的并发处理量也越多,但是受限于软件本身、操作系统、硬件等。

语法格式:worker_process number|auto

number:指定Nginx进程可以产生的worker process数

auto:Nginx进程将自动检测

此指令只能在全局块中配置。

3.配置Nginx进程PID存放路径

Nginx进程作为系统的守护进程运行,需要在某文件中保存当前运行程序的主进程号。

语法格式:pid file;

file:指定存放的路径和文件名称

默认该文件存放在Nginx安装目录logs下,名称为nginx.pid

此指令只能在全局块中配置。

4.配置错误日志的存放路径

语法结构:error_log file

|stderr

[debug |info|notice|warn|error|crit|alert|emerg]

错误信息可以存放在指定的file或者输出到标准输出stderr,日志级别是可选项,由低到高分为debug(编译时使

用—with-debug开启debug)、info、notice、warn、error、crit、alert、emerg。设置低一级的日志后,会自

动记录比它高级别的日志

注:指定的文件必须对于运行Nginx进程的用户具有写权限。

此指令可在全局块、http块、server块中配置。

5.配置文件的引入

对于需要其他配置文件或者第三方模块的配置文件时可使用include指令引入配置文件。

语法结构:include file;

file:要引入的配置文件

此指令可以放在配置文件的任何地方。

6.设置网络连接的序列化

为防止当某时刻一个网络连接到来时,多个睡眠进程会被同时唤醒(“惊群”)但只有一个进程获得连接的情况而设置。Nginx使用accept_mutex指令解决此问题。开启时将会对多个Nginx进程接收连接进行序列化,防止多进程对连接的争抢。此指令默认开启。

语法结构:accept_mutex on|off;

此指令只能在events块中配置。

7.设置是否允许同时接收多个网络连接

每个Nginx服务器的worker

process都有能力同时接收多个新到达的网络连接,但是这需要配置,使用指令multi_accept,此指令默认关闭状态。

语法结构:multi_accept on|off;

此指令只能在events块中配置。

8.事件驱动模型的选择

Nginx服务器提供多种驱动模型来处理网络信息。使用指令use。

语法结构:use method;

其中,method可选择的内容有select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport等模型。

注:可以在编译时使用--with-select-module和--without-select_module设置是都强制编译select模块到

Nginx内核;使用--with-poll-module和--without-poll_module设置是都强制编译poll模块到Nginx内核

此指令只能在events块中配置。

9.设置最大连接数

用来设置允许每个worker process同时开启的最大连接数。

语法结构:worker_connections number;

注:number值不能大于操作系统支持打开的最大文件句柄数量。

此指令只能在events块中配置。

10.定义MIME-Type

MIME-Type用于浏览器区分HTML、XML、GIF和Flash等种类繁多的资源。

配置用于处理前端请求的MIME类型的语法结构:

default_type mime_type;

其中,mime_type为引入mime.types文件(types块)中定义的MIME类型,若不加此指令,默认使用text/plain。

此指令可在http块、server块或者location块中配置。

11、自定义服务日志

记录Nginx服务器提供服务过程中应答前端请求的日志。Nginx服务器支持对服务日志的格式、大小、输出等进行配置,需要使用两个指令,分别为access_log和log_format。

语法结构:access_log path[format

[buffer=size]];

path:配置服务日志的文件存放路径和名称。

format 可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式。

size:配置临时存放日志的内存缓存区大小。

此指令可在http块、server块或者location块中进行设置。默认设置为:access_log logs/access_log

combined;若要取消记录服务日志功能则使用access_log off;

log_format用于定义服务日志的格式,并且可以为格式字符串定义一个名字,以便access_log调用。

语法格式:log_format name string

...;

name:格式字符串名字;string:服务日志的格式字符串

此指令只能在http块中配置。

12、配置允许sendfile方式传输文件

配置snedfile传输方式的相关指令sendfile和sendfile_max_chunk。

语法结构:sendfile on|off;

用于开启/关闭使用sendfile()传输文件,可在http块、server块、location块中配置。

语法结构:sendfile_max_chunk size;

若size大于0,则Nginx进程的每个worker

process每次调用sendfile()传输的数据量最大不能超过该值;若为0则无限制。此指令可在http块、server块、location块中配置。

13、配置连接超时时间

指令keepalive_timeout用于设置保持与用户建立会话连接的时间。

语法结构:keepalive_timeout

timeout[header_timeout];

timeout:服务器端对连接的保持时间,默认75s。

header_timeout:可选项,在应答报文头部的Keep-Alive域设置超时时间:“Keep-Alive:timeout=header_timeout”。报文中这个指令可以被Mozilla或者Konqueror识别。

此指令可在http块、server块、location块中配置。

14、单连接请求数上限

指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数。

语法结构:keepalive_requests

number;

此指令可在http块、server块、location块中配置。默认设置为100。

15、配置网络监听

配置监听使用指令listen,有三种配置方法。

第一种配置监听的IP地址,语法结构:

listen address[:port] [default_server] [setfib=number]

[backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]

[accept_file=filter] [bind] [ipv6only=on|off] [ssl];

第二种配置监听端口,语法结构:

listen port [default_server] [setfib=number]

[backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]

[accept_file=filter] [bind] [ssl];

第三种配置UNIX Domain

Socket(一种原有Socket框架上发展起来的IPC机制,用于在单个主机上执行客户/服务器通信),语法结构:

listen unix:path[default_server]

[backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]

[accept_file=filter] [bind] [ssl];

address:IP地址,如果是IPv6的地址,需要使用中括号[]括起来。

port:端口号

path:socket文件路径

default_server,标识符,将此虚拟主机设置为address:port的默认主机。

setfib=number:Nginx-0.8.44中使用这个变量为监听socket关联路由表,目前只对FreeBSD起作用,不常用。

backlog=number:设置监听函数listen()最多运行多少网络连接处于同时挂起状态,在FreeBSD中设置为-1,其他平台默认为511.

rcvbuf=size:设置侦听socket接收缓存区大小

sndbuf=size:设置侦听socket发送缓存区大小

deferred:标识符,将accept()设置为Deferred模式。

accept_file=filter,设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。只在FreeBSD和NetBSD

5.0+平台下有效。filter可设置为dataready或httpready。

bind:标识符,使用独立的bind()处理此address:port;一般对于端口相而IP地址不同的多个连接,Nginx服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接。

ssl:标识符,设置会话连接使用SSL模式进行,此标识符和Nginx服务器提供的HTTPS服务有关。

16、基于名称的虚拟主机配置

这里的“主机”,就是指此server块对外提供的虚拟主机。配置主机名称的指令为server_name,

语法结构:server_name name...;

对于name来说,可以只有一个,也可以多个并列,之间用空格隔开。Nginx服务器规定,第一个名称作为此虚拟主机的主要名称。