Docker安装
1 | docker search nginx |
说明:
nginx-test 容器名称。
-d设置容器在在后台一直运行。
-p 端口进行映射,将本地 8081 端口映射到容器内部的 80 端口。
测试:
curl -l localhost:9803
Docker配置
创建目录1
mkdir -p ./nginx/www ./nginx/logs ./nginx/conf
- www: 目录将映射为 nginx 容器配置的虚拟目录。
- logs: 目录将映射为 nginx 容器的日志目录。
- conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
配置文件1
2
3
4
5docker ps
CONTAINER ID 988101b6dbcf
docker cp 988101b6dbcf:/etc/nginx/nginx.conf ./nginx/conf
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:
重启1
2
3
4
5
6
7
8
9docker kill 988101b6dbcf
docker rm 988101b6dbcf
docker run --name nginx-test -p 9803:80 -d -v /home/xxx/nginx/www:/usr/share/nginx/html -v /home/xxx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/xxx/nginx/logs:/var/log/nginx nginx
c7d0b0a20287e46b759ccd73fe6ec3072695f93900b3d04172f1f34bd0104766
curl -l localhost:9803
Nginx配置
1 | cd ./nginx/www |
修改首页1
2
3
4
5
6
7
8
9
10
11 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>welcome</title>
</head>
<body>
<h1>hello</h1>
<p>world。</p>
</body>
</html>
修改配置文件1
2
3
4
5vi /home/xxx/nginx/conf/nginx.conf
include /home/xxx/nginx/conf/conf.d/*.conf;
cd conf.d
vi default.conf
配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server{
listen 80;
server_name localhost;
index index.html index.htm;
root /home/xxx/nginx/www;#站点目录
location /recommend {
proxy_pass http://recommend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
upstream recommend {
server 172.16.25.70:9819;
server 192.168.1.41:9804 backup;
}
配置说明
upstream可以为每个设备设置状态值,这些状态值的含义分别如下:
down:表示单前的server暂时不参与负载.
weight:默认为1.weight越大,负载的权重就越大。
max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout : max_fails次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
分配策略
none(轮询)
upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如
server 192.168.61.22 weight = 6; # 60% 请求
server 192.168.61.23 weight = 4; # 40% 请求
ip_hash(访问ip)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
配置只需要在upstream中加入ip_hash;即可。
1
2
3
4
5
upstream tomcats {
ip_hash;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
1
2
3
4
5
upstream tomcats {
server 127.0.0.1:9001;
server 127.0.0.1:9002;
fair;
}
url_hash(第三方)
和IP哈希类似,只不过针对请求的url进行hash(基于缓存的server,页面静态化)。
模板
1 | upstream tomcats { |