nginx:子域,映射到具有多个端口的第二台主机

nginx: subdomains, map to 2nd host with multiple ports

我一直在寻找一个 nginx 反向代理配置,它可以:

在 host2 上(IP 地址为 192.168.1.33),我有 docker 运行 几个 node-red 实例,每个容器指向 host2 上的不同端口: - sd01.mydomain.com to point to 192.168.1.33:1101 - sd02.mydomain.com to point to 192.168.1.33:1102 - sd03.mydomain.com to point to 192.168.1.33:1103

我在网上看到了很多这样做的选择,从使用 map $subdomain $subdomain_port { 给其他人,但我无法让它工作。有人能给我指出正确的方向吗?

是的,我在 godaddy 上添加了通配符 * 指令,以便子域指向我路由器的固定 ip。

为此,您应该在位置指令中使用与 proxy_pass 关联的上游指令。

upstream sd01 {
    server 192.168.1.33:1101;
}

upstream sd02 {
    server 192.168.1.33:1102;
}

upstream sd03 {
    server 192.168.1.33:1103;
}

server {
    listen 80;
    listen [::]:80;
    root /var/www;
    server_name sd01.mydomain.com;

    location / {
        proxy_pass http://sd01/;
    }
}
server {
    listen 80;
    listen [::]:80;
    root /var/www;
    server_name sd02.mydomain.com;

    location / {
        proxy_pass http://sd02/;
    }
}
server {
    listen 80;
    listen [::]:80;
    root /var/www;
    server_name sd03.mydomain.com;

    location / {
        proxy_pass http://sd03/;
    }
}

请注意,如果您使用的是套接字,则需要升级该路径的连接:

location /socket/ {
   proxy_pass http://socketserverupstream;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_http_version 1.1;
}

这是我用于所有服务器的类似配置。但是,您可以参考 NGINX documentation.

在您的 nginx 配置文件 (nginx.conf) 中进行以下更改:

server
{
    listen 80;
    server_name  sd01;

    location / {
        proxy_pass http://127.0.0.1:1101;
    }
}

server
{
    listen 80;
    server_name  sd02;

    location / {
        proxy_pass http://127.0.0.1:1102;
    }
}