环境:
Centos6.7(两台web服务器、一台nginx代理、一台网关)
负载均衡:
upstream
location ~
代理模块(静态):
proxy_cache
大白话解释URL
注:URL不好理解的话,可以理解成为访问的/地址
例:www.baidu.com/URL(缓存)、缓存/后面的内容,并使用hash加密(响应客户机访问)
搭建步骤(源码):
yum -y install pcre pcre-devel
//安装依赖包
详解:
rewrite模块需要 pcre 依赖库http://www.pcre.org/
useradd -M -s /sbin/nologin nginx
//创建nginx运行用户
tar -zxvf ngx_cache_purge-2.0.tar.gz -C /usr/src/
//上传nginx清除缓存模块并解压
tar -zxvf nginx-1.6.0.tar.gz -C /usr/src/
//上传nginx并解压
cd /usr/src/nginx-1.6.0/
//进入解压目录
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-pcre --add-module=/usr/src/ngx_cache_purge-2.0/
详解:
–user=nginx --group=nginx
//指定运行用户运行组
–with-pcre
//加载依赖库
–add-module=/usr/src/ngx_cache_purge-2.0/
//增加缓存模块
make && make install
//编译并安装
echo “PATH=$PATH:/usr/local/nginx/sbin”>>/etc/profile
//将命令加入环境变量中
source /etc/profile
//立即刷新生效
vim /usr/local/nginx/conf/nginx.conf
//配置nginx主配置文件
user nginx nginx;
//运行用户,运行组
worker_processes 1;
//CPU核心数(看情况制定)
worker_rlimit_nofile 65535; (软件)
//客户访问则占用句柄(一个用户一个句柄)
注:ulimit -SHn 65535 输入命令定义系统句柄数也需一致 ulimit -SHn可查看当前系统句柄数
vim /etc/security/limits.conf //设置系统调优句柄数
soft nofile 65535
hard nofile 65535
events {
//全局配置
use epoll;
//增加优化模块
worker_connections 65535;
//用户连接数(需和句柄数一致)
}
http { <这个结束括号在最后,不用手动添加
//整个网页站点配置
include mime.types;
//定义各文件类型(image/png,png/png)
default_type application/octet-stream;
//使用默认文件类型
charset utf-8;
//定义网站默认字符集
sendfile on;
//将文件加到系统内存,提高文件读取加速
tcp_nopush on;
//防止网络拥堵(上一行加速参数开启才有效)
tcp_nodelay on;
//防止拥堵减少网络延迟(需上一行加速开启)
keepalive_timeout 65; (秒)
//与客户端的会话保持时间(超时则断开)
gzip on;
//开启压缩功能
client_body_buffer_size 512k;
//缓存头部大小(缓存中内存中)
proxy_connect_timeout 5; (秒)
//连接后端服务器超时时间
proxy_read_timeout 60; (秒)
//后端服务器数据回应时间(传输时间也算!)
proxy_send_timeout 5; (秒)
//与后端服务器连接时后端的响应时间
proxy_buffer_size 16k;
//缓存头部信息(第一个缓存区)(内存)
proxy_buffers 4 64k;
//缓存头部信息(共4个64k缓存区)(内存)
proxy_busy_buffers_size 128k; (链接)
//后端web传输数据到nginx缓存区(内存)
proxy_temp_file_write_size 128k; (文件)
//后端web传输数据到nginx缓存区(硬盘)
临时proxy_temp_path /var/cache/nginx/cache_temp;
//web临时文件指定到硬盘缓存区
永久proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_one:200m inactive=12h max_size=30g;
//缓存web静态数据到本地硬盘中,定义存储规则指定时间
详解:
/var/cache/nginx/proxy_cache
//本地存放到硬盘位置
levels=1:2
//一级存储目录下有二级存储目录(比如1:3)
keys_zone=cache_one:200m
//定义每个缓存目录存储大小(大容量不建议)
inactive=1d
//定义缓存失效时间
max_size=30g;
//定义最大缓存值
注:proxy_temp_path(临时) 与 proxy_cache_path(永久) 指定的路径必须在同一目录
注:小时:h 天数:d 秒:s
upstream backend_server {
//定义后端服务器群集
server 192.168.1.100:80 weight=1 max_fails=2 fail_timeout=30s;
//定义服务器一
server 192.168.1.200:80 weight=1 max_fails=2 fail_timeout=30s;
//定义服务器二
}
server { <这个结束括号在最后,不用手动添加
//单个站点配置
listen 80;
//定义缓存服务器监听端口
server_name 192.168.1.10;
//定义缓存服务器名及监听IP
index index.html index.htm;
//定义nginx首页支持的页面
location / {
//客户端请求配置
proxy_next_upstream http_502 http_504 error timeout invalid_header;
//当客户端访问到错误时,可能nginx宕机,将所有请求交由后端服务器处理
proxy_cache cache_one;
//定义访问当前站点缓存到cache目录
proxy_cache_valid 200 304 12h;
//定义(访问成功/本地缓存)缓存时间
proxy_cache_key
h
o
s
t
host
hosturi
i
s
a
r
g
s
is_args
isargsargs;
//定义存放键值对hash值缓存格式
proxy_set_header Host $host;
//将相关头部请求转发到后端服务器
proxy_set_header X-Forwarded-For $remote_addr;
//如不加,防盗链会拒绝所有人
注:防盗链会拦截任何人访问本地数据及缓存数据,需使用本地跳转到后端访问
如没使用防盗链,(实际情况参考此项)
proxy_pass http://backend_server;
//当缓存没有时,转到后端群集处理
expires 1d;
//定义客户端缓存时间(此项可参考)
}
注:location为匹配规则(貌似很强大,很多都可以匹配!!)
location ~ /purge(/.*) {
//指定purge清除缓存规则及限制
allow 127.0.0.1;
//只允许本地可清除缓存
allow 192.168.1.0/24;
//允许某网段可清除缓存
deny all;
//其他全部拒绝使用清除规则
proxy_cache_purge cache_one $host
1
1
1is_args$args;
//以参数格式清空缓存
}
例:192.168.1.10/purge/a.html
//清除指定主机,指定缓存页面
注:location为匹配规则(貌似很强大,很多都可以匹配!!)
location ~ .*.(php|jsp|cgi)?$ {
//指定动态页面请求转发规则
proxy_set_header Host $host;
//所有转发后端
proxy_set_header X-Forwarded-For $remote_addr;
//所有转发后端
proxy_pass http://backend_server;
//所有转发后端
}
注:location为匹配规则(貌似很强大,很多都可以匹配!!)
mkdir /var/cache/nginx
//创建nginx临时缓存目录
nginx -t
//检测配置文件是否有误
nginx && chkconfig --level 35 nginx on
//启服务并开机自启
注;后端测试web可自行yum搭建
注:网关不予配置
提示:iptables -t nat -I PREROUTING -d 外网公网IP -p tcp --dport 80 -j DNAT --to-destination 内网nginx调度器IP
测试即可