私はnginx設定に2つの場所で機能します:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
これら2つを1つの場所に結合するにはどうすればよいですか?
私は試しました この提案
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
しかし、それは私にはうまくいきません。
また、バックエンドを使用しない場合、次の構成は正しく機能しています。
location ~ ^/(static|media)/ {
root /home/project_root;
}
update(ログの一部の文字列)
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$
実際、私の解決策はうまくいきます:
location ~ ^/(static|media)/ {
root /home/project_root;
}
そして問題はバックエンドとは何の関係もありません。 Guido Vaccarellaが正しく気づいたので、それは次々と続くlocation ~ ...
一致したので、私のlocation ~ ...
は実行する機会がありませんでした。
nginxドキュメント によると:
次に、構成ファイルでの出現順に正規表現がチェックされます。正規表現の検索は最初の一致で終了し、対応する構成が使用されます。
構成では、次の場所は、proxy_passがある場所の前に定義され、staticの下のjsおよびcssファイルのリクエストと一致します。
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
残念ながら、「log_not_found off」句は、この場所に関連するファイルが見つからないエラーのロギングを無効にします。そのため、error_logは空です。
この場所をコメント化するか、proxy_passを使用して場所の後に移動することができます(staticにない他のファイルで必要な場合/メディア)。
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
) <-----------
する必要があります...
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
} <-----------
終了は、括弧()ではなく中括弧{}である必要があります。
それを見るのにどれくらい時間がかかったのか信じられません。グイドはコメントから正しかった。