调优主要是对nginx.conf文件进行调优。文件上的参数代表什么含义上一篇已经讲过,很多参数调优上一篇也进行了修改,只是并没有点明。现在来汇总一下
worker_processes 8;
根据服务器的cpu来配置。一般为一般为 Cpu 核心*2use epoll
。nginx的运行模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选。ulimit -n 65536
后worker_connections
的设置才能生效。keepalive_timeout 65;
即可。Nginx的镜像服务器作用是直接把静态文件在本地硬盘创建并读取,类似于七牛或者又拍这样的镜像CDN功能,首次访问会自动获取源站的静态图片等文件,之后的访问就是直接从CDN服务器读取,加快了速度。
镜像服务器的配置参数:
#启用缓存到本地的功能
proxy_store on;
#表示用户读写权限,如果在error中报路径不允许访问的话就用"chomod -R a+rw"将下面配置的路径改 为相应的权限.
proxy_store_access user:rw group:rw all:rw;
#此处为文件的缓存路径,这个路径是和url中的文件路径一致的
proxy_temp_path 缓存目录;
#在上面的配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端 拉取文件,还必须增加:
if ( !-e $request_filename) {
proxy_pass http://192.168.10.10;
}
#注:"!-e $request_filename"正则表达式,匹配缓存目录中的文件与源文件是否存在。
#"http://192.168.10.10" 源服务器的地址,默认端口80,如监听其他端口,此处要指出,例如4000端 口,http://192.168.10.10:4000
整体配置如下(修改nginx的配置文件nginx.conf):
#这里的location是要换成自己经过精确匹配的location,
location ~*\.(gif|jpg|jepg|png|bmp)$ {
expires 3d; #所有链接,浏览器缓存过期时间为3天
proxy_set_header Accept-Encoding '';
root /home/mpeg/nginx; #此目录为服务器的根目录,下面的if语句就是判断此目录 下是否有响应的文件
proxy_store on; #表示开启缓存
proxy_store_access user:rw group:rw all:rw;#表示用户读写权限
proxy_temp_path /home/mpeg/nginx; #此处为文件的缓存路径,这个路径root配置的路径一致的
if ( !-e $request_filename) {
proxy_pass http://192.168.0.1; #此处为要被代理的服务器的地址
}
}
整个过程就是第一次访问图片、文件等静态资源获取访问http://192.168.0.1这个地址,然后后续静态资源的访问会直接从nginx服务器中的/home/mpeg/nginx路径去判断。如果有就直接返回该资源。如果没有就从http://192.168.0.1服务器拿。
关键在于location 后面的路径判断和匹配好你对应的静态资源。
用nginx做负载均衡,作为架构的最前端或中间层,随着日益增长的访问量,需要给负载均衡做高可用架构,利用keepalived解决单点风险,一旦nginx宕机能快速切换到备份服务器。
准备两个nginx服务器 两个服务器都要下载keepalived。这里不重点描述keepalived,简单带过。
yum install keepalived pcre-devel -y
find / -name keepalived.conf
查找global_defs {
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.120
}
}
global_defs {
notification_email {
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
# 根据ifconfig看查看ip地址是在ens33上还是在 eth0 等等 该服务器ip在ens33上
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
#认证的信息要和另一台服务器相同
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#虚拟ip要根据两台服务器的网段配置,并且两台服务器配置要相同
192.168.2.120
}
}
我两台服务器地址分别是192.168.2.110、192.168.2.111 ,配置的虚拟ip为 192.168.2.120
4. 测试高可用
启动nginx和keepalived service keepalived start
启动之后 两个服务器都ping 虚拟的ip,能通说明keepalived 虚拟ip配置成功
然后访问192.168.2.120 就会根据keepalived 的配置转到主机去。
nginx 服务器
另一台nginx 服务器
访问虚拟ip
这里nginx+keepalived 就完成。
** 热备部署**
热备部署就是说当我们要部署项目时,如果改动的内容不影响主要的业务流程,不想停止服务,可以采用这样的方式:停止主服务器去更新部署项目,备用服务器继续提供服务,等待主服务器部署完成后,在停止备用服务器部署项目。
之前说到负载均衡的时候用到了 upstream 配置,热备部署也是用到了upstream 配置
upstream weightdemo {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
那么如果想把10001作为主机 ,10002作为备份 将上面配置改为
upstream weightdemo {
server localhost:10001 ;
server localhost:10002 backup;
}
那么只要10001还能提供服务,10002就不会提供服务。
如果10001需要部署项目时,由于10001暂时不能提供服务,10002就会提供服务,等待10001恢复。10001 部署成功后就可以部署10002。
该模块可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容。
要是用这个模块首先要创建一个密码。
密码支持以下类型
htpasswd 生成密码文件
htpasswd是开源Http服务器Apache Http Server的一个命令工具,所以本机如果没有该命令,需要先安装。
yum install httpd-tools -y
htpasswd指令用来创建和更新用于基本认证的用户认证密码文件。htpasswd指令必须对密码文件有读写权限,否则会返回错误码。
htpasswd参数列表:
参数 | 参数说明 |
---|---|
-b | 密码直接写在命令行中,而非使用提示输入的方式 |
-c | 创建密码文件,若文件存在,则覆盖文件重新写入 |
-n | 不更新密码文件,将用户名密码进行标准输出 |
-m | 使用MD5算法对密码进行处理 |
-d | 使用CRYPT算法对密码进行处理 |
-s | 使用SHA算法对密码进行处理 |
-p | 不对密码进行加密处理,使用明文密码 |
-D | 从密码文件中删除指定用户记录 |
htpasswd生成Nginx密码文件:htpasswd -bc /usr/local/openresty/nginx/conf/passwordnginx Securitit 12345678
这样就表示密码生成成功,对应文件目录下就有该密码文件。查看密码文件Securitit:$apr1$YTtMWb7P$hH.nFDm6lBNlQs98syy6t/
Securitit 就是用户名 后面一串就是密码。
若要在已有Nginx密码文件中追加用户,则无需-c参数
nginx配置文件配置
在location处加上两个参数
location / {
auth_basic "Restricted";
auth_basic_user_file conf/htpasswd;
}
代理相关参数:
# 代理服务
proxy_pass;
# 是否允许重定向
proxy_redirect off;
# 传 header 参数至后端服务
proxy_set_header Host $host;
# 设置request header 即客户端IP 地址
proxy_set_header X-Forwarded-For $remote_addr;
# 连接代理服务超时时间
proxy_connect_timeout 90;
# 请求发送最大时间
proxy_send_timeout 90;
# 读取最大时间
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
镜像服务器相关参数
1.Nginx 静态缓存基本配置
在http元素下添加缓存区声明。
#proxy_cache_path 缓存路径
#levels 缓存层级及目录位数
#keys_zone 缓存区内存大小
#inactive 有效期
#max_size 硬盘大小
proxy_cache_path /data/nginx/cache_item levels=1:2
keys_zone=cache_item:500m inactive=20d max_size=1g;
2.为指定location 设定缓存策略。
# 指定缓存区
proxy_cache cache_item;
#以全路径md5值做做为Key
proxy_cache_key $host$uri$is_args$args;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;
3.缓存的清除:
该功能可以采⽤第三⽅模块 ngx_cache_purge 实现。 为nginx 添加 ngx_cache_purge 模块
#下载ngx_cache_purge 模块包
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
#查看已安装模块
./sbin/nginx -V
#进入nginx安装包目录 重新安装 --add-module为模块解压的全路径
./configure --prefix=/root/svr/nginx --with-http_stub_status_module -- with-http_ssl_module --add-module=/root/svr/nginx/models/ngx_cache_purge- 2.0 7
#重新编译
make
#拷贝 安装目录/objs/nginx 文件用于替换原nginx 文件
#检测查看安装是否成功
11 nginx -t
4.清除配置:
location ~ /clear(/.*) {
#允许访问的IP
allow 127.0.0.1; 4
allow 192.168.0.193;
#禁止访问的IP
deny all;
#配置清除指定缓存区和路径(与proxy_cache_key一至)
proxy_cache_purge cache_item $host$1$is_args$args;
}
#配置好以后 直接访问服务生成缓存文件,在访问清楚缓存的路径,清除生成的缓存,如果指定缓存不存在 则会报404 错误。
http://www.luban.com/clear/?a=1