[TOC]
* * * * *
nginx配置文件是一个纯文本的文件,一般都是位于nginx的安装目录下,在我的文档nginx的配置文件处于/app/nginx/conf/nginx.conf,默认的安装路径的配置文件在/usr/local/nginx/conf/nginx.conf。它的**配置文件都是以block的形式组织**的,每个block一般都是以括号“{}”来表示的。**主要包括全局,event,http,server等设置,event主要定义nginx的工作模式,http提供web功能,server用来设置虚拟主机,**server可以存在多个
Nginx配置文件结构:
* * * * *
![](https://box.kancloud.cn/2016-08-12_57ad79e78a017.png)
* * * * *
###1. 配置main模块
下面说明main模块中的几个关键参数。
1.1 error_log:
* * * * *
用于配置错误的日志,以及日志级别。可使用于main,http,server以及location上下文中;
语法格式:
error_log file | stderr [debug | info |notice | warn | error | crit | alert | emerg ]
禁用错误日志: error_log /dev/null crit;
* * * * *
1.2 timer_resolution:
* * * * *
用于降低gettimeofday()系统调用的次数,默认情况下每次从kevent(),epoll,/dev/poll,select()或者poll()返回时都会执行此系统调用。
语法格式为: timer_resolution interval;
example: timer_resolution 100ms;
* * * * *
1.3 worker_cpu_affinity:
* * * * *
通过sched_setaffinity()将worker绑定至cpu上,只能适用于main上下文。
语法格式 : worker_cpu_affinity cpumask ...
example1:worker_process 4;
worker_cpu_affinity 0001 0010 0100 1000;
上面是指4核cpu开启4个进程
example2:worker_process 2;
woker_cpu_affinity 01 10 01 10;
上面是指2核cpu开启4个进程
* * * * *
**上面的例子2可以理解为4个进程,第一个进程对应的cpu的01(即第一个cpu内核),第二个进程对应cpu的10(即的第二个cpu内核)...
* * * * *
1.4 worker_processes:
* * * * *
worker进程是单线程进程。如果Nginx用于CPU密集型的场景中,如SSL或gzip,且主机上的CPU个数至少有2个,那么应该将此参数值设定为与CPU核心数相同;如果Nginx用于大量静态文件访问的场景中,且所有文件的总大小大于可用内存时,应该将此参数的值设定得足够大以充分利用磁盘带宽。
此参数与Events上下文中的work_connections变量一起决定了maxclient的值:
maxclients = work_processes * work_connections
* * * * *
1.5 worker_rlimit_nofile:
* * * * *
设定worker进程所能够打开的文件描述的最大数值。
语法格式:woker_rlimit_nofile number
* * * * *
###2. 配置Event模块
这个模块是用来设定nginx的工作模式以及连接数上限的。
* * * * *
2.1 worker_connections:
* * * * *
设定每个worker所能够处理的最大连接数,他与来自main上下文的worker——processes一起决定了maxclients的值;
max clients = worker_processes * worker_connections
而在反向代理场景中,其计算方法与上述公式不同,因为默认情况下浏览器将打开2个连接,而nginx会为每一个连接打开2个文件描述符;
max clients = worker_processes * worker_connections/4
* * * * *
2.2 use
* * * * *
在有着多余一个事件模型IO的应用场景中,可使用此设置nginx的工作模式,默认为./configure脚本所选定的最适合当年主机的版本。
语法格式: use [ select| poll| kqueuw | rtsig |/dev/poll]
select/poll是标准模式,kqueue/epoll是高效模式。kqueue仅仅适合BSD系统。linux首选是epoll
* * * * *
2.3 一个配置事例
~~~
user nginx nginx;
worker_processes 2;
woker_set_afinity 01 10 01 10;
error_log /app/nginx/log/error.log;
pid /var/run/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 2048;
}
~~~
###3. HTTP服务的相关配置
* * * * *
http上下文专用于配置用于http的各模块,此类指令非常的多,每个模块都有其专用指定,具体请参数nginx官方wiki关于模块部分的说明。大体上来讲,这些模块所提供的配置指令还可以分为如下几个类别。
客户端类指令:如client_body_buffer_size、client_header_buffer_size、client_header_timeout和keepalive_timeout等;
文件IO类指令:如aio、directio、open_file_cache、open_file_cache_min_uses、open_file_cache_valid和sendfile等;
hash类指令:用于定义Nginx为某特定的变量分配多大的内存空间,如types_hash_bucket_size、server_names_hash_bucket_size和variables_hash_bucket_size等;
套接字类指令:用于定义Nginx如何处理tcp套接字相关的功能,如tcp_nodelay(用于keepalive功能启用时)和tcp_nopush(用于sendfile启用时)等;
* * * * *
example:
~~~
http{
include /app/nginx/conf/mime.types;
default application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$gzip_ratio"';
access_log log/access_http.log main;
client_max_boby_size 20m;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_time 65;
gzip on;
client_header_timeout 10;
client_boby_timeout 10;
send_timeout 10;
}
~~~
基本的http的相关配置以上内容即可。
###4. 虚拟主机的相关配置
4.1基本语法:
~~~
server {
<directive> <parameters>;
}
~~~
* * * * *
~~~
server{
listen 8080; #监听端口
server_name www.smyking.com;
access_log log/host。access.log main;
index index.htm index.jsp;
root /var/www/html/
charset utf-8;
# error_page 404 @(404.html)
# localtion @404.html {
# root html;
#}
}
~~~
* * * * *
4.2 url匹配规则
urld地址匹配是nginx配置最为灵活的的部分,location支持正则表达式匹配,也支持条件判断,用户可以通过location指令实现nginx对动态静态网页的过滤处理。
* * * * *
~~~
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
root /var/www/smyking/;
expires 30d;
}
~~~
将gif,jpg,jpeg,png,swf的静态文件都交给nginx处理,expires是指静态文件的过期时间是30天
* * * * *
* * * * *
~~~
localtion ~ ^/(upload|html)/{
root /var/www/smyking;
expires 30d;
}
~~~
将upload和html下的所有文件都交给nginx来处理。
* * * * *
* * * * *
~~~
localtion ~ .*.jsp${
index index.jsp;
proxy http://localhost:9080;
}
~~~
将所有的jsp为后缀的文件都交给本机的9080端口处理
* * * * *