Nginx disabilita i file .htaccess e nascosti ma consente la directory .well


16

Ho un server Nginx e disabilitato i file nascosti in nginx_vhost.conf

## Disable .htaccess and other hidden files
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

Ma LetsEncrypt necessita dell'accesso alla .well-knowndirectory.

Come posso consentire la .well-knowndirectory e negare gli altri file nascosti?


Nota: nginx non usa o non ha .htaccessfile. Ha file di configurazione, ma non vengono chiamati .htaccessné funzionano allo stesso modo.
Rob,

Risposte:


17

Le altre soluzioni non mi hanno aiutato.

La mia soluzione è quella di includere una regex negativa per .well-known. Il tuo blocco di codice dovrebbe apparire così:

## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}

Bloccherà ogni file dot tranne quelli che iniziano con .well-known

PS: aggiungerei anche return 404;al blocco.


1
Come location ~* /\.(?!well-known\/) {visto su github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/… è identico a questo location ~ /\.(?!well-known).* { ?
Pro Backup

3
no non è esattamente lo stesso. /\.(?!well-known\/)non è espressivo come il mio regex (perché blocco tutti i file dot tranne che per definizione è noto). Forse la migliore sarebbe una combinazione come quella location ~ /\.(?!well-known\/).*che sblocca solo la directory ben nota invece anche una teoria .well-known-blabla. Ma penso che non vi sia alcun pericolo reale nel non bloccare un file teorico .well-known-blabla.
therealmarv,

perché disabilitare htaccess poiché Nginx comunque non lo gestisce?
Webwoman,

3
Sì, hai ragione @webwoman ma a volte ci sono ambienti misti. Qualsiasi file dot non dovrebbe essere offerto a mio avviso (sicurezza o esposizione indesiderata della storia come con .git) a meno che non sia realmente necessario.
therealmarv

16

Nginx applica le posizioni con espressioni regolari nell'ordine del loro aspetto nel file di configurazione.

Pertanto, l'aggiunta di una voce come questa appena prima della posizione corrente ti aiuterà.

location ~ /\.well-known { 
    allow all;
}

Grazie, questo è esattamente ciò di cui avevo bisogno! Inserito questo prima di una regola che nega l'accesso a tutti i dotfile. L'unica cosa che ho cambiato è sfuggire al punto, ad es location ~ /\.well-known {. Ad ogni modo, questa dovrebbe essere la risposta accettata.
aexl,

8

Ho fornito un tutorial passo-passo completo su come usare Let's Encrypt con NGINX sul mio sito web.

Le parti chiave sono:

  • Il client ufficiale è ok, ed è davvero scarso su Amazon Linux. Raccomando un altro cliente, ACME .
  • Utilizzare questa posizione per il metodo webroot, con il mio client consigliato. Si noti che le richieste vengono inviate su http, non su https.

Non hai assolutamente bisogno di ascoltatori nel tuo blocco https, tutto è fatto su https. Questo è solo per dimostrare che controlli il dominio, non serve nulla di privato o segreto.

# Answer let's encrypt requests, but forward everything else to https
server {
  listen       80;
  server_name  example.com www.example.com
  access_log  /var/log/nginx/access.log main;

  # Let's Encrypt certificates with Acmetool
  location /.well-known/acme-challenge/ {
    alias /var/www/.well-known/acme-challenge/;
  }

  location / {
    return       301 https://www.example.com$request_uri;
  }
}

Guida completa passo passo collegata sopra.


3

Aggiungi questo (prima o dopo):

location ^~ /.well-known/ {
        log_not_found off;
     }

Puoi aggiungerlo anche in fondo, perché il ^~modificatore corrispondente ha la precedenza sulle espressioni regolari. Vedi i documenti .


0

Se hai molti file di configurazione e contengono già un rifiuto su .htaccess come

location ~ /\.ht { deny all; }

quindi invece di ignorare tutti i file punto , puoi semplicemente aggiungere un secondo ignore per .git con

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.