Ativar captura de navegador nginx para um URL específico

3

Como posso ativar o catch nginx para um URL específico? Eu tenho um aplicativo web do django e eu coloco meus arquivos estáticos como CSS, JavaScript e ... em uma pasta chamada static e eu posso acessá-los via link e eu quero configurar nginx para pegar esses arquivos somente a partir desta url. Li link mas essa opção não foi explicado lá. Eu tentei abaixo configuração e reiniciei o meu servidor ngnix mas eu tenho erros. Este é o meu arquivo sites-available/default config. Qual é o problema?

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

E este é o conteúdo do arquivo de log 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
    
por Hamid FzM 07.03.2014 / 19:31

2 respostas

3

Do wiki nginx , parece que você tem um espaço entre "/ static" e seu padrão de regex. O local usa apenas um argumento "uri", não dois ... e o nginx interpretará esse espaço como um delimitador de argumentos.

Além disso, você precisa dizer a um bloco de localização que deseja corresponder uma expressão regular com os modificadores '~' ou '~ *'.

Você pode tentar isso

location ~* "/static.*(jpg|jpeg|png|gif|ico|css|js)$" {

em vez do que você tem e veja se isso faz o que você quer.

    
por 07.03.2014 / 21:28
1

Você tem algum outro arquivo nesta pasta? Eu não sei ou se está tudo bem expô-los você pode simplificar a configuração:

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";
        }
}
    
por 08.03.2014 / 12:49