nginx:子域,映射到具有多个端口的第二台主机
nginx: subdomains, map to 2nd host with multiple ports
我一直在寻找一个 nginx 反向代理配置,它可以:
在端口 80 上接收来自我的路由器的传入流量,来自 mydomain.com;
来自子域,例如 sd01、sd02、sd03。
即sd01.mydomain.com - 然后必须通过 nginx 反向代理 (host1),并将请求指向我路由器后面的 host2(所有 RPi),然后路由到此 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。
为此,您应该在位置指令中使用与 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;
}
}
我一直在寻找一个 nginx 反向代理配置,它可以:
在端口 80 上接收来自我的路由器的传入流量,来自 mydomain.com;
来自子域,例如 sd01、sd02、sd03。
即sd01.mydomain.com - 然后必须通过 nginx 反向代理 (host1),并将请求指向我路由器后面的 host2(所有 RPi),然后路由到此 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。
为此,您应该在位置指令中使用与 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;
}
}