NGINX:使用反向代理将 URL 重定向到自定义端口

NGINX:使用反向代理将 URL 重定向到自定义端口

我正在通过 SSH 将一些远程摄像头隧道传输到 VPS。我希望能够通过 URL 传递端口号,然后 nginx 将其代理到 localhost:'该端口'。

大致如下:

http://test.doman.com/1234/ -> localhost:1234/something/

我发现一个非常相似的问题,但我无法理解它并根据我的需要进行修改。

NGINX 动态端口 proxy_pass

更新:

我尝试以多种方式修改示例(下面是一种更有意义的示例)但每次我尝试 curl 时,我都会得到第 500 页而不是所需的端口。

server {
    listen          80;
    server_name     my.domain.com;

    location ~ ^/cam/([0-9]+)$ {
        set         $port   $1;
        proxy_pass  http://localhost:$port/cgi-bin/mjpg/video.cgi?channel=1&subtype=1;
    }
}

更新2

显然我的规则配置是正确的(重写整个 nginx.conf 以确保万无一失),但我仍然收到 502 Bad Gateway 消息。我可以从外部服务器 curl localhost:8080,它到达我的相机页面,但我无法使用 nginx 重定向它。

http {
    server {
        listen 80;
        root /var/www/;
        location ~ ^/cam/([0-9]+) {
            set $port_num $1;
            # Debug my variable
            #return 200 $port_num;
            proxy_pass http://localhost:$port_num;
        }
    }
}
events { }

更新 3

我确实查看了日志文件(感谢您的建议),并注意到 NGINX 无法解析本地主机(???)。

2020/10/07 13:53:39 [error] 1997#1997: *4 no resolver defined to resolve localhost, client: 127.0.0.1, server: , request: "GET /cam/8080 HTTP/1.1", host: "localhost"

我将 localhost 字符串替换为 127.0.0.1,然后重试。这次我从 curl 收到 404 消息,但日志中没有错误。

<html><body><h1>404 Not Found</h1></body></html>

答案1

好吧。我希望这个例子对某些人有帮助。

location ~ ^/cam/([0-9]+)/ {
            set $port_num $1;
            proxy_pass http://localhost:$port_num/;
        }

如果您对那里发生的事情感到困惑(就像我之前读文档时一样),该位置使用正则表达式来查找以 /cam/ 开头的任何内容(在 URL 之后)并获取其后的内容(告诉([0-9]+)nginx 仅获取其数字,字符串将转到 404)。允许set创建一个变量(只是为了使事情更清楚)并且 proxy_pass 重定向 URL。

相关内容