让 Nginx 为两个网站提供服务(映射到两个外部 IP 地址)

让 Nginx 为两个网站提供服务(映射到两个外部 IP 地址)

我正在尝试在 VPS 上设置 Nginx(在 Docker 中)。VPS 有两个外部 IP 地址,我有两个域。

  • 域 1-212.xx149
  • 域2-89.xx60

我似乎无法弄清楚如何编写一个适合这种情况的配置文件。

server {
  listen localhost:80;
  server_name domain1;
  location / {
    proxy_pass http://...:8080;
  }

server {
  listen localhost:80;
  server_name domain2;
  location / {
    proxy_pass http://...:3000;
  }

不起作用,因为它抱怨在本地主机上重复监听。

server {
  listen 212.x.x.149:80;
  server_name domain1;
  location / {
    proxy_pass http://...:8080;
  }

server {
  listen 89.x.x.60:80;
  server_name domain2;
  location / {
    proxy_pass http://...:3000;
  }

不起作用,因为它说无法绑定到 212.xx149。

两个地址均在 /etc/hosts 中设置。

任何指导将不胜感激。

问候,

安迪

编辑:请注意,我曾尝试将“net.ipv4.ip_nonlocal_bind = 1”添加到我的 /etc/sysctl.conf,但没有帮助。

根据要求,这是来自 ip a 的输出(我对网络的了解足以知道要清空一些东西,但还不足以知道哪些需要清空,哪些不需要,所以如果我在这里有点过分,请原谅): 知识产权

监听两个不同的 IP 地址时出现错误:

2021/02/08 01:55:35 [emerg] 1#1: bind() to 212.x.x.149:80 failed (99: Cannot assign requested address)

nginx: [emerg] bind() to 212.x.x.149:80 failed (99: Cannot assign requested address)

如果我切换顺序,它只会告诉我相同的内容,除了引用 IP 89.xx60。

答案1

使用 nginx 您可以指定多个监听部分,而无需指定 IP 地址:

server {
  listen 80;
  server_name domain1;
}

server {
  listen 80;
  server_name domain2;
}

然后 nginx 会仅根据目标主机名(又名 server_name)将流量路由到上层或下层服务器部分。

答案2

我认为这与 Docker 的关系比与 Nginx 的关系更大。所以不需要跟进。如果我找到答案,我会发布答案,否则我会围绕 Docker 支持重新构建问题。

相关内容