Nginx配置文件主要分为六个区域

main(全局设置)
events(nginx工作模式)
http(http设置)
sever(主机设置)
location(URL匹配)
upstream(负载均衡服务器设置)

main

user: 
来指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。也可以创建nginx用户指定用户。
worker_processes:
指定Nginx要开启的子进程数。每个Nginx进程平均耗费10M~12M内存,一般指定1个进程就足够了。
error_log:
用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit,debug输出日志最为最详细,而crit输出日志最少。
pid:
用来指定进程id的存储文件位置。
worker_rlimit_nofile:
用于指定一个nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用命令'ulimit -n 65535'来设置。

例:

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;

event

use:
用来指定Nginx的工作模式。有select、poll、kqueue、epoll、rtsig、dev、poll工作模式。
select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,epoll用在Linux平台上,kqueue用在BSD系统中,对于Linux系统epoll工作模式是首选。
worker_connections:
用于定义Nginx每个进程的最大连接数(接收前端的最大请求数)默认是1024。
最大客户端连接数由worker_processes和worker_connections决定,即Max_clients=worker_processes*worker_connections,
反向代理时Max_clients变为:Max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令'ulimit -n 65536'后worker_connections的设置才能生效。

例:

events {
     use epoll;
     worker_connections  1024;
 }

http

http模块负责HTTP服务器相关属性的配置,有server和upstream两个子模块。

include:
来用设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,让nginx识别文件类型。
default_type:
设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置asp的locate环境时,Nginx是不予解析的,
此时,用浏览器访问asp文件就会出现下载了。
log_format:
用于设置日志的格式,和记录哪些参数,这里设置为main,用于access_log来纪录这种类型。

例:

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

server: 
定虚拟主机,标志定义虚拟主机开始。
listen: 
指定虚拟主机的服务端口。
server_name: 
指定IP地址或者域名,多个域名之间用空格分开。
root: 
表示在这整个server虚拟主机内,全部的root web根目录。注意要和locate {}下面定义的区分开来。
index: 
全局定义访问的默认首页地址。注意要和locate {}下面定义的区分开来。
charset: 
设置网页的默认编码格式。
access_log: 
指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

例:

server {
     listen  80;
     server_name localhost;
     root  /Users/hk/www;
     index index.php index.html index.htm;
     charset utf-8;
     access_log logs/host.access.log main;
     aerror_log logs/host.error.log main;
 }

location

用于负载均衡、反向代理、虚拟域名等配置。定位URL,解析URL,支持条件判断匹配,通过location指令实现Nginx对动,静态网页过滤处理。/表示匹配访问根目录。

root:
指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于nginx的安装目录)也可以是绝对路径。
proxy_pass:
代理转发,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
proxy_set_header:
允许重新定义或者添加发往后端服务器的请求头。
include:
加载配置文件,后面介绍nginx多个配置文件时候会提到。
index:
定义页面显示html,一般和alias配合使用。

例:

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

upstram

负载均衡,通过调度算法实现客户端IP到后端服务器的负载均衡。
Nginx的负载均衡模块目前支持4种调度算法:

1.weight 轮询(默认)。
每个请求按时间顺序逐一分配到不同的后端服务器,某台服务器宕机,故障系统被自动剔除,户访问不受影响。
weight指定轮询权值,weight值越大,分配到的访问机率越高,服务器性能不均的情况下使用。
2.ip_hash
请求按访问IP的hash结果分配,同一个IP的访客固定访问一个后端服务器,解决动态网页的session共享问题。
3.fair(须下载Nginx的upstream_fair模块)
依据页面大小、加载时间长短智能地进行负载均衡,根据后端服务器的响应时间来分配请求,响应时间短的优先分配。
4.url_hash(须安装Nginx的hash软件包)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可进一步提高后端缓存服务器的效率。

可通过server指定后端服务器的IP地址和端口,还可设定每个后端服务器在负载均衡调度中的状态,常用的状态有:

1.down:
当前的server暂时不参与负载均衡。
2.backup:
预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,这台机器的压力最轻。
3.max_fails:
允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
4.fail_timeout:
在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout一起使用。

例:

upstream server_group{
       ip_hash;
       server 192.168.123.1:80;
       server 192.168.123.2:80 down;
       server 192.168.123.3:8080 max_fails=3 fail_timeout=20s;
       server 192.168.123.4:8080;
 }server {
     listen  80;
     server_name localhost;
     location / {
        proxy_pass http://server_group/;
     }
 }

配置案例

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }	
    sendfile        on;
    keepalive_timeout  65;
	
    #静态拦截
	#当客户端访问http://www.jun.com:9090直接跳转到root(本地)的data/jun目录下文件
	 server {
        listen       9090;
        server_name  9090.jun.com;
		
        location / {
            root   data/jun;
            index  jun.html;
        }
    }
	## 需在本地电脑下的host文件中加如下配置
	#	127.0.0.1 www.jun.com
	#	127.0.0.1 www.south.com

	#	127.0.0.1 8090.jun.com
	#	127.0.0.1 8091.south.com
	#当客户端访问http://www.south.com:9091直接跳转到data/south目录下文件
	 server {
        listen       9091;
        server_name  9091.south.com;
		
        location / {
            root   data/south;
            index  south.html;
        }
    }

	#反向代理
    #当客户端访问http://www.south.com:9092直接跳转到 http://127.0.0.1:8081; 服务器下
	 server {
        listen       9092;
        server_name  9092.south.com;
		
        location / {
            proxy_pass   http://127.0.0.1:8081;
            index  south.html;
        }
    }
	
	#配置负载均衡
	#通过upstream配置干活的服务器
	upstream backServer{
	#weight:分配权限
	server 127.0.0.1:8081 weight=1;
	server 127.0.0.1:8082 weight=2;
	}
	
	#当客户端访问http://www.south.com:9093直接跳转到 干活的服务器下
	 server {
        listen       9093;
        server_name  9093.south.com;
		
        location / {
		    #通过反向代理找到干活的服务器
            proxy_pass   http://backServer/;
			#nginx发送给干活服务器超时时间(秒)
			proxy_send_timeout 1s;
			#nginx接受干活服务器超时时间(秒)
			proxy_read_timeout 1s;
            index  south.html;
        }
    }
}