Docker部署和配置Nginx

获取镜像

1
docker search nginx

安装官方版本
name: docker.io/nginx
OFFICIAL: ok

1
2
3
docker pull nginx

docker images nginx

拉取并查看镜像

启动

1
2
3
4
5
mkdir -p ./nginx/www ./nginx/logs ./nginx/conf

docker run --name nginx-Custom -p 9803:80 -d -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx nginx

docker ps

name: 容器名称。
-d:设置容器在在后台一直运行。
-p: 端口进行映射,将本地9803端口映射到容器内部的80端口。
www: 目录将映射为nginx容器配置的虚拟目录。
logs: 目录将映射为nginx容器的日志目录。
conf: 目录里的配置文件将映射为nginx容器的配置文件。

配置

index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd ./nginx/www
vi index.html

<!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
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
vi /home/nginx/conf/nginx.conf

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;
server{
listen 80;
server_name localhost;

index index.html index.htm;

root /usr/share/nginx/html;

location /recommend {
proxy_pass http://recommend_api;
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_api {
server 172.16.25.70:9819;
server 192.168.1.41:9804 down;
}

include /etc/nginx/conf.d/*.conf;
}

配置nginx文件及反向代理

测试

1
2
3
4
5
docker restart c7d0b0a20287e

curl -l localhost:9803

curl -l localhost:9803/recommend/api

说明

设备状态

  • own:表示单前的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即可。

------ 本文结束------

本文标题:Docker部署和配置Nginx

文章作者:Perkins

发布时间:2019年08月14日

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

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