23

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

4

7 回答 7

36

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

默认的web端口是80。当你在浏览器中打开一些url而不指定端口时,默认使用80。

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

http://localhost:8080

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

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

于 2010-02-23T16:11:15.190 回答
11

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

听起来(因为您是开发人员,而不是系统管理员,对吗?)您真的只想在同一台计算机上运行 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”。

于 2010-04-29T06:54:18.790 回答
8

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

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

这将阻止冲突的发生。去端口 80 的所有东西都会命中你的旧服务器。一切到 8080(或您决定在其上运行服务器的任何端口)都将访问您的简单 python 服务器。

要访问您的其他服务器,请使用如下 URL:-

http://localhost:8080/

于 2010-02-23T16:14:26.380 回答
2

您不能在同一个端口(默认为 80)中打开两个 Web 服务器,如果您想创建两个或多个 Web 服务器,则必须使用不同的端口。

如果您使用 DNS,您可以轻松设置您的 Web 服务器以使用不同的网站响应不同的请求,如果您需要为子域或不同的域设置不同的网站,这可能会很有用。

于 2010-02-23T16:13:24.743 回答
1

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

于 2010-02-23T16:17:15.647 回答
1

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

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

服务器 A:

http://localhost

服务器 B:

https://localhost
于 2010-02-23T16:20:37.340 回答
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
于 2020-12-16T08:14:22.757 回答