时间:2019-12-22来源:系统城作者:电脑系统城
前言
代理的作用是什么?
- 多个域名解析到同一个服务器
- 方便一台服务器多个应用只对外开放一个端口
- 访问应用不需要带着烦人的端口,直接域名访问
- 应用隔离
- 降低耦合度
- ...
总的来说就是方便维护,并且在维护一个应用的时候,不影响其他应用。
如何代理 (容器间如何通信)?
直接使用 nginx 的代理功能即可 (相关能力另行查阅),这里麻烦的就是 docker 容器间的通信。
Docker 容器间通信的主要方式有以下 4 种:
- 通过容器 IP 访问:容器重启后,IP 会发生变化。
- 通过宿主机的 ip:port 的方式访问:如果宿主机 IP 改变,就得每个应用都得改一遍,并且还要绑定端口,麻烦。
- 通过 link 建立链接:相互依赖的太紧,不利于维护。
- 自定义 network: 在同一个桥接网络中的容器可以相互访问。
很明显,会选择 自定义 network 的方式,让相关应用链接到同一个网络,这样应用与应用、代理与被代理之间其实就没什么依赖,不仅维护方便,而且迁移也方便。配置也不麻烦,只需要将常规的 IP 或域名换成相应的容器名即可。
一、统一网络
那么,首先需要创建一个共用的桥接网络:
二、代理服务容器
创建一个专门用来代理的 nginx 服务容器,取名:proxy-nginx,这里使用 docker-compose 构建,其目录结构最终如下:
有些文件是在后续的运行过程产生的,配置时,只需要把必要的文件和目录创建好就行。
docker-compose.yml
把对外的 80、443 的端口绑定到代理服务器,所有的应用都可以从这里进来。
Dockerfile
这里将会创建运行用户组和用户 www-data,方便配置和控制,这个名字会用在 nginx 的配置中。
nginx.conf
这个的内容拷贝 nginx 的默认就行,需要改的就是运行用户名,注意用户名要和前面的设置的保持一致。
startup.sh
这个是用来启动 nginx 程序用的,内容目前比较少,主要是为以后扩充内容方便。
启动代理服务容器
查看启动是否正常 docker-compose ps ,如果不正常,检查下配置是否有错误。
这个就这样,先放着,去创建应用。
三、添加应用
添加一个站点 https://baipiaoquan.com/。
配置应用容器
同样使用 docker-compose 创建应用。
这是一个 php 项目,所以这个应用里至少需要 nginx 和 php-fpm 两个服务容器,项目目录结构如下:
docker-compose.yml
为了方便调整,这里使用了环境变量。
注意 nginx 的容器名称 container_name: ${COMPOSE_PROJECT_NAME}_nginx,这个值很关键并且会在后续代理中用到。
.env
使用的代理网络名称是:proxy-network,这是在前面创建的;
nginx 的容器名称会是:baipiaoquan_nginx。
nginx 的 Dockerfile
这个文件可以把前面的那个直接拿来,然后加上关于 php 相关的就行了。
php-fpm 的 Dockerfile
别忘了 php.ini 文件,也可以使用它默认的,那就要把这个相关的配置删掉。
服务 baipiaoquan.com.conf 的配置
我这里算是配全了,其实可以精简,只需要配置需要的即可。
启动应用
此时,已经可以启动 baipiaoquan.com 的服务了,在 baipiaoquan 的目录下运行:
如果没有意外,应用应该启动并可以接收服务。亦可以测试下,进入容器访问下 localhost,看看结果是不是想要的。我是这样测试的:
然后产看返回的数据大小,根据情况判断是不是成功了。
可以通过下面的命令查看该应用是否成功连接到 proxy-network:
接下来要让全世界的人都能访问到这个应用。
添加代理配置到 nginx-proxy
注意:要先启动应用,然后再开始代理,不然会出现 nginx 找不到 upstream 报错。
存放位置:proxy-nginx/sites/baipiaoquan.com.conf,只需要把上面的配置拷贝下来,改几个地方就行,最终配置如下:
重新加载代理服务器的配置,在 nginx-proxy 目录下运行:
稍等片刻,如果一切顺利,那么现在全世界的人应该能访问到这个 https://baipiaoquan.com/ 网站了。
如果还需要添加其他应用,是一样的逻辑,流程照搬。例如我又加了一个应用:https://chaohuahui.com/ ,可以 ping 一下他们的 IP 是一样的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17