ElJ*_*ste 13
默认情况下,浏览器发出 HTTP 请求时的端口为80。
如果你输入localhost
,真正的请求是localhost:80
因为没有指定端口。任何域名都一样。如果您键入example.com
,则真正的请求是example.com:80
。
是客户端(这里是浏览器)选择在哪个端口上向服务器发出请求。
您可以通过在域名后添加:port_number来强制浏览器在任何端口上发出请求,如localhost:3000
或example.com:3000
。这里我们将端口从80更改为3000。
Web 服务器选择在哪个端口上侦听请求。它可以是80、3000或任何其他端口。
如果客户端发出 HTTP 请求,您的 Web 服务器需要侦听正确的端口。如果客户端发出example.com:4000
,则您的 Web 服务器必须侦听端口4000以获取和处理请求。
你可以使用 Node.js、Apache(在 LAMP 中使用)、Nginx 等来制作 web 服务器。你可以在你的系统上运行多个 web 服务器,每个服务器都可以使用多个端口,但你不能让它们监听在同一个端口。您的其中一台 Web 服务器可能无法启动或可能领先于其他服务器或崩溃...
解决方案是仅使用一个 Web 服务器或在不同端口上使用多个 Web 服务器。在您的情况下,您使用的是 LAMP,因此 Apache Web 服务器。它可能在他的配置中运行在端口80上。在这种情况下,您无法在端口80上运行 Node Web 服务器,因为它已经在使用中。例如,您应该选择另一个端口,例如3000。然后 Node 和 Apache 都将在您的系统上运行,但分别运行在不同的端口3000和80 上。
在最后一种情况下,您可以直接访问 Apache,但不能在没有精确端口3000 的情况下访问 Node 。为了能够在不停止 Apache 的情况下通过端口80访问 Node Web 服务器,您需要通过 Apache 并使其在某些情况下将请求重定向到您的 Node 服务器。为此,您需要在 Apache 中配置一个代理。请注意,如果您使用的是 Nginx 或其他 Web 服务器,则情况相同。
让我们在端口 3000 上使用一个简单的快速服务器:
// server.js
var express = require('express'),
app = express(),
http = require('http').createServer(app),
port = 3000;
app.get('*', function (req, res, next) { res.sendFile(__dirname + '/views/index.html'); });
http.listen(port, function () { console.log('App running & listening on port ' + port); });
Run Code Online (Sandbox Code Playgroud)
如果在终端中输入 ,则node server.js
可以从浏览器访问 by localhost:3000
,但无法访问 by ,localhost
因为端口80上没有运行 Web 服务器。
如果将端口变量更改为 80,则可以通过localhost
或从浏览器访问localhost:80
,但不能再通过localhost:3000
。
如果您/etc/hosts
使用新行编辑(sudo nano /etc/hosts)127.0.0.1 example.com
,您可以通过浏览器访问example.com
if port is 80,否则example.com:port_number like example.com:3000
。第三个解决方案仅将域名映射到本地客户端中的 IP 地址。
如果所选端口(例如80)已被另一个进程(如 LAMP)使用,则您的节点服务器可能无法工作。在这种情况下,您应该先关闭这个其他进程或为您的节点进程选择另一个端口。在第三个例子中,如果你先关闭 LAMP,你可以通过example.com从浏览器访问,如果你为 Node 选择另一个端口,你可以像example.com:3000
Node一样通过 example.com:port_number 从浏览器访问并且仍然可以访问你的 LAMP 服务器在端口80 上。
如果未指定端口,请不要忘记80是浏览器使用的默认端口。如果您使用另一个端口,您应该通过在您的域后添加:port_number从浏览器精确它。
现在,如果您拥有一个真实的域名,您将需要制作一个真实的 DNS 映射,而不仅仅是编辑/etc/hosts
。在您的注册帐户(您购买域名的地方)上配置您的 DNS,使其指向您服务器的 IP。像这样,当客户端向域名发出 HTTP 请求时,它将被重定向到您的服务器。
要让 Apache 和 Node.js 在端口80上运行并可用,您应该创建一个代理,如上所述。实际上,对您而言,问题可能是您已经在端口80(带有 LAMP 的 Apache)上运行了一个 Web 服务器,并且您还希望您的 Node.js 应用程序在端口80上运行,以不强制客户端在网址的结尾。要解决这个问题,您需要在 Apache conf 中创建一个代理,以将来自特定域名的请求重定向到正确端口上的 localhost 节点服务器进程。
在你的 apache conf 中是这样的:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在这里,当请求通过端口80到达您的服务器时,Apache 将检查它是否来自example.com
,如果是,它将重定向到127.0.0.1:3000
您的节点服务器将带头的位置。两个不同的进程(Apache 和 Node)应该在不同端口的服务器上同时运行。
归档时间: |
|
查看次数: |
6322 次 |
最近记录: |