2012-04-25 21 views
11

Sto provando a configurare nginx in modo che "static.domain.com" possa servire solo immagini. Questo è quello che ho trovato, ma so che può essere fatto in modo più efficiente. Voglio servire 403.html se qualcuno cerca di accedere a qualsiasi file .htm, .php, directory (qualsiasi altra cosa mi manca?). Certamente, ad eccezione dei file 403.htm e static.htm.nginx - serve solo immagini

Qualche idea su come potermi proteggere correttamente?

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

risposta

18

Perché non spostare le immagini e quindi negare tutto?

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

non v'è alcuna sintassi per non corrispondenti a un'espressione regolare. Invece, abbina l'espressione regolare di destinazione e assegna un blocco vuoto, quindi usa la posizione/per abbinare qualsiasi altra cosa. -Da http://wiki.nginx.org/HttpCoreModule#location

Edit: Rimosso "=" da "posizione /" Per citare la documentazione:

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

Il mio male.

+0

È così semplice? non serve altro? –

+0

Dovrebbe essere, ovviamente, lo testerei per essere sicuro perché non ho eseguito ciò che ho scritto lì. La posizione ~ * \. (Jpg | jpeg | gif | png ...) corrisponde a tutti i tipi elencati qui separati con pipe, in caso contrario, corrisponderà a "/" poiché "/" corrisponde a tutto. –

+0

Ok, questo non funzionerà perché in FireFox, qualsiasi file .php a cui si accede consente all'utente di scaricare il file (mostra prompt di download). –