我可以在同一台计算机上运行两个Web服务器吗?

时间:2010-02-23 16:10:40

标签: python apache webserver conflict

我刚刚发现我可以使用Python编写一个真正的simple web server。我已经有一个Apache Web服务器,我想在这台机器上尝试基于Python的Web服务器。但是如果我尝试的话,我担心会遇到某种冲突。我的意思是两个Web服务器将如何“决定”谁需要服务来自客户端的请求?

7 个答案:

答案 0 :(得分:28)

让他们听不同的端口,你会没事的。

默认Web端口为80.当您在浏览器中打开某个URL而未指定端口时,默认情况下使用80.

您可以将Web服务器配置为侦听其他端口,但您还需要在URL中明确指定它:

http://localhost:8080

选择端口时请注意,您已在盒子上安装并运行的任何软件尚未使用此特定端口号。否则,正如您所猜测的那样,会发生冲突。

P.S。就在几天前做重新安装我让IIS无法启动(看似没有理由)。原来Skype的新版本占用了这个默认端口!不得不删除其设置“使用端口80和443作为传入连接的替代方案”。

答案 1 :(得分:9)

如果您确实想要运行单独的服务器来测试服务器软件,请参阅其他答案,但是......

听起来好像(因为你是开发人员,而不是系统管理员吗?)你真的只想在同一台计算机上运行Python和PHP站点。所以,请原谅我,如果我正在阅读您的问题,但这个设置允许我在同一台计算机上使用相同的端口(端口80)在Apache中运行两种类型的站点。

我在/ etc / hosts文件(或Windows上的C:\ Windows \ System32 \ drivers \ etc \ hosts)中创建了新条目,并将它们指向127.0.0.1:

127.0.0.1      localhost

# development projects
127.0.0.1      somephpsite.com.local
127.0.0.1      www.somephpsite.com.local
127.0.0.1      otherpythonsite.com.local
127.0.0.1      www.otherpythonsite.com.local

然后在Apache中我为每个站点添加VirtualHosts:

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    <Directory "/Users/Robert/Projects/SomeSite/somephpsite.com">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    DocumentRoot "/Users/Robert/Projects/SomeSite/somephpsite.com"
    ServerName somephpsite.com.local
    ServerAlias www.somephpsite.com.local
    ErrorLog "/Users/Robert/Projects/SomeSite/error.log"
    CustomLog "/Users/Robert/Projects/SomeSite/access.log" common
</VirtualHost>

<VirtualHost *:80>
    <Directory "/Users/Robert/Projects/OtherSite/otherpythonsite.com">
        Order allow,deny
        Allow from all
    </Directory>
    DocumentRoot "/Users/Robert/Projects/OtherSite/otherpythonsite.com/static"
    Alias /(.*(\.css|\.gif|\.ico|\.jpg|\.js|\.pdf|\.txt)) /Users/Robert/Projects/OtherSite/otherpythonsite.com/static/$1
    WSGIScriptAlias / /Users/Robert/Projects/OtherSite/otherpythonsite.com/wsgi.py
    ServerName otherpythonsite.com.local
    ServerAlias www.otherpythonsite.com.local
    ErrorLog "/Users/Robert/Projects/OtherSite/error.log"
    CustomLog "/Users/Robert/Projects/OtherSite/access.log" common
</VirtualHost>

因此,PHP网站就像他们一样在DocumentRoot中运行。 Python站点在WSGI中运行。他们都在Apache中运行。然后进行测试,我只需在我用于本地副本的任何浏览器中添加“.local”。

答案 2 :(得分:8)

Web服务器绑定到特定端口。通常,这是端口80.如果未明确指定端口,则这是浏览器将尝试命中的端口。

您可以让您的备用服务器在不同的端口上运行(8080或8081似乎是Web服务器的流行服务器,但您可以选择它)。

这将阻止冲突的发生。 80端口的所有内容都会打到旧服务器。 8080(或你决定运行服务器的任何端口)的所有内容都将打到你的简单python服务器。

要点击其他服务器,请使用以下网址: -

http://localhost:8080/

答案 3 :(得分:1)

您无法在同一端口(默认为80)中打开两个Web服务器,如果您希望制作两个或更多Web服务器,则必须使用不同的端口。

如果您使用的是DNS,则可以轻松设置您的网络服务器,以便针对不同的请求响应不同的网站,如果您需要为子域或不同的域提供不同的网站,这可能很有用。

答案 4 :(得分:1)

网络服务器无法说明谁为连接请求提供服务(此任务仍处于操作系统级别)。此外,如果没有特殊的套接字选项,套接字必须绑定到接口,Internet地址和端口的唯一组合。

答案 5 :(得分:1)

我建议您将一台服务器专用于服务https(端口443)请求。

这样你就可以避免其他人提到的端口冲突,同时也不要求用户在他们的浏览器中键入任何奇怪的东西(任意端口号)。您甚至可以让每个服务器将流量重定向到另一个服务器(例如,http服务器接收一个http请求,知道它知道https服务器处理的主机名,因此它可以将请求重定向到具有相同主机名的https,从而将请求转移到适当的服务器)。

服务器A:

http://localhost

服务器B:

https://localhost

答案 6 :(得分:0)

是的,您可以通过两种方法在同一台计算机上运行两个不同的服务器(当然,还有另一种方法可以在具有不同端口号的同一IP上运行)

  1. 您可以运行两台服务器,一台在本地主机上,另一台在您的IP地址上。为此分享您的节点代码

服务器1:

app.listen(PORT, "localhost", () => {
  console.log("Server is running on ${PORT} in ${process.env.NODE_ENV}");
});

服务器2:

app.listen(PORT, "youy computer ip", () => {
  console.log(server is running on ${PORT} in ${process.env.NODE_ENV});
});

  1. 您可以通过不同的端口号或同一端口(本地主机范围127.0.0.0-127.255.255.255)上的两个不同的本地主机在同一本地主机上运行两个不同的服务器