如何使两台Web服务器在一台机器上工作?


1

我想在一个刚购买的VPS上托管五个网站。

  1. 一个名为domain.com的PHP网站
  2. django网站beta.domain.com
  3. phpmyadmin,将是domain.com/phpmyadmin
  4. phppgadmin,将是beta.domain.com/phppgadmin
  5. 和另一个名为domain2.com的Django网站

所有的django网站将在Apache中以mod_wsgi运行,所有的PHP网站将在具有fastcgi的nginx中运行。

我是开发人员,而不是系统管理员,因此我很难确定实现此目的的最佳方法。我从nginx运行PHP的原因是因为我不想安装mod_php,这使我可以在apache中使用worker MPM。

目前,我有8080端口运行的nginx和80端口运行的apache。当我转到domain.com时,它会打开django网站。当我转到domain.com:8080时,它会打开PHP网站。

就像我之前说过的,我不是服务员,所以这些东西让我很头疼。有什么方法可以通过nginx访问内容而无需在URL中指定端口号?

Answers:


2

基本上,当您输入“ domain.com”时,Web浏览器实际上会转到“ domain.com:80”(端口80是默认的HTTP端口)。

您只能在计算机上的每个端口上分配一个应用程序,因此只有一个应用程序可以侦听默认的HTTP端口(80),而另一个则必须使用其他端口。

有三种解决方法:

1)正确的方法是将nginx用作您的主要Web服务器(即在默认的HTTP端口80上监听),将Apache设置为在另一个端口上进行监听(例如8080),然后设置“反向代理”(google是您的朋友) )。这是理想的设置。进行配置需要花费更多的精力,但实际上有数百本指南非常有用。

2)使用Nginx服务Django网站(如果可以的话)

3)一种快速简便的方法(尽管不建议这样做),假设PHP站点仅用于网站管理员,而django站点则不需要https,则可以将PHP站点设置为通过HTTPS运行。这样,您可以在端口80(默认HTTP)上运行Apache,而在端口443(默认HTTPS)上运行nginx。只需输入“ https://”而不是“ http://”,您将进入端口443。


2

IMO,无需在两个Web服务器上都运行Web应用程序。

由于我找不到一个好的且可靠的独立 fastcgi进程管理器,因此我将在Apache上运行Django和PHP应用程序,对于Django 使用mod_wsgi,对于PHP应用程序使用mod_fcgid。我可能会考虑在单独的Web服务上运行的唯一内容是静态文件。nginx和lighttpd都擅长提供静态文件。“静态文件”不仅指图像,样式表或javascript,还指由Web应用程序生成的作为缓存机制一部分的静态HTML页面。

关于mod_php,这将不是必需的,因为您将使用mod_fcgid在fastcgi模式下运行PHP。这也将允许您使用工作程序 MPM(线程)。

我希望这能给您一些指导。


1
我相信您需要php-cgi包装,而不是libapache2-mod-php包装。
奎克吉x德09年

1

您最好将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;
}

0

将它们放在不同的端口或IP上。如果仅用于本地开发,则让一台服务器侦听127.0.0.2而不是127.0.0.1。

对于公共服务,我建议仅对所有内容使用fastcgi(如果使用apache则为fcgid)。实际上,不需要像wsgi这样的所有替代产品。fastcgi很棒,而且更灵活(例如,您可以并排运行python2.5和python3.1和ruby)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.