我在我的 VPS 服务器上使用 cPanel Apache 2 在端口 80 上托管 PHP/MySQL 网站。
假设我们有 myphp.com,它可以正常工作。
现在我安装了 Ruby / Rails / Passenger 和 nginx(也是 Ruby Entreprise Edition),它们在端口 3000 上运行良好。假设我有一个新的 Ruby on Rails 应用程序,并且想将其托管在 myruby.com 上,而不是 myruby.com:3000。
我该如何实现这一点?
我在 nginx 中配置域如下:
server {
listen 3000;
server_name www.myruby.com;
root /home/myruby/public;
passenger_enabled on;
}
如果我将端口更改为 80,则它不起作用(显然与 Apache 冲突)。请注意,我没有将 myruby.com 域添加到 cPanel。
我有 2 个专用 IP 地址。我听说使用 2 个 IP 可以解决这个问题。但是如何指示 cPanel 的 Apache 仅监听特定 IP?此外,如果我将域指向我的服务器,如何指示 RoR 域指向 RoR IP?
答案1
供将来尝试使用 nginx 运行 cPanel Apache 和 Ruby on Rails 的人参考。
1)像这样配置nginx:
server {
listen yourrubydomain.com:8001;
server_name yourrubydomain.com;
root /home/yourrubydomain/public;
}
1) 只需在 cPanel 中添加附加域 2) 登录 FTP,导航到新添加域的 WWW 目录 3) 创建一个包含以下内容的 .htaccess 文件:
重写规则 ^ “http://127.0.0.1:8001%{REQUEST_URI}” [P,QSA,L]
4) 就是这样! 5) 在您的第二个 Ruby on Rails 域中,不要忘记尝试与第一个不同的端口。例如,在 mysecondrubydomain.com 上使用端口 8002,而不是 8001,无论是在 nginx 还是 .htaccess 配置中。
答案2
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
好了,现在来了解 mod_proxy 和 ProxyPass。
答案3
您可以在 httpd.conf 文件中告诉 Apache 只监听某些 IP。默认值可能是
Listen 80
将其更改为
Listen XXX:80
其中 XXX 是您希望 apache 监听的第一个 IP。
然后你可以设置 nginx 来监听另一个 IP
listen YYY:80
或者,您可以配置 Apache 使用 mod_proxy 进行反向代理,以便某些域将转发到 localhost:3000 并使用 nginx 服务器。但我认为上述解决方案更好,因为它增加了系统的复杂性。
请注意,您可能会在更改时与 cPanel 发生冲突,因为它会在升级或您对域名进行更改时重写该文件。