2012-04-25 14 views
11

"static.domain.com"は画像を配信できるので、nginxを設定しようとしています。これは私が思いついたものですが、より効率的に行うことができます。誰かが.htm、.php、ディレクトリ(何かが紛失していますか?)ファイルにアクセスしようとすると、403.htmlを提供したいと思います。もちろん、403.htmファイルとstatic.htmファイルは例外です。nginx - 画像のみを配信

どのように私はこれを適切に確保できますか?

server { 
    listen   xx.xx.xx.xx:80; 

    server_name  static.domain.com; 

    root   /www/domain.com/httpdocs; 
    index   static.htm; 

    access_log  off; 
    error_log  /dev/null crit; 

    error_page 403 /403.html; 

    # Disable access to .htaccess or any other hidden file 
    location ~ /\.ht { 
     deny all; 
    } 

    location ~* \.php { 
     deny all; 
    } 

    # Serve static files directly from nginx 
    location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) { 
     add_header  Cache-Control public; 
     add_header  Cache-Control must-revalidate; 
     expires   7d; 
    } 
} 

答えて

18

画像を移動してから拒否してみませんか?

location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) { 
    add_header  Cache-Control public; 
    add_header  Cache-Control must-revalidate; 
    expires   7d; 
} 
location/{ 
    deny all; 
} 

正規表現に一致しないための構文はありません。代わりに、ターゲットの正規表現にマッチして空のブロックを割り当て、次に/を使って他のものにマッチさせます。 -from http://wiki.nginx.org/HttpCoreModule#location

編集: "場所/" から "=" が削除はドキュメントを引用する:私の悪い

location =/{ 
    # matches the query/*only.* 
} 
location/{ 
    # matches *any query*, since all queries begin with /, but regular 
    # expressions and any longer conventional blocks will be 
    # matched first. 
} 

を。

+0

これは簡単ですか?他に何も必要ありませんか? –

+0

もちろん、私がそこに書いたことを実行していないので、私は確かにそれをテストするだろう。 location〜* \。(jpg | jpeg | gif | png ...)はパイプで区切られたすべての型にマッチします。そうでなければ "/"はすべてにマッチするので "/"にマッチします。 –

+0

FireFoxでは、アクセスされた.phpファイルがユーザーにファイルのダウンロードを許可しているため(ダウンロードプロンプトを表示)、これは機能しません。 –

関連する問題