Skip to content

代理转发

斑马兽已经将上一章的代码生成了新项目,请访问 GITHUBGITEE 查看。下面实例是根据这个项目来操作。

安装项目

多个站点可以使用向上面配置 LARAVEL 然后在单一容器中配置虚拟主机,下面我们介绍配置多个容器实现多站点运行。

分别 CLONE 项目 banmashou 与 bmcms

mkdir test
cd test
git clone https://gitee.com/banmashou/docker.git banmashou
git clone https://gitee.com/banmashou/docker.git bmcms

容器配置

为每个项目设置配置项,如果端口或容器名相同会造成冲突无法启动

修改配置

banmashou/.env

#容器名前缀
CONTAINER_NAME_PRE=bmcms

#宿主机映射到容器的端口
PORT=8081

#宿主机映射到MYSQL容器的端口
MYSQL_PORT=33061

bmcms/.env

#容器名前缀
CONTAINER_NAME_PRE=bmcms

#宿主机映射到容器的端口
PORT=8082

#宿主机映射到MYSQL容器的端口j
MYSQL_PORT=33062

执行编译

在两个项目中分别执行命令完成编译

docker-compose up -d

现在可以看到容器列表

docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"

安装配置

在宿主环境中安装 NGINX 服务器软件,NGINX 在不同系统中的配置文件存放目录不同

MAC

软件安装

下面安装 NGINX 服务器软件

brew install nginx

调试中难免有错误发生,通过错误日志可以很好排查

cat /usr/local/var/log/nginx/error.log

修改配置文件后需要重起 NGINX,下面介绍基本的管理命令

#开启
brew services start nginx
#停止
brew services stop nginx
#重起
brew services restart nginx

文件说明

  1. /usr/local/etc/nginx/nginx.conf 为主配置文件
  2. /usr/local/etc/servers 目录存放自定义配置文件,这样就不需要改主配置文件了

CENTOS

软件安装

下面安装 NGINX 服务器软件

yum update && yum install nginx -y

调试中难免有错误发生,通过错误日志可以很好排查

cat /usr/local/var/log/nginx/error.log

修改配置文件后需要重起 NGINX,下面介绍基本的管理命令

#开启
systemctl start nginx
#停止
systemctl stop nginx
#重起
systemctl restart nginx

文件说明

  1. /etc/nginx/nginx.conf 为主配置文件
  2. /etc/nginx/conf.d 目录存放自定义配置文件,这样就不需要改主配置文件了

HOSTS

如果在本地测试时,修改 /etc/hosts文件中添加两个域名,线上使用将域名解析过来就可以 了

127.0.0.1	bmcms.test
127.0.0.1	banmashou.test

配置代理

修改主配置文件 nginx.conf将 NGINX 默认 8080 端口改变 80

...
server {
	...
  listen       80;
  server_name  localhost;
  ...
}

在 NGINX 配置目录(centos 为/etc/nginx/conf.d)创建 bmcms.confbanmashou.conf 两个配置文件

banmashou.conf

server {
    listen       80;
    server_name banmashou.test;
    access_log  /var/log/nginx/banmashou.log;
    error_log /var/log/nginx/banmashou.error.log;
    location / {
    		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_pass http://127.0.0.1:8081;
    }
}

bmcms.conf

server {
    listen       80;
    server_name bmcms.test;
    access_log  /var/log/nginx/bmcms.log;
    error_log /var/log/nginx/bmcms.error.log;
    location / {
    		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_pass http://127.0.0.1:8082;
    }
}

现在使用不同域名访问就可以被代理到不同的容器中了