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;
}
}
}