我刚刚发现我可以使用Python编写一个真正的simple web server。我已经有一个Apache Web服务器,我想在这台机器上尝试基于Python的Web服务器。但是如果我尝试的话,我担心会遇到某种冲突。我的意思是两个Web服务器将如何“决定”谁需要服务来自客户端的请求?
答案 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服务器。
要点击其他服务器,请使用以下网址: -
答案 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:
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});
});
127.0.0.0
-127.255.255.255
)上的两个不同的本地主机在同一本地主机上运行两个不同的服务器