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

时间:2018-02-03 20:49:57

标签: nginx-reverse-proxy

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

  • 从端口80接收来自我的路由器的传入流量,来自mydomain.com;

  • 来自子域名的
  • ,例如sd01,sd02,sd03。

  • 即。 sd01.mydomain.com - 然后必须通过nginx反向代理(host1),并将请求指向我的路由器后面的host2(所有RPi' s),并路由到此host2上的其他端口。

在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。

2 个答案:

答案 0 :(得分:2)

在您的 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;
    }
}

答案 1 :(得分:1)

您应该在location指令中使用上游指令与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