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服务器规定,第一个名称作为此虚拟主机的主要名称。