nginx 负载均衡配置
配置文件的位置:/usr/local/nginx/conf/nginx.conf
user
|
|
nginx 运行的用户和用户组,默认为 nobody
pid
|
|
进程文件配置,默认为 logs/nginx.pid
error_log
|
|
错误日志配置。
日志级别可选:debug < info < notice < warn < error < crit
日志级别越高,记录的日志信息越少
worker_processes
|
|
nginx 对外提供 web 服务的 worder 进程数。通常设置和 cpu 核数的数量相等
worker_rlimit_nofile
|
|
一个 worker 进程能打开的文件的最大数目。
理论值应该是系统最多能打开的文件数(在 linux 中执行 ulimit -n 可得到值)与 worker 进程数相
除得到的值,但是 nginx 分配请求并不均匀,建议与 ulimit -n 的值保持一致
events
|
|
worker_connections
|
|
设置单个 worker 进程最大连接数
use
|
|
设置复用客户端线程的轮询方法
use [ kqueue | rtsig | epoll | select | poll ]
epoll 是 linux 2.6 以上版本内核中的高性能网络 I / O 模型
如果不设置,nginx 会选择一个最适合你操作系统的模型
http
|
|
http 服务器配置
include
|
|
设置 MIME 类型(资源的媒体类型),通过 http 协议由 web 服务器返回给客户端浏览器,浏览器会自动使用指定应用程序来打开资源文件
mime.types 文件位于 /usr/local/nginx/conf/mime.types
default_type
|
|
默认的资源文件的媒体类型,application/octet-stream 为任意的二进制数据流传输
log_format
|
|
日志格式。"log_format main" 这里的 main 是日志格式的名称,通过不同名称来定义多种日志格式
参数 | 描述 |
---|---|
$remote_addr | 客户端 IP 地址 |
$http_x_forwarded_for | 客户端 IP 地址 |
$remote_user | 客户端用户名 |
$time_local | 访问时间和时区 |
$http_host | 请求主机(域名) |
$request | 请求的 uri 和 http 协议 |
$http_referer | url 跳转来源(从哪个页面链接访问过来的) |
$status | http 请求状态 |
$request_time | 处理请求的时间 |
$body_bytes_sent | 发送给客户端文件的主体内容大小 |
$http_user_agent | 客户端浏览器信息 |
access_log
|
|
配置访问日志。可以指定使用的日志格式,如这里的 main
charset
|
|
使用的字符集编码
sendfile
|
|
通过调用 sendfile 函数(sendfile 是一个系统调用,在内核空间中完成),可以高效的发送静态文件
tcp_nopush
|
|
一次性发送数据包。与 tcp_nodelay 配置项互斥,与 sendfile 配合工作
tcp_nodelay
|
|
每 0.2 秒后立即发送一个数据包,可以有效的防止网络阻塞,当需要及时发送数据时,应该开启它
keepalive_timeout
|
|
配置长连接的超时时间。服务器将在这个超时时间过后关闭链接
client_header_timeout
|
|
等待客户端发送一个请求头的超时时间,超时 Nginx 返回一个请求超时的状态码(408,Request Timeout)
client_body_timeout
|
|
等待客户端发送一个请求体的超时时间,超时 Nginx 返回一个请求超时的状态码(408,Request Timeout)
send_timeout
|
|
客户端读取数据的超时时间,超时 Nginx 就会关闭该连接
client_header_buffer_size
|
|
缓存客户端请求头的大小
large_client_header_buffers
|
|
缓存客户端请求头的最大大小,此处为 4 个 32K 的大小
gzip
|
|
采用 gzip 压缩的形式发送数据,可以减少发送的数据量
gzip_min_length
|
|
大于该值的内容才压缩,0 表示所有的内容都压缩
gzip_buffers
|
|
缓存 gzip 压缩数据的空间大小,此处为 4 个 16K 的大小
gzip_types
|
|
只有匹配配置的 MIME 类型的文档内容才会被压缩
nginx 默认会对 text/html 类型进行压缩,此处无需再配,若配置 text/html,nginx 会发出警告:
nginx: [ warn ] duplicate MIME type "text/html"
server_names_hash_bucket_size
|
|
服务器名称的 hash 表大小,如果太小,Nginx 无法启动
server
|
|
虚拟主机配置
listen
|
|
监听端口
server_name
|
|
域名,可以配置多个,以空格分开
access_log
|
|
虚拟主机访问日志。
root
|
|
网站根目录,用于存放网站静态资源文件。若为相对路径,则是相对于 nginx 安装的目录。如此处的物理路径为 /usr/local/nginx/www.fanlychie.com
location
|
|
配置请求处理的方式
语法 | 描述 |
---|---|
/ | 通用配置,可匹配任意请求的 url 地址 |
= | 精确匹配 url 地址 |
~ | 区分大小写的正则表达式匹配 url 地址 |
~* | 不区分大小写的正则表达式匹配 url 地址 |
^~ | 禁止正则表达式的普通字串匹配 url 地址 |
多个 location 匹配 url 地址的优先级:
"=" 被匹配,停止搜索其他匹配
"^~" 被匹配,停止搜索其他匹配
"~" 和 "~*" 按配置文件中出现的先后顺序,一旦匹配,停止搜索其他匹配
若以上都没有匹配到,则交给 "/" 处理请求
expires
|
|
js 和 css 文件由 nginx 直接提供,缓存一天
如客户端访问 http://www.fanlychie.com/styles/main.css
由于上面已经配置 root www.fanlychie.com,nginx 会将
/usr/local/nginx/www.fanlychie.com/styles/main.css 文件直接返回给客户端
|
|
同上面,图片文件缓存 7 天
deny
|
|
禁止直接访问 *.jsp 文件(返回 403 状态码给客户端)
proxy_pass
|
|
proxy_pass 配置反向代理
即通过域名访问网站首页,nginx 将请求转发给真实的运用服务器处理,即
http://www.fanlychie.com/index (www.fanlychie.com 是上面配置的 server_name 的名称)
proxy_set_header
设置请求报头域的值
参数 | 描述 |
---|---|
Host | 指定请求的服务器的域名和端口号 |
X-Forwarded-For | 用于记录代理 IP 信息 每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源 IP 追加在 X-Forwarded-For 中。 一个 IP 来自 4.4.4.4 的请求,请求头中可能包含这样一行 X-Forwarded-For : 1.1.1.1, 2.2.2.2, 3.3.3.3 |
X-Real-IP | 用于记录真实发出请求的客户端 IP 上面的例子,如果配置了 X-Read-IP,将会是 X-Real-IP : 1.1.1.1 |
Referer | url 跳转来源(从哪个页面链接访问过来的) |
|
|
proxy_redirect
proxy_redirect 与 proxy_pass 用法类似,proxy_pass 是转发请求,客户端 url 地址不变;
proxy_redirect 是请求重定向,客户端 url 地址发生变化。
client_max_body_size
允许客户端请求的最大单文件字节数
client_body_buffer_size
代理缓冲用户端请求的缓冲区最大字节数
proxy_connect_timeout
代理连接超时时间(nginx 跟后端服务器连接超时时间)
proxy_send_timeout
代理发送超时时间(后端服务器数据回传时间)
proxy_read_timeout
代理接收超时时间(连接成功后,后端服务器响应时间)
proxy_buffers
代理缓冲区的大小
error_page
|
|
错误页面配置。
upstream
|
|
负载均衡配置
upstream www.fanlychie.com,此处的 www.fanlychie.com 是上面 server 模块配置的
server_name。server 指定真实的运用服务主机地址,可以配置多个。
nginx 默认采用轮询的策略,将请求平均的分配到各个运用服务主机中,当其中一台服务主机宕机
后,会自动的被剔除,另外一台服务主机仍然能正常提供服务。
weight
|
|
在轮询的基础上加上权重,数值越大,表示权值越大,nginx 分发的请求越多
用于运用服务器性能不均的情况。当其中一台服务主机宕机后,会自动的被剔除,另外一台服务主
机仍然能正常提供服务
ip_hash
|
|
每个请求按访问 ip 的 hash 结果分配服务主机
当新的请求到达时,先将用户 ip 通过哈希算法求值,在随后的请求客户端 ip 的哈希值只要相同,
就会被分配至同一个后端服务器,这种调度可以解决 session 共享的问题,但有时会导致分配不均
即无法保证负载均衡
附完整配置
|
|
附全局变量表
变量 | 描述 |
---|---|
$args | 请求的参数 |
$content_length | 请求头中的 Content-length 域的值 |
$content_type | 请求头中的 Content-Type 域的值 |
$host | 请求主机域的值,否则为服务器名称 |
$http_user_agent | 客户端 agent 信息 |
$http_cookie | 客户端 cookie 信息 |
$request_method | 客户端请求的动作,通常为 GET 或 POST |
$remote_addr | 客户端的 IP 地址 |
$remote_port | 客户端的端口 |
$remote_user | 已经经过 Auth Basic Module 验证的用户名 |
$request_filename | 当前请求的文件路径 |
$query_string | 与 $args 同 |
$scheme | HTTP 方法(如 http,https) |
$server_protocol | 请求使用的协议,通常是 HTTP/1.0 或 HTTP/1.1 |
$server_addr | 服务器地址,在完成一次系统调用后可以确定这个值 |
$server_name | 服务器名称 |
$server_port | 请求到达服务器的端口号 |
$request_uri | 包含请求参数的原始 URI,不包含主机名,如:"/foo/bar.php?arg=baz" |
$uri | 不带请求参数的当前 URI,$uri 不包含主机名,如 "/foo/bar.html" |
$document_uri | 与 $uri 同 |
附表达式列表
表达式 | 表达式 | 描述 |
---|---|---|
-f | !-f | 判断文件是否存在 |
-d | !-d | 判断目录是否存在 |
-e | !-e | 判断文件或目录是否存在 |
-x | !-x | 判断文件是否可执行 |