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.
}
Мой плохой.