带摄像头的nginx reverse_proxy - 默认重写不起作用

时间:2013-09-09 03:27:40

标签: nginx reverse-proxy

我的防火墙后面有一台AXIS相机。

如果您使用相机的IP,则需要通过元刷新将您重定向到/view/index.shtml。

我试图通过网络服务器-IP /摄像头访问摄像头。我的nginx配置很简单 - 它看起来像这样:

    location /camera {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_pass http://192.168.0.205:80/;
            proxy_redirect default;
    }

然而这不起作用 - 重定向不会发生。当我访问webserver-IP / camera时,它会将我重定向到webserver-IP / view而不是webserver-IP / camera / view。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试用此行替换proxy_redirect

proxy_redirect http://192.168.0.205:80/; http://192.168.0.205:80/camera/;

我不知道你的Location标题究竟是什么意思,但你应该明白这个想法,用主机名替换IP或重定向试图带你去的东西,你只是告诉nginx追加/camera重定向网站要求您做的事情

答案 1 :(得分:0)

问题是轴照相机返回的html,js和css都假设您正在从http://192.168.0.205/之类的URL访问它(只是方案和主机,没有其他/camera/路径)

如果您查看html,则会看到类似以下内容的东西:

<script src="/incl/prototypes.js?ver=5.80.1" language="javascript" type="text/javascript"></script>

简而言之,您需要重新编写要提供的内容,以反映将要从以下位置请求的新URL:http://192.168.0.205/camera/

您可以使用sub filter

 location /camera {
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    Host $http_host;
    proxy_pass          http://192.168.0.205:80/;
    proxy_redirect      default;

    # nevuh fuhget where you from
    sub_filter_once     off;
    sub_filter_types    *;
    sub_filter          '"/'    '"/camera/';
    sub_filter          '=/'    '=/camera/';
}

取决于您的相机,您可能需要玩耍并添加更多sub_filter行,以捕获基本路径错误指向/的所有位置。另外,这基本上是用REGEX解析html / js / cs的注意点。