Как я могу включить nginx catch для определенного URL? У меня есть веб-приложение django, и я помещаю свои статические файлы, такие как CSS, JavaScript и ... в папку с именем static, и я могу получить к ним доступ через http://example.com/static/ и я хочу настроить nginx n, чтобы эти файлы ловились только с этого URL-адреса. я прочел http://www.nginxtips.com/how-to-enable-browser-cache-static-files-on-nginx/ но этот вариант там не объяснялся Я попытался выполнить конфигурацию ниже и перезапустил сервер ngnix, но у меня возникли ошибки. Это мое sites-available/default
файл конфигурации. В чем проблема?
server {
listen 80;
listen 443 ssl;
server_name www.example.com example.com;
ssl_certificate /var/www/example/ssl/ssl.crt;
ssl_certificate_key /var/www/example/ssl/ssl.key;
location /static (jpg|jpeg|png|gif|ico|css|js)$ {
alias /var/www/example/static;
expires 3d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location /media {
alias /var/www/example/media;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
}
А это содержимое файла журнала nginx ...
2014/03/07 13:02:28 [error] 25189#0: *22 open() "/etc/nginx/html/static/css/wait.css" failed (2: No such file or directory), client: 2.178.27.157, server: www.example.com, request: "GET /static/css/wait.css HTTP/1.1", host: "example.com", referrer: "http://example.com/"
2014/03/07 13:02:28 [error] 25189#0: *23 open() "/etc/nginx/html/static/img/infographi.png" failed (2: No such file or directory), client: 2.178.27.157, server: www.example.com, request: "GET /static/img/infographi.png HTTP/1.1", host: "example.com", referrer: "http://example.com/"
2014/03/07 13:02:29 [error] 25189#0: *23 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 2.178.27.157, server: www.example.com, request: "GET /favicon.ico HTTP/1.1", host: "example.com"
2014/03/07 13:08:41 [emerg] 25220#0: invalid location modifier "/static" in /etc/nginx/sites-enabled/default:8
2014/03/07 13:08:41 [emerg] 25221#0: invalid location modifier "/static" in /etc/nginx/sites-enabled/default:8
2014/03/07 13:09:50 [emerg] 25255#0: invalid location modifier "/static" in /etc/nginx/sites-enabled/default:8
2014/03/07 13:09:50 [emerg] 25256#0: invalid location modifier "/static" in /etc/nginx/sites-enabled/default:8
Из nginx вики кажется, у вас есть пробел между "/ static" и вашим шаблоном регулярного выражения. Location принимает только один аргумент "uri", а не два ... и nginx интерпретирует это пространство как разделитель аргументов.
Также вам нужно указать блоку местоположения, что вы хотите сопоставить регулярное выражение с модификаторами '~' или '~ *'.
Вы можете попробовать это
location ~* "/static.*(jpg|jpeg|png|gif|ico|css|js)$" {
вместо того, что у вас есть, и посмотрите, делает ли это то, что вы хотите.
В этой папке есть другие файлы? Если вы этого не сделаете, или если это нормально, вы можете упростить конфигурацию:
server {
listen 80;
listen 443 ssl;
server_name www.example.com example.com;
ssl_certificate /var/www/example/ssl/ssl.crt;
ssl_certificate_key /var/www/example/ssl/ssl.key;
root /var/www/example;
location / {
proxy_pass http://127.0.0.1:8000;
}
location /media/ {
# it's ok to have empty location
}
location /static/ {
expires 3d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
}