2016-12-01 7 views
0

なぜnginxエイリアスが動作しないのか分かりません。静的ファイルフォルダのnginxエイリアスが機能しない

なぜこの行は動作しません:

location /static/ { 
      alias /home/django11/example.com/finansuinfo/static_root/; 
     } 

は実際に多分それは機能していますが、私の管理ページの静的ファイルが提供されていません。静的/管理者/ ...が存在しないというエラーが表示されます。

私はそれが唯一の静的フォルダ内のファイルを提供していますが、すべてのファイルがここmanage.py collectstatic

によって収集されstatic_rootフォルダに私の設定ではないと思います。私は

server { 
listen 80; 
server_name example.com www.example.com; 
root /home/django11/example.com/example; 

location/{ 
    include   uwsgi_params; 
    uwsgi_pass  unix:/home/django11/example.com/example/example.sock; 
} 

location /static/ { 
    alias /home/django11/example.com/example/static_root/; 
} 

# Media: images, icons, video, audio, HTC 
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
    expires 1M; 
    access_log off; 
    add_header Cache-Control "public"; 
} 

# CSS and Javascript 
location ~* \.(?:css|js|woff)$ { 
    expires 1M; 
    access_log off; 
    add_header Cache-Control "public"; 
} 

}

エイリアスが次の理由で動作しないことが判明しました:

# Media: images, icons, video, audio, HTC 
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
     expires 1M; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    # CSS and Javascript 
    location ~* \.(?:css|js|woff)$ { 
     expires 1M; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

修正方法はありますか?なぜなら、このstatic_rootが削除されるからです。 nginxの中location設定のドキュメントを見てみると

+1

STATUC_URL変数とSTATIC_ROOT変数にはどのような値がありますか? ディレクトリの所有権を確認しましたか? – Satevg

+0

これは私のsettings.pyファイルであり、ディレクトリ所有権を確認することは何を意味していますか?=() os.path.join(BASE_DIR、 '静的'、 ) STATIC_URL = '/静的/' STATICFILES_DIRS STATIC_ROOT = os.path.join(BASE_DIR、 'static_root')あなたが – django11

+1

静的ファイルアクセスしようとすると、あなたが後の場所で使用したファイル拡張子のうちの1つですconfigs CSS、JS、またはメディアファイル? – AKS

答えて

2

場所は、いずれかの接頭辞文字列によって、または正規表現によって定義することができます。正規表現は先行する "〜*"修飾子(大文字小文字を区別しない照合の場合)または "〜"修飾子(大文字小文字を区別する照合の場合)で指定します。 与えられた要求に一致する場所を見つけるために、nginxは最初に接頭文字列(接頭辞の場所)を使って定義された場所を調べます。その中で、最も長いマッチングプレフィックスを有する位置が選択され、記憶される。 次に、正規表現が設定ファイルに現れる順にチェックされます。正規表現の検索は最初の一致で終了し、対応する設定が使用されます。正規表現との一致が見つからない場合は、以前に記憶されたプレフィックス位置の構成が使用されます。

あなたの問題の場合は、ここから説明することができます。

あなたは、静的なファイルにアクセスしよう(私は推測JSやメディアファイル、CSSの一つである)、それは最初を一致しました接頭文字列

location /static/ { 
    alias /home/django11/example.com/example/static_root/; 
} 

その後、それは正規表現の検索を開始し、CSSやJSファイル以下の場合には試合を取得します:

# CSS and Javascript 
location ~* \.(?:css|js|woff)$ { 
    expires 1M; 
    access_log off; 
    add_header Cache-Control "public"; 
} 

検索が終了し、上記の設定が使用されます。また、この設定ではエイリアスは定義されていないので、エイリアスは使用されません。

この正規表現ロケーションブロックを削除すると、プレフィックスロケーションのconfigが使用されます。そして、エイリアスが含まれているので、それは動作します。

+0

エイリアスヘッダーでエイリアスを動作させる方法を知っていますか? – django11

関連する問題