nginx - 如何使用 dokku 将子域代理到其他服务器?

标签 nginx reverse-proxy dokku

我希望我的 dokku 主机为我的域运行主要的 nginx(比如说 cooldok.ku)。

出于某些原因,在 coldok.ku 上我有其他虚拟机提供内容。我想在子域上公开此内容(比如 vm.cooldok.ku,在 coldok.ku 主机上的 10.0.0.7 VM 中运行)。

我认为涉及的方法称为反向代理。

在最佳世界中,将有一种仅限 dokku 的方式来注册和“链接”/代理子域。作为一个额外的好处,cooldok.ku 主机会为 https 本身做 ssl-stuff(比如 ssltunnel),这样我就可以利用现有的证书和/或在同一台机器上使用很棒的 letsencrypt 并确保安全VM 中不打算通过 https 提供服务的应用程序。

这个场景怎么用dokku来实现呢?编写一个这样做的插件有多难?

更新

所以,基本上 dokku (0.8) 配备了它需要的一切。问题是,dokku 想要实现的目标(启动那些美味的 docker 容器)中有多少阻碍了。要破解一个可以满足我要求的设置,可以执行以下操作:

# create folder where we want it
dokku apps:create vm

现在,必须创建/存在这些文件(vanilla 0.8 dokku 安装)

#/home/dokku/vm/DOCKER_OPTIONS_DEPLOY
--restart=on-failure:10

#/home/dokku/vm/IP.web.1 
10.0.0.7

#/home/dokku/vm/PORT.web.1 
80

#/home/dokku/vm/URLS 
# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN - I did it nonetheless
http://vm.cooldok.ku

#/home/dokku/vm/VHOST 
vm.cookdok.ku

#/home/dokku/vm/nginx.conf
# Just listing changes from another default app
[...]
proxy_pass  http://vm-host;
[...]
upstream vm-host {

  server 10.0.0.7:80;
}

之后,nginx 需要手动重启(或者... dokku 可以在这里为我们做点什么)

我很确定可以省略一些(冗余)信息,例如 dokku 应该会混淆 nginx.conf 本身。我不确定这个设置是否在重启/nginx 重启后仍然存在。此外,在测试中,letsencrypt 不允许我安装证书/重建 nginx 配置,因为它认为应用程序 vm 未部署。

更新2

要克服“应用未部署”的问题,touch/home/dokku/vm/CONTAINER 就足够了,但这会变得越来越乱......

最佳答案

我将帖子更新中的信息捆绑到 https://github.com/econya/scripts/blob/master/scripts/virt-helpers/fake-dokku-app.sh 的脏脚本中.

我想最干净的向上兼容的解决方案是创建一个 Dockerfile,它自己启动一个反向代理(通过 env/config:set 变量配置)——但我很高兴学习一个更聪明、更好的解决方案,或者我得到报酬写一个合适的插件 ;)

第二种方法是使用“Null”-Docker 图像和我猜的自定义 nginx 模板。

2021 年更新 根据发行说明,它现在可以使用(查找“路由到非 Dokku 管理的应用程序”):

https://dokku.github.io/release/dokku-0.25.0

不过,我仍然使用旧的 dokku 和上面写的解决方案。

关于nginx - 如何使用 dokku 将子域代理到其他服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529271/

相关文章:

express - 将nginx与expressJS结合使用时,我应该在express还是nginx中使用压缩?

php - 异常 : include(): realpath failed to canonicalize Service/Response. php - 保释

ssl - 定义自定义负载均衡算法

heroku - 自定义buildpack中的权限被拒绝

sqlite - 带有 SQLite 的 Dokku?

java - Spring Security 无法使用 Nginx 服务器创建 SESSION

css - 样式表在 docker 中从 nginx 提供,在页面上不可用

ajax - Lighttpd 反向代理设置

apache - CentOS 7 nginx httpd 禁止/var/www

node.js - Docker 和 Nginx 解析错误的 IP 地址