usernobodynobody;#nginx启动使用的默认用户,第一个nobody为用户名,第二个为用户组#nobody是linux中权限较低的一个普通用户,但不能通过该账号登录系统worker_processes1;#指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。#根据
user nobody nobody; #
nginx启动使用的默认用户,第一个nobody为用户名,第二个为用户组
# nobody是linux中权限较低的一个普通用户,但不能通过该账号登录系统
worker_processes 1; # 指定了 Nginx 要开启的进程数。每个Nginx
进程平均耗费10M~12M内存。
# 根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样的进程数即可
# 日志错误级别有stderr, emerg, alert, crit, error, warn, notice, info,
debug
# 在源码中分别对应0-8级别,其中debug日志最为详细,stderr最少
# nginx只认第一有效设置,不能使用这样的配置 error_log logs/debug.log debug |
info;
error_log
logs/error.log;
# nginx 错误日志 相对于安装路径,默认为/usr/local/nginx/
error_log logs/error.log notice; # nginx 记录警告日志
相对于安装路径,默认为/usr/local/nginx/
error_log logs/error.log info; #
nginx 记录信息日志 相对于安装路径,默认为/usr/local/nginx/
pid
logs/nginx.pid; # 来指定进程id的存放位置
相对于安装路径,默认为/usr/local/nginx/
worker_rlimit_nofile 65535; #
用于绑定worker进程和CPU,Linux内核 2.4以上可用
# 这个指令是指当一个nginx进程打开的最多文件描述符数目,
# 理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,
# 但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
# nginx的工作模式,及最大连接数,ulimit -n 查看 ,通过ulimit -n 2048 修改为2048
events {
use epoll; #
指定Nginx的工作模式,支持的工作模式有select、poll、kqueue、epoll、rtsig 和/dev/poll
# select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,
# 不同的是 epoll用在 Linux 平台上,而kqueue用在BSD系统中。
# 对于Linux系统,epoll工作模式是首选
worker_connections 1024; #
指定nginx每个进程的最大连接数,这是系统参数,一般默认为1024,而nginx的处理能力远不止1024
# 最大客户端连接数由 worker_processes和 worker_connections决定,即:max_clients =
worker_processes * worker_connections
# 在作为
反向代理时,max_clients 变为:max_clients = worker_processes *
worker_connections/4
}
# HTTP服务配置
http {
include
mime.types;
# 引用同目录下的mime.types文件,可以减少主配置文件的复杂度
default_type
application/octet-stream; #
default_type属于http核心模块指令,这里设定默认类型为二进制流,如文件类型为定义时使用这种方式
#
Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式
log_format main '$remote_addr -
$remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#
main为此日志输出格式的名称,可以在下面的access_log指令中引用
access_log logs/access.log main
buffer=32K; #
设置Nginx被访问的日志路径、格式和缓存大小,相对于安装路径,默认为/usr/local/nginx/
# 日志格式默认值是combined,缓存大小默认是off
# 如果不想记录日志,可以使用“access_log off;”指令关闭日志记录
client_max_body_size 20m; #
用来设置允许客户端请求的最大的单个文件字节数,默认值为1M
client_header_buffer_size
32K; # 用于指定来自客户端请求头的 headerbuffer大小
# 对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的 COOKIE,
# 可以增加缓冲区大小。这里设置为32K,默认值为1K
large_client_header_buffers 4 32K; #
用来指定客户端请求中较大的消息头的缓存最大数量和单位大小
# 这里表示设置最大缓存量为4个32K
sendfile on; #
用于开启高效文件传输模式,默认值是off
tcp_nopush
on; # 用于控制TCP链接是否推送,默认值是on
tcp_nodelay on; #
用于控制TCP链接是否延迟,默认值是on
# 将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
client_header_timeout 10; #
设置客户端请求头读取超时时间,单位:秒,默认值为60
client_body_timeout 10;
# 设置客户端请求主体读取超时时间,单位:秒,默认值为60
send_timeout
10; # 指定响应客户端的超时时间,单位:秒,默认值为60
# 这个超时仅限于两个连接活动之间的时间,
# 如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接
keepalive_timeout 65; #
保持连接时间,单位:秒,超过该时间,服务器会关闭连接
# HttpGzip模块配置,这个模块支持在线实时压缩输出数据流
gzip on; #
用于设置开启或者关闭gzip模块,on表示开启GZIP压缩,实时压缩输出数据流,默认值为off
gzip_min_length 1k; #
设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。
# 默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大
gzip_proxied any;
#
gzip_buffers
4 16k; # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
# 这里表示申请4个单位为16K的内存作为压缩结果流缓存
# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果
gzip_http_version
1.1; #
用于设置识别HTTP协议版本,默认值是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_comp_level
1; # gzip压缩比(1——9),1 压缩比最小处理速度最快,9
压缩比最大但处理最慢(传输快但比较消耗cpu)默认值是1
gzip_types text/plain; #
匹配MIME类型进行压缩,无论是否指定, “text/html”类型总是会被压缩的
gzip_vary
on; #
让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
# Nginx
负载均衡配置
upstream mywebsite.net{ #
upstream指令指定了一个负载均衡器的名称mywebsite.net,可以随便指定,默认值为空
ip_hash; #
Nginx负载均衡调度算法,不设置时为轮询(算法),Nginx总共支持四种方法:
# 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,
# 故障系统被自动剔除,使用户访问不受影响。采用此算法时,可以设置Weight(轮询权值),
# Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下
# 例如:server 192.168.0.110:80 weight=5;
# ip_hash:每个请求按访问 IP 的 hash 结果分配,这样来自同一个IP 的访客固定访问一个后端服务器,
# 有效解决了动态网页存在的 session共享问题
# fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,
# 也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair的,
# 如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
#
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
# Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的 hash软件包
server
192.168.0.110:80; # 指定后端服务器的IP地址和端口
server
192.168.0.119:80 down; # down状态表示当前的server暂时不参与负载均衡
server
192.168.0.120:8009 backup; # backup状态表示预留的备份机器。当其他所有的非
backup机器出现故障或者忙的时候,
# 才会请求backup机器,因此这台机器的压力最轻,调度算法为ip_hash时,不能为该状态
server
192.168.0.211:8080 max_fails=3
fail_timeout=20s; # max_fails,允许请求失败的次数,默认为 1
# 当超过最大次数时,返回proxy_next_upstream 模块定义的错误
# fail_timeout,在经历了max_fails次失败后,暂停服务的时间
# max_fails可以和fail_timeout一起使用
# 注意: 当负载调度算法为
ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup
}
# server虚拟主机配置
server {
listen 80; #
监听的端口
server_name
192.168.0.110 www.mywebsite.net; # 指定IP
地址或者域名,多个域名之间用空格分开
charset koi8-r;
# 设置网页的默认编码格式
access_log
logs/host.access.log main; # 根据访问域名生成对应的访问日志
location /
{
root html; #
根目录,相对于安装路径,默认为/usr/local/nginx/
index index.html; # 默认主页,在根目录下
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}
location ~*
\.(gif|jpg|jpeg|png|css|js|ico)$ {
root images;
}
location
/lua {
lua_code_cache off;
content_by_lua_file /usr/local/nginx/lua/test.lua;
}
error_page 500
502 503 504 /50x.html;
location = /50x.html
{
root html;
}
}
}