我正在使用亚马逊 ec2 实例操作系统:ubuntu 14.04
首先,我使用 odoo 服务器来设计我的网站。这是通过访问http://example.com:8069
然后我安装了 Vesta 面板并为我的域创建了邮件帐户,该域是 roundcube,可以通过以下方式访问http://example.com/webmail
在 odoo 上开发网站后,我在 rc.local 上添加了一条规则: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8069
访问我的主域名上的 odoo 网站,但从那时起,当我转到它发送到我的 odoo 404 页面的 url 时,我无法访问我的网络邮件。
我需要 odoo 和 webmail 想要工作任何帮助将不胜感激。
答案1
您的问题是 roundcube 绑定到端口 80。在您使用 iptables 将 oodo 的所有端口 80 流量重定向到 8069 之前,效果很好。这使得 oodo 流量正常工作,但原本用于 roundcube 的流量也会被 iptables 捕获并发送到 oodo(因此当您尝试访问 roundcube 时会出现 oodo 404 页面)。
与大多数 Linux 系统一样,有很多方法可以解决这个问题,但我建议设置一个反向代理来处理请求。代理可以在同一台服务器上运行,并处理进入端口 80 的请求。它会分析请求,并根据需要将其传递给 roundcube 或 oodo。
我可能会使用 Nginx 作为我的代理,并执行如下操作:
- 将 roundcube 绑定到端口 8000(或其他尚未使用的高端口。)这是因为我们需要为代理服务器释放端口 80
- 安装 Nginx 并将其配置为绑定到端口 80 的反向代理。有关其外观的一些信息如下:http://nginx.com/resources/admin-guide/reverse-proxy/
- 在 Nginx 配置中,我将有一个位置块来捕获 /webmail 的所有请求,并将它们代理传递到 localhost:8000 (我们的 roundcube 安装)。
- 所有其他请求均通过 proxy_passed 到 localhost:8069(oodo 安装)
您使用什么代理很容易取决于您更喜欢什么。我最有可能使用 Nginx,但 Squid、Apache 或许多其他工具也可以工作。我不知道 roundcube 默认使用什么作为网络服务器,但您也许可以使用它来代理 oodo 请求,而无需安装其他任何东西。
我希望这至少能让你朝着正确的方向前进。