【问题标题】:Can I run two web servers on the same computer?我可以在同一台计算机上运行两个 Web 服务器吗?
【发布时间】:2011-01-20 03:41:03
【问题描述】:

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

【问题讨论】:

  • FWIW,Python 有一个内置的 Web 服务器模块(SimpleHTTPServer)。它的默认端口是 8000。您可以在命令行中使用以下命令运行它:python -m SimpleHTTPServer

标签: python apache webserver conflict


【解决方案1】:

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

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

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

http://localhost:8080

在选择端口时,请注意此特定端口号尚未被您在机器上安装和运行的任何软件使用。否则,正如你猜对的,会有冲突。

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

【讨论】:

  • 好的。网络浏览器是否有默认端口?当我尝试在特定 Web 服务器上打开网页时,我可以指定端口吗?
  • 默认的 HTTP 端口是 80。您可以在 URL 中指定端口,如下所示:http://yourserver:portnumber
  • HTTP 的默认值为 80,HTTPS 的默认值为 443。你可以指定一个不同的使用:
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    http://localhost:8080/

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        服务器 A:

        http://localhost
        

        服务器 B:

        https://localhost
        

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • +1,不回答问题,但仍然有用且相关。
          • 正是我需要的!为什么会有人想让用户输入端口号?
          • 以防万一有人需要两个不同的 Web 服务器。例如一个 node.js 应用程序和一个 php 应用程序,都是公开的。如果这两个在同一服务器上,则其中之一必须侦听不同的端口。
          • 它没有回答这个问题。如果我想使用两个不同的 Web 服务器,比如 NGINX 和 python,那就无济于事了。
          【解决方案7】:

          是的,你可以通过两种方法在同一台计算机上运行两台不同的服务器(当然还有另一种方法是在同一个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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-08
            • 1970-01-01
            • 1970-01-01
            • 2015-11-23
            • 1970-01-01
            • 1970-01-01
            • 2017-04-05
            • 1970-01-01
            相关资源
            最近更新 更多