我想在刚购买的一个 VPS 上托管五个网站。
- 名为 domain.com 的 PHP 站点
- 一个名为 beta.domain.com 的 django 站点
- phpmyadmin 将是 domain.com/phpmyadmin
- phppgadmin,即 beta.domain.com/phppgadmin
- 另一个名为 domain2.com 的 django 站点
所有 django 站点都将使用 apache 中的 mod_wsgi 运行,所有 PHP 站点都将使用 fastcgi 在 nginx 中运行。
我是一名开发人员,而不是系统管理员,因此我很难找到实现此目的的最佳方法。我从 nginx 运行 PHP 的原因是我不想安装 mod_php,这允许我在 apache 中使用 worker MPM。
目前,我的 nginx 在端口 8080 上运行,apache 在端口 80 上运行。当我访问 domain.com 时,它会打开 django 网站。当我访问 domain.com:8080 时,它会打开 PHP 网站。
就像我之前说的,我不是服务器人员,所以这些东西让我头晕目眩。有没有办法从 nginx 访问内容而不在 URL 中指定端口号?
答案1
基本上,当您输入“domain.com”时,Web 浏览器实际上会转到“domain.com:80”(端口 80 是默认的 HTTP 端口)。
您只能为计算机上的每个端口分配一个应用程序,因此只有一个应用程序可以监听默认 HTTP 端口 (80),而另一个应用程序必须使用另一个端口。
有三种方法可以解决这个问题:
1) 正确的方法是使用 nginx 作为主 Web 服务器(即监听默认的 http 端口 80),将 Apache 设置为监听另一个端口(例如 8080),然后设置“反向代理”(谷歌是您的好朋友)。这是理想的设置。配置起来需要多花点功夫,但有数百个指南确实很有用。
2)使用 nginx 为 django 网站提供服务(如果可能的话?)
3) 一种快速简便的方法(尽管不推荐),假设 PHP 网站仅供网站管理员使用,而 django 网站不需要 https,您可以将 PHP 网站设置为通过 HTTPS 运行。这样,您就可以让 Apache 在端口 80(默认 HTTP)上运行,让 nginx 在端口 443(默认 HTTPS)上运行。只需将“http://”替换为“https://”,您就可以进入端口 443。
答案2
在我看来,没有必要在两个 Web 服务器上运行 Web 应用程序。
由于我找不到一个好的和可靠的独立fastcgi 进程管理器,我将在 Apache 上运行 Django 和 PHP 应用程序,使用mod_wsgi对于 Django 和mod_fcgid对于 PHP 应用程序。我唯一可能考虑在单独的 Web 服务上运行的是静态文件。nginx 和 lighttpd 都擅长提供静态文件。我所说的“静态文件”不仅指图像、样式表或 javascript,还包括由您的 Web 应用程序作为缓存机制的一部分生成的静态 HTML 页面。
至于 mod_php,这将不需要,因为你将使用 mod_fcgid 在 fastcgi 模式下运行 PHP。这还将让你使用工人MPM(线程)。
我希望这能给你一些指点。
答案3
最好使用 apache 作为后端,并在端口 80 处使用 nginx 代理。Nginx 可以缓存页面,并将特定主机转发到 apache 端口 8080。
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
答案4
将它们放在不同的端口或 IP 上。如果只是用于本地开发,则让一个服务器监听 127.0.0.2 而不是 127.0.0.1。
对于公共服务,我建议只使用 fastcgi(如果使用 apache,则使用 fcgid)进行所有操作。真的没有必要使用所有这些像 wsgi 这样的替代品;fastcgi 很棒,而且更灵活(例如,你可以同时运行 python2.5 和 python3.1 以及 ruby)。