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

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

问题描述:

我刚刚发现我可以用Python编写一个真正的simple web server。我已经有了一个Apache Web服务器,我想在这台机器上尝试基于Python的Web服务器。但是如果我尝试一下,我恐怕会遇到某种冲突。我的意思是两个Web服务器如何“决定”谁需要从客户端请求服务器?我可以在同一台计算机上运行两台Web服务器吗?

+0

FWIW,Python有一个内置的web服务器模块(SimpleHTTPServer)。它的默认端口是8000.您可以使用以下命令在命令行中运行它:python -m SimpleHTTPServer – ianalis 2010-02-23 17:00:53

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

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

你可以配置你的Web服务器监听到一个不同的端口,但那么你也将需要在URL中明确指定:

http://localhost:8080 

当选择一个端口注意,这个特殊的端口号是不是尚未被您安装并运行在您的盒子上的任何软件使用。否则,正如你猜对的那样,会有冲突。

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

+0

OK。 Web浏览器是否有默认端口?当我尝试打开特定Web服务器上的网页时,可以指定端口吗? – Roman 2010-02-23 16:16:20

+0

默认的HTTP端口是80.您可以在URL中指定端口,例如:http:// yourserver:portnumber。 – 2010-02-23 16:21:04

+0

HTTPS的HTTP 443的默认值为80。您可以指定一个不同的: – Ofir 2010-02-23 16:21:10

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

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

+1

HTTP/1.1为赢得 – 2010-02-23 16:18:01

+0

确实,冰雹主机头! – Dal 2010-02-23 16:47:33

Web服务器绑定到特定端口。通常情况下,这是端口80.如果没有明确指定端口,则这是浏览器尝试点击的端口。

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

这将停止发生冲突。所有到端口80的东西都会击中你的旧服务器。一切到8080(或任何您决定运行您的服务器的端口)将打击您的简单的Python服务器。

打你的其他服务器,使用URL,如: -

http://localhost:8080/

的Web服务器会在谁服务的连接请求没有发言权(这个任务仍然是在操作系统级别)。此外,没有特殊的套接字选项,套接字必须绑定到接口,互联网地址和端口的唯一组合。

我建议你专用一台服务器来提供https(端口443)请求。

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

服务器A:

http://localhost 

服务器B:

https://localhost 

如果你真的想运行单独的服务器来测试服务器软件看到其他的答案,但...

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

我使我的/ etc新条目/ hosts文件(或C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ Windows上等\主机),并将其指向127.0.0.1:在Apache中

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 

然后我想补充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

+1,并没有回答这个问题,但仍然有用且相关。 – AlexMA 2012-05-05 21:07:12

+3

正是我需要的!为什么有人想让用户键入一个端口号? – 2014-02-05 19:42:03

+0

以防万一有人需要两台不同的网络服务器。例如一个node.js应用程序和一个php应用程序,都是公共的。如果这两个服务器在同一台服务器上,其中一台必须监听不同的端口。 – Akis 2015-05-28 06:19:19