我刚刚发现我可以使用 Python编写一个非常简单的 Web 服务器。我已经有一个 Apache Web 服务器,我想在这台机器上尝试基于 Python 的 Web 服务器。但是我担心如果我尝试一下,我会遇到某种冲突。我的意思是两个 Web 服务器将如何“决定”谁需要处理来自客户端的请求?
7 回答
让他们听不同的端口,你会没事的。
默认的web端口是80。当你在浏览器中打开一些url而不指定端口时,默认使用80。
您可以将 Web 服务器配置为侦听不同的端口,但您还需要在 url 中明确指定它:
http://localhost:8080
选择端口时,请注意此特定端口号尚未被您在盒子上安装和运行的任何软件使用。否则,正如您正确猜测的那样,将会发生冲突。
PS就在几天前重新安装时,我让IIS无法启动(似乎没有理由)。原来新版Skype占用了这个默认端口!不得不删除其设置“使用端口 80 和 443 作为传入连接的替代方案”。
如果您真的想运行单独的服务器来测试服务器软件,请参阅其他答案,但是......
听起来(因为您是开发人员,而不是系统管理员,对吗?)您真的只想在同一台计算机上运行 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”。
Web 服务器绑定到特定端口。通常,这是端口 80。如果未明确指定端口,则这是浏览器将尝试访问的端口。
您可以让您的备用服务器在不同的端口上运行(8080 或 8081 似乎是 Web 服务器的流行替代,但您可以选择)。
这将阻止冲突的发生。去端口 80 的所有东西都会命中你的旧服务器。一切到 8080(或您决定在其上运行服务器的任何端口)都将访问您的简单 python 服务器。
要访问您的其他服务器,请使用如下 URL:-
您不能在同一个端口(默认为 80)中打开两个 Web 服务器,如果您想创建两个或多个 Web 服务器,则必须使用不同的端口。
如果您使用 DNS,您可以轻松设置您的 Web 服务器以使用不同的网站响应不同的请求,如果您需要为子域或不同的域设置不同的网站,这可能会很有用。
网络服务器对谁为连接请求提供服务没有发言权(此任务仍处于操作系统级别)。此外,如果没有特殊的套接字选项,套接字必须绑定到接口、互联网地址和端口的唯一组合。
我建议您将一台服务器专用于服务 https(端口 443)请求。
这样你就可以避免其他人提到的端口冲突,同时也不需要用户在他们的浏览器中输入任何奇怪的东西(任意端口号)。您甚至可以让每台服务器将流量重定向到另一台服务器(例如,http 服务器收到对它知道 https 服务器处理的主机名的 http 请求,因此它可以将请求重定向到具有相同主机名的 https,从而将请求转移到合适的服务器)。
服务器 A:
http://localhost
服务器 B:
https://localhost
是的,您可以通过两种方法在同一台计算机上运行两个不同的服务器(当然还有另一种方法可以在具有不同端口号的同一 IP 上运行)
- 您可以运行两台服务器,一台在本地主机上,另一台在您的 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
)