我正在尝试在 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 支持重新构建问题。