求助。。有dalao写过教程的话把文章链接贴出来也行。。百度了一圈已经昏迷。。
習慣沉默2017-06-20 10:07:52
折腾了一个下午,找到了docker的解决方案
github:https://github.com/JrCs/docke...
把重要的重点部分摘出来
nginx 代理还可以使用 jwilder/docker-gen
镜像和官方 nginx 镜像作为两个独立的容器运行。
您可能希望这样做是为了防止将 docker 套接字绑定到公开暴露的容器服务(避免将 docker 套接字挂载在 nginx 暴露的容器中)。从安全角度来看更好。
要将 nginx 代理作为单独的容器运行,您需要:
1)将模板文件nginx.tmpl挂载到docker-gen容器中。您可以使用以下命令获取最新的官方 nginx.tmpl:
雷雷2) 将 NGINX_DOCKER_GEN_CONTAINER
环境变量设置为 docker-gen 容器的名称或 id。
示例:
首先使用卷启动 nginx(官方镜像):
第二次启动带有共享卷和模板文件的 docker-gen 容器:
然后启动这个容器(NGINX_DOCKER_GEN_CONTAINER变量必须包含docker-gen容器名称或id):
然后按照前面的描述启动要代理的任何容器。
如果由于某种原因你无法使用 docker --volumes-from 选项,你可以使用 NGINX_PROXY_CONTAINER
变量指定 nginx 容器的名称或 id。
使用 Let's Encrypt 服务自动为虚拟主机创建有效的证书。
设置以下环境变量以启用对被代理的容器的 Let's Encrypt 支持。这个环境变量需要在每个要代理的应用程序容器中声明。
LETSENCRYPT_HOST
LETSENCRYPT_EMAIL
LETSENCRYPT_HOST
variable most likely needs to be the same as the VIRTUAL_HOST
变量很可能需要与VIRTUAL_HOST
变量相同,并且必须是可公开访问的域。使用逗号分隔符指定多个主机。
以下环境变量是可选的,它们参数化 Let's Encrypt 客户端的工作方式。
LETSENCRYPT_KEYSIZE
变量LETSENCRYPT_KEYSIZE
决定请求密钥的大小(以位为单位,默认为4096)。
如果您想创建多域(SAN)证书,请将基本域添加为LETSENCRYPT_HOST
环境变量的第一个域。
如果您想创建没有 5 个证书/周/域限制的测试证书,请定义 LETSENCRYPT_TEST
environment variable with a value of true
(在使用 LETSENCRYPT_HOST 请求证书的容器中)。如果您想对所有容器全局执行此操作,请按如下所述设置 ACME_CA_URI。
每小时(3600 秒)检查一次证书,并更新将在接下来的 30 天(90 天/3)内到期的每个证书。
可选的letsencrypt-nginx-proxy-companion容器环境变量用于自定义配置。
ACME_CA_URI
- Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory
). If you set it's value to https://acme-staging.api.letsencrypt.org/directory
Letsencrypt 将使用没有 5 个证书/周/域限制的测试服务器。您还可以为每个容器创建测试证书(请参阅让我们加密测试证书)
例如
雷雷DEBUG
- Set it to true
启用入口点脚本的调试和 LetsEncrypt 证书的生成,这可以帮助您查明任何配置问题。
“com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true”标签 - 在 nginx-proxy 容器上设置此标签,告诉 docker-letsencrypt-nginx-proxy-companion 容器将其用作代理。
ACME_TOS_HASH
- 让您将替代 TOS 哈希传递给 simp_le,以支持其他 CA 的 ACME 实现。
如果您想了解如何使用此容器的其他示例,请查看:
Karl Fathi 的例子
Karl 的更多示例
乔治·伊耶斯的例子
Dmitry 的简单 docker-compose 示例
注意,这里有一个坑,也怪我自己没看清楚,如果镜像已经暴露端口就设置VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL就行,如果没有就得在设置好三个环境变量之后自己加入--expose 容器内应用服务端口参数启动。如果容器是discourse这样的,就得在app.yml内设置好环境变量之后把端口映射的80:80改为未占用端口:80,然后再保存重建启动。
大家讲道理2017-06-20 10:07:52
由于容器只能直接绑定宿主机的端口,例如我有10个web容器,那么这些容器都需要80或者443,这样-p参数不可行,所以要么是通过一个容器作为网关反向代理容器,用nginx,nginx容器进行-p,其他得php-fpm,node这样得web容器,通过nginx做反向代理来进行访问,证书也直接交给nginx服务器,进行443转发就可以实现了。
其实这些都是基础只是和docker没关系
这篇文章是一个lnmp环境,
/a/11...
如果是多个php-fpm或者node或者python后端服务的话,那么nginx应该是下面这样得
server{
listen 80;
server_name web1;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web2;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web3;
location /{
proxy_pass ....
}
}