2017-08-21 5 views
0

私はルータにNginxを設定し、ネットワーク内のさまざまなコンポーネントにアクセスするためにサブドメイン(CNAMESを使用)を作成しています。私が問題になっているカメラに来るまでは、ほとんど簡単でした。Nginx URIに基づいてサーバーに渡す

これは基本的なIPカメラであり、これまでに私は別のポートでそれぞれを開いていました。彼らは基本的な認証を持っています。一度それが入力されると、私はライブビューで提示されます。私は(仕事をし、それらのすべて)これまでに設定している他のすべてのコンポーネントと同様

私は1つを設定することにより開始しました:

server { 
    listen 80; 
    server_name cam.example.co.uk; 

    location/{ 
     proxy_pass http://192.168.1.101:2001; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

は、LANまたはWANのいずれかからcam.example.co.ukを叩くは私に、ユーザー名とパスワードのプロンプトを与え、その後、ライブビューが読み込まれます。

9台のカメラがあるので、私はかなりのサブドメインを作成することができ、それぞれ1に私を指示するために最後に/1/2/3などを使用することをお勧めだろうと思いました。それと

server { 
    listen 80; 
    server_name cam.example.co.uk; 

    location /1/ { 
     proxy_pass http://192.168.1.101:2001; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location /2/ { 
     proxy_pass http://192.168.1.102:2002; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

私は404見つからないエラーを得た、とのようなログ内のメッセージ:

"/usr/html/new/index.htm" failed (2: No such file or directory) 

いくつかのグーグルは後で私がproxy_passで、同様のURIを指定する必要があるかもしれないことが分かりましたラインので、私は見えるようにそれらを変更:

proxy_pass http://192.168.1.102:2002/new/index.htm; 

これは、その後、ユーザ名とパスワードのプロンプトになりますが、資格情報が入力されたとき、私は残されていますすべてが空白の画面です。それがちょうどlocation /だったときそれは正常に働いたので、なぜ何も表示されていません。

URIをどこかに置いているような気がしますが、どこで/なぜ、何をするべきかわかりません。


EDIT

は、いろいろなことをグーグルとしようとして:

location /1 { 
    resolver 127.0.0.1; 
    set $backend "http://192.168.1.101:2001/new/index.htm"; 
    proxy_pass $backend; 
    proxy_buffering on; 
    proxy_redirect http://192.168.1.101:2001/new/index.htm http://cam.example.co.uk/1; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

は、次にブラウザcams.example.co.uk/1でこれに行くことは、ユーザー名とパスワードのプロンプトが表示されますが、その後、空白のページが表示されます。 Chromeデベロッパーツールを見ると、予期しないトークンエラーが発生し、.jsファイルが正しく読み込まれていないように見えます。

答えて

0

proxy_passディレクティブがURIで指定されている場合、要求がサーバーに渡されると、その場所に一致する正規化された要求URIの部分が、ディレクティブで指定されたURIに置き換えられます。

このお試しください:

server { 
    listen 80; 
    server_name cam.example.co.uk; 

    location /1/ { 
     proxy_pass http://192.168.1.101:2001/; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_redirect http://192.168.1.101:2001/ http://cam.example.co.uk/1/; 
    } 

    location /2/ { 
     proxy_pass http://192.168.1.102:2002/; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_redirect http://192.168.1.101:2002/ http://cam.example.co.uk/2/; 
    } 
} 

出典:私はproxy_passの末尾に/を入れて、私の質問を掲示しているのでhttp://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

+0

は、私はすでに試してみましたものです。 – hshah

+0

proxy_redirectを追加しようとしました。私の更新例を参照してください。 –

+0

変更されたNginxを再起動しました。これはまだ取得できません: "" /usr/html/new/index.htm "またはディレクトリ)」と表示されます。Nginxは以前のパスを覚えていて、面白いことをやっていますか? – hshah

関連する問題