# nginx.conf文件示例
user nobody; worker_processes 8; error_log varlog/nginx/error.log error; #pid logs/nginx.pid events { use epoll; worker_connections 50000; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr [$time_local] "$request" '; access_log logs/access.log main buffer=32k; ... }
所有的事件类配置都要在events中
events {...
}
http {
upstream backend {
server 127.0.0.1:8080;
}
gzip on;
server {
...
location /webstatic {
gzip off;
}
}
}
块配置项可以嵌套。内层块 直接继承外层块 ,当发生冲突时,以内层为准,如上面的gzip 在外层为 on ,到location内层时 gzip为off
块配置项由一个块配置项名和一对大括号组成
基本的配置项语法格式为:
配置项名 配置项值1 配置项值2 ...;
在行首的是配置名,这些配置名必须是nginx的某一个模块需要处理的,否则nginx会认为配置文件出现里非法配置名
配置项名结束后以空格作为分隔符
配置项值可以是数字,字符串,正则表达式,可以只有一个值或多个值, 每行配置的结尾需要加上分号
如果配置项值中包括语法符号如空格,需要使用单/双 引号括住配置项值
nginx.conf中的注释以 #开头
配置项的单位
指定空间大小时可使用 : K/k 表示KB M/m 表示 MB
时间单位可使用: ms(毫秒) s(秒) m(分钟) h(小时) d(天) w(周,7天) M(月,30天) y(年,365天)
配置项中使用变量(只有某些模块支持这种 使用变量的写法)
log_format main '$remote_addr- $remote_user [$time_local] "$request" ' ;
上例中 $remote_addr表示一个变量 remote_addr
nginx服务的基本配置
daemon on|off; 默认 daemon on; 设置nginx是否以守护进程(脱离终端在后台运行的进程)方式运行
master_process on|off; 默认master_process on; 生产环境中nginx都是以一个master进程管理多个worker进程的方式运行;
如果关闭 ,则不会fork出worker子进程,而是master进程自身来处理请求
error_log pathfile level ; 默认为 logs/error.log error; 设置nginx err日志的位置与等级 ,级别有debug,info,notice,warn error,crit,alert,emerg
debug_connection[IP|CIDR] 改配置属于事件配置,必须放在events{...}中才有效,可以是ip地址或cidr地址。需确保编译执行congfigure时是使用了--with-debug参数。
如
events {
debug_connection 10.224.66.14;
debug_connection 10.224.57.0/24;
}
这样只有来自上面IP地址的请求才会输出debug级别的日志,其他请求仍然沿用error_log中配置的日志级别
worker_rlimit_core size; 限制core dump核心转储文件的大小
working_directory path; worker进程的工作目录,用于设置coredump文件的存储目录,需确保worker进程有权限向working_directory指定的目录写入文件
include pathfile; 导入其他配置文件中的配置 ,pathfile可以是绝对路径 也可以是相对路径(相对于nginx.conf所在的目录)如
include mime.types;
include vhost/*.conf;
参数值可以是一个明确的文件名,也可以是含有通配符*的文件名,同时可以一次嵌入多个配置文件
pid pathfile; 默认pid logs/nginx.pid; 需确保nginx有权在相应的目标中创建pid文件
user username[ groupname]; 默认 user nobody nobody; 设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下,不设置用户组时,用户组与用户名相同
worker_processes number; 默认worker_processes 1 ;在master/worker运行方式下,定义worker进程的个数
use [ kqueue|rtsig|epoll|/dev/poll|select|poll|eventport]; 默认nginx会自动使用最合适的事件模型
worker_connections number; 定义每个worker进程可以同时处理的最大连接数
静态web服务器
一个典型的静态web服务器还会包含多个server块和location块
http { gzip on; upstream { ... } ... server { listen localhost:80; ... location /webstatic { if ... { ... } root opt/web/resource; ... } location ~* .(jpg|jpeg|png|jpe|gif)$ { ... } } server { ... } }
所有的http配置项都必须直属于 http块,server块,location块,upstream块或 if块等
有些配置项可以任意地出现在某一个块中,有些配置项只能出现在特定的块中。
静态的web服务器提供了许多功能: 虚拟主机与请求的分发,文件路径的定义,内存及磁盘资源的分配,网络连接的设置,MIME类型设置,客户端请求的限制,文件操作的优化,客户端请求的特殊处理。
虚拟主机与请求的分发
通常存在多个主机域名对应同一个IP地址,每个server块就是一个虚拟机,它只处理与之相对应的主机域名请求
这样一台服务器上的nginx就能以不同的方式处理访问不同主机域名的http请求了
server{
listen address:port
}
默认为listen 80; listen参数决定nginx如何监听端口,在listen后可以只加IP地址,端口或主机名
例:
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
如果是IPV6地址,可以写成
listen [::]:8000;
listen [fe80::1];
listen [:::a8c9:1234]:80;
地址和端口后还可以加上其他参数,如:
listen 43 default_serer ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
default/default_server :将所在server块作为整个web服务的默认server块,如果没有设置,则以第一个server块为默认server块。
无法匹配配置文件中的任何主机域名的请求,会由默认server处理