Docker安装Nginx及配置

Docker安装

1
2
3
4
5
6
7
8
9
docker search nginx
name docker.io/nginx
OFFICIAL ok

docker pull nginx

docker images nginx

docker run --name nginx-test -p 9803:80 -d 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
5
docker 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
9
docker 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
2
3
cd ./nginx/www

vi index.html

修改首页

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
5
vi /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
19
server{
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
upstream tomcats  {
server ip:8080;
}

server {
listen 80;
server_name www.xxx.com;

location / {
proxy_pass http://tomcats;

#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
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;
}
}
------ 本文结束------

本文标题:Docker安装Nginx及配置

文章作者:Perkins

发布时间:2019年09月25日

原始链接:https://perkins4j2.github.io/posts/65243/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。