2017-08-14 27 views
0

キャプチャした正規表現グループをURIとして渡そうとしています。

設定:必要なNginx動的プロキシ

location ~ /proxy/(.*?)$ { 
    proxy_pass http://$1; 
} 


http://127.0.0.1:9999/proxy/example.com/test/asd.html
べきプロキシパスへ:
http://example.com/test/asd.html


結果:

> curl http://127.0.0.1:9999/proxy/example.com/test/asd.html 

<html> 
<head><title>404 Not Found</title></head> 
<body bgcolor="white"> 
<center><h1>404 Not Found</h1></center> 
<hr><center>nginx</center> 
</body> 
</html> 


エラーログが空です。
私はここで何が欠けていますか?おかげ

+0

に役立ちますかどうかを確認

location ~ \/proxy\/(.*?)$ { proxy_pass http://$1; } 

を試みるべきですここで私は正規表現のためにしなければならなかったものです。私はあなたの入力文字列を取り、JS正規表現で試してみましょうstr = "http://127.0.0.1:9999/proxy/example.com/test/asd.html"; 結果= str.match(/ proxy \ /(。*)$ /); console.log(結果[1]); ==> example.com/test/asd.htmlプロキシ直後に「/」をエスケープするか、example.com/test/asd.htmlを取得するか、groupdでキャプチャしてproxy_pass http://$ 1; ==>スラッシュが1つしか書かれていない – JBone

+0

以下のコードブロックが動作するかどうかを確認してください。答えブロックにコードを明示するためにペーストしました。 – JBone

答えて

1

は、私がどのように正規表現オブジェクトの動作を確認するためにnginxの場所の正規表現を探してみました(つまり、// JSである)、ここであなたはそれが、うまく

+0

これはIPアドレスのみで動作します。ドメインを使用している場合、404エラーです。たとえば、http://127.0.0.1:9999/proxy/1.2.3.4のようにIPアドレスを使用すると、プロキシは 'http:// 1.2.3.4/proxy/1.2.3.4'に渡ります。何か案は? –

+0

私は正規表現の部分はIPアドレスのために働いていればうまくいくと思います。ドメイン名が正しいIPアドレスに設定されていることを確認する必要がありますか? "proxy_pass"をいくつか印刷する方法がありますか? – JBone

+0

私はそうは思わない。私はそれを試みます。編集:ログにリゾルバーエラーが表示されます。 'resolver 8.8.8.8'が追加され、ドメイン名を解決できるようになりました。しかし、私はまだ問題があります。 1-プロキシがドメイン名に渡すときに、Hostヘッダーを渡さない。 2-これは起こります: 'example.com/proxy/example.com' –