Nginx - показывать только изображения

Я пытаюсь настроить nginx, поэтому "static.domain.com" может выполнять только изображения. Это то, что я придумал, но я знаю, что это можно сделать более эффективно. Я хочу служить 403.html, если кто-то пытается получить доступ к любым файлам .htm,.php, directory (что-нибудь еще, что мне не хватает?). Конечно, за исключением файлов 403.htm и static.htm.

Любые идеи, как я могу обеспечить это правильно?

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;
     }
}

Ответ 1

Почему бы не переместить изображения вверх, а затем запретить все?

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; 
}

нет синтаксиса для NOT, соответствующего регулярному выражению. Вместо этого сопоставьте целевое регулярное выражение и назначьте пустой блок, затем используйте location/, чтобы соответствовать чему-либо еще. -From http://wiki.nginx.org/HttpCoreModule#location

Изменить: Удалено "=" из "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.
}

Мой плохой.