在容器环境中配置多个虚拟主机

利用docker容器技术,可以让我们很方便的搭建服务,完全可以用“招之即来,挥之即去”形容。比如搭建网站,需要建立3个容器:nginx、php、mysql,通过docker技术安装这个三服务都是分分钟的事,如果自行编译,需要的时间就非常多了。

和传统的LNMP环境相比,使用容器服务如何配置多个虚拟主机呢?这个也很简单,本着一个容器提供一个服务的原则,我安装了nginx、php、mysql这3个容器。下面我就说一下配置。

1、nginx容器打开了端口:-p 80:80和-p 443:443,该容器名为nginx;

2、mysql容器打开了端口:-p 3306:3306,该容器名为mysql;

3、php容器打开了端口:-p 9000:9000,该容器名为php;

4、最关键的就是配置nignx网站文件了,在配置文件目录内新建1个虚拟主机的配置文件:yourname.conf,我写的配置内容如下:

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
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://www.yourdomain.com$request_uri;
}

server {
listen 443 ssl http2;
server_name www.yourdomain.com;

# 配置ssl,存放目录为nginx容器目录
ssl_certificate /etc/nginx/SSL/yourdomain.cer;
ssl_certificate_key /etc/nginx/SSL/yourdomain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache builtin:1000 shared:SSL:10m;

# Allow large attachments
client_max_body_size 128M;

# nginx虚拟主机根目录,注意此处root为nginx容器中指定的虚拟主机的根目录
location / {
root /usr/share/nginx/html/website;
index index.html index.php;
}

# php文件交由php容器处理,注意此处root为php容器中指定的虚拟主机的分目录
location ~ [^/]\.php(/|$) {
root /var/www/html/website;
# 反向代理到php容器(此处php为容器名,也可以为php容器的ip,端口为容器开放的端口9000)
fastcgi_pass php:9000;
fastcgi_index index.php;
# php的root目录
fastcgi_param SCRIPT_FILENAME /var/www/html/website$fastcgi_script_name;
include fastcgi_params;
}

# 生成日志,目录为nginx容器中默认目录
access_log /var/log/nginx/website.log;
}

注意:建立容器时,宿主主机的web目录请同时挂载到php容器和nginx容器的web目录,这样在宿主主机中修改网站文件会同时同步到php容器和nginx容器中。