一个 IP 上有两个网站

一个 IP 上有两个网站

假设有人让我使用他们的服务器来托管我的网站,但该 IP 上的 80 端口上已经托管了另一个网站。我如何将运行在不同端口上的网站指向我的域名?我尝试在 nginx 上使用反向代理,但它仍然只显示 80 端口上的网站,而不是另一个端口上的我的网站。

答案1

如果你快速看一下服务器块示例,您可能会注意到第一个例子展示了 NGINX 如何服务两个不同的域名。

http {
  index index.html;

  server {
    server_name www.domain1.com;
    access_log logs/domain1.access.log main;

    root /var/www/domain1.com/htdocs;
  }

  server {
    server_name www.domain2.com;
    access_log  logs/domain2.access.log main;

    root /var/www/domain2.com/htdocs;
  }
}

通常,这些服务器块被分离到 NGINX 配置为扫描的目录中的自己的文件中(即/etc/nginx/conf.d//etc/nginx/sites-enabled/)。

通过加载两个有效的服务器块(每个服务器块具有不同的功能)server_name将导致 NGINX 为两个(或更多)域提供服务。

我总是检查陷阱和常见错误在创建配置时也是如此。

答案2

如果没有更多关于您所谈论的网站类型的信息(静态 HTML 网站、NodeJS / PHP / Python / Ruby / YouNameIt 支持的网站 / Web 应用程序),则很难正确指导您。

但假设你谈论的是静态 HTML 网站,有一个概念叫做虚拟主机,这意味着同一个 WebServer(如 Apache 或 Nginx)可以在同一个端口上托管多个域。

因此,如果您使用的是 Apache,则可以创建两个站点/虚拟主机,每个网站一个。它们将拥有自己的配置作为 Apache 配置的一部分(通常在 内),并且可以存储在服务器中的不同目录中。当请求到达时,Apache 将根据浏览器自动发送的标头(其中包含域)/etc/apache2知道要为哪个网站提供服务。Host


另一方面,如果您需要托管两个不同的 Web 应用程序,比如在端口 80 上运行的 NodeJS(这很奇怪,因为您通常希望在高端口(如 3000、8000、8080、9000)中运行它们,所以它不必以 身份运行root)和 Rails 应用程序,并且您希望两者都可以通过端口 80 访问(因此最终用户在浏览您的网站时不必使用特定端口),那么,您必须将 NodeJS 应用程序更改为监听其他端口。

然后,添加一个像您提到的反向代理(我通常更喜欢 Nginx 或 Traefik,您也可以尝试 Caddy)来监听端口 80。如果您使用 Traefik 或 Caddy 并且也公开端口 443,您将获得使用 Let's Encrypt 自动 SSL 证书的额外好处,因此您的网站将通过安全通道。

然后,这个反向代理将根据您配置的规则(例如标Host头)将请求转发到您选择的任何目的地(静态文件、其他端口(例如 NodeJS 正在监听的端口等)。

希望这可以帮助

相关内容