nginx基本配置与参数说明及upstream轮询机制介绍
一.nginx简介
Nginx,发音为[ x]nginx upstream,是一款专门针对性能提升而设计的软件。它最为人称道的特点是其出色的稳定性、极低的系统资源占用,以及卓越的并发连接处理能力——单台物理服务器能够支持高达30000至50000个并发连接。作为一个高性能的HTTP和反向代理服务器,它同样适用于IMAP、POP3和SMTP代理服务。
实际使用中,nginx主要:反向代理、负载均衡
二.nginx基本配置与参数说明
#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志及PID文件
#error_log logs/error.log;
错误日志记录于“logs/error.log”文件中,以“notice”级别进行记录。
错误日志记录于路径为logs/error.log的文件中,并包含信息内容。
#pid logs/nginx.pid;
#工作模式及连接数上限
{
#epoll是多路复用IO(I/O )中的一种方式,
#仅用于.6以上内核,可以大大提高nginx的性能
use epoll;
# 单个后台 进程的 最大并发链接数
worker_connections 1024;
# 并发总数是 和 的乘积
# 即 = *
在配置了反向代理之后,为何会出现这种情况,即等于星号除以四?
# 为什么上面反向代理要除以4nginx upstreamnginx基本配置与参数说明及upstream轮询机制介绍,应该说是一个经验值
依据既定参数,在常规情况下,Nginx所能处理的最大连接数计算如下:即4乘以8000,结果为32000。
# 值的设置跟物理内存大小有关
# 因为并发受IO约束,的值须小于系统可以打开的最大文件数
系统所能容纳的最大文件数量与内存容量呈正相关关系,通常情况下,配备1GB内存的计算机能够处理的文件数量大约在10万件左右。
让我们探究一下配备360M内存的虚拟专用服务器能够支持多少个文件句柄的开启。
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
因此,该参数的设定应综合考虑进程数量以及系统所能支持的最大文件打开数,并做出相应的调整。
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
当然,理论上计算出的并发数量可能与实际情况存在出入,这主要是因为主机上还运行着其他进程,它们同样需要占用系统资源。
# -SHn 65535
#设定http服务器
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
默认类型为:应用/八进制流格式;
#设定日志格式
主配置文件中定义的日志格式为:main,具体内容为:远程地址、用户名、本地时间、请求信息,格式如下:'$remote_addr - $remote_user [$time_local] "$request"'。
禁止对状态值和发送的字节数进行修改,同时记录下引用的来源地址。
禁止使用"http_user_agent"和"http_x_forwarded_for"这两个标识符。
访问日志位于logs目录下的access.log文件中,主要用途是记录。
指令决定了nginx在输出文件时是否采用零拷贝技术来调用特定函数。
#对于普通应用,必须设为 on,
若该设备用于下载等对磁盘进行高频率读写操作的应用场景,建议将其设置为关闭状态。
#以平衡磁盘与网络I/O处理速度,降低系统的.
sendfile on;
# on;
#连接超时时间
# 0;
keepalive_timeout 65;
tcp_nodelay on;
这些参数旨在优化网站性能:它们旨在降低资源消耗,同时提升访问效率。每个参数的字面含义均易于理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
设定fastcgi繁忙缓冲区的大小为128k。
设置fastcgi临时文件写入大小为128k。
该负载均衡器通过权重分配机制进行分发,其中权重可依据机器配置进行设定。这里的参数代表权值,权值越高,机器获得分配任务的机会就越大。
upstream blog.nginx.com {
服务器地址为192.168.80.121,端口号为80,权重设置为3。
服务器地址为192.168.80.122,端口号为80,权重设置为2。
服务器地址为192.168.80.123,端口号为80,权重设置为3。
}
这台机器负责负载均衡,采用nginx热备机制进行分发任务,而在非down状态或非繁忙时段,它将处理所有请求。因此,这台机器承受的压力相对较轻。
upstream blog.nginx.com {
server 192.168.80.121:80;
server 192.168.80.122:80;
服务器地址为192.168.80.123,端口号为80,执行备份操作。
}
#开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6].";
#设定请求缓冲
客户端头部缓冲区大小设定为128k。
大型客户端头部缓冲区设置为4,每个缓冲区大小为128k。
#设定虚拟主机配置
{
#侦听80端口
listen 80;
#定义访问地址,域名可以有多个,用空格隔开
服务器名称设定为www.nginx.cn,同时还包括nginx.cn。
#定义服务器的默认网站根目录位置
root html;
#设定本虚拟主机的访问日志
配置文件中指定,访问日志将被记录至nginx.access.log文件,并采用main日志格式。
#默认请求
location / {
#定义首页索引文件的名称
索引文件index.php、index.html以及index.htm均不得被修改。
}
#对 “/” 启用反向代理
location / {
不允许转发请求至本地的88端口。
proxy_redirect off;
设置代理头信息 X-Real-IP 为客户端的真实IP地址;
后端Web服务器能够通过X-Forwarded-For头信息来获取用户的实际IP地址。
设置代理头 X-Forwarded-For 为 $proxy_add_x_forwarded_for 的值;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
客户端可请求的最大单个文件大小限制为10兆字节。
客户端请求体缓冲区的大小设定为128k字节;此设置限定代理服务器能够存储的最大用户端请求数据量。
设置代理连接超时时间为90秒;此参数用于控制nginx与后端服务器建立连接时的超时限制。
代理发送超时时间设定为90秒;此参数代表后端服务器数据返回的等待时长。
设置代理读取超时时间为90秒;即连接建立后,若后端服务器未在90秒内给出响应,代理将视为超时。
代理服务器(nginx)的保存用户头部信息的缓冲区容量被设定为4k。
proxy_buffers配置项设定为4个,每个缓冲区大小为32k;此设置意味着网页内容平均占用内存不超过32k。
设置代理缓冲区在高峰期的大小为64k;此值是proxy_buffers的两倍。
代理临时文件写入大小限制为64k。
设定缓存文件夹的容量上限,一旦超过此数值,系统将不再从上游服务器传输数据。
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
设置认证基本用户文件为conf目录下的htpasswd文件。
使用Apache提供的htpasswd工具,可以生成#htpasswd文件所需的内容。
}
#本地动静分离反向代理配置
#所有jsp的页面均交由或resin处理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
禁止将请求转发至本地的8080端口。
}
#所有静态文件由nginx直接读取不经过或resin
禁止访问以下文件类型的资源:.htm、.html、.gif、.jpg、.jpeg、.png、.bmp、.swf、.ioc、.rar、.zip、.txt、.flv、.mid、.doc、.ppt。
|pdf|xls|mp3|wma)$ {
expires 15d;
}
location ~ .*.(js|css)?$ {
expires 1h;
}
# 定义错误提示页面
当发生500、502、503或504等错误时,系统将自动跳转至/50x.html页面进行处理。
location = /50x.html {
}
#静态文件缓存时间设置,nginx自己处理
禁止访问以下路径:图像、JavaScript、CSS、Flash、媒体和静态资源。
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 处理. 使用默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
设置参数为脚本文件名,该文件位于文档根目录下,并通过fastcgi脚本名称进行拼接。
include fastcgi_params;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
三.nginx配置超时时间
四.Nginx中的轮询机制介绍【负载均衡】
Nginx中有以下几种方式:
1、轮询(=1)
若未指定默认选项,各服务器将保持一致;每个请求将依照时间顺序依次被分派至不同的后端服务器nginx upstream,若某后端服务器出现故障,系统将自动将其移除。
upstream bakend {
server 192.168.1.10;
server 192.168.1.11;
}
2、
设定轮询的概率,此概率与访问频率相匹配,适用于解决后端服务器性能分布不均的问题。
如果后端服务器down掉,能自动剔除。
若此配置,1.11服务器的访问量便是1.10服务器的两倍之多。
upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}
3、
根据访问IP的哈希值对请求进行分配,确保每位访客始终访问固定的后端服务器,以此方法有效避免了跨服务器访问的难题。
如果后端服务器down掉,要手工down掉。
upstream resinserver{
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
4、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}
5、(第三方插件)
依据访问URL的哈希值进行请求分配,确保每个URL都能指向特定的后端服务器,特别是当后端服务器充当缓存服务器时nginx基本配置与参数说明及upstream轮询机制介绍,这种方法尤为高效。
在中加入hash语句,是使用的hash算法
upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
hash $request_uri;
hash_method crc32;
}
设备的状态有:
1.down 表示单前的暂时不参与负载
2. 权重,默认为1。 越大,负载的权重就越大。
默认情况下,允许尝试请求的次数限定为一回。若此次数上限被突破,系统将反馈模块所设定的错误信息。
4. 次失败后,暂停的时间。
当备用服务器在非机器出现故障或正忙于处理任务时,我们会向其发送请求。因此,这台机器所承受的压力相对较轻。
五.nginx启动、重启、关闭操作介绍
启动nginx:
nginx -c /path/to/nginx.conf
重启nginx:
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
执行命令nginx -t -c /path/to/nginx.conf,以验证nginx配置文件的准确性。
关闭nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx
其他的停止nginx 方式:
ps -ef | grep nginx
使用命令“kill -QUIT”针对指定主进程编号,可优雅地终止Nginx服务。
使用命令“kill -TERM”针对指定主进程编号,可迅速终止Nginx服务。
使用pkill命令以9的信号强度强制终止Nginx进程。
平滑重启nginx:
kill -HUP 主进程号
- 随机文章
- 热门文章
- 热评文章