web-dev-qa-db-fra.com

Nginx désactive .htaccess et les fichiers cachés mais autorise les répertoires .well connus

J'ai un serveur Nginx et j'ai désactivé les fichiers cachés dans le nginx_vhost.conf

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

Mais LetsEncrypt a besoin d'accéder à .well-known répertoire.

Comment autoriser le .well-known répertoire et refuser les autres fichiers cachés?

17
Janghou

Les autres solutions ne m'ont pas aidé.

Ma solution consiste à inclure un regex négatif pour .well-known. Votre bloc de code devrait alors ressembler à ceci:

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

Il bloquera tous les fichiers de points sauf ceux commençant par .well-known

P.S .: J'ajouterais également return 404; au bloc.

20
therealmarv

Nginx applique les emplacements avec des expressions régulières dans l'ordre de leur apparition dans le fichier de configuration.

Par conséquent, ajouter une entrée comme celle-ci juste avant votre position actuelle vous aidera.

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

J'ai fourni un tutoriel complet étape par étape sur comment utiliser Let's Encrypt avec NGINX sur mon site Web.

Les éléments clés sont:

  • Le client officiel n'est que correct et est vraiment pauvre sur Amazon Linux. Je recommande un autre client, ACME .
  • Utilisez cet emplacement pour la méthode webroot, avec mon client recommandé. Notez que les demandes sont servies via http, pas https.

Vous n'avez pas du tout besoin d'écouteurs dans votre bloc https, tout se fait sur https. C'est seulement pour prouver que vous contrôlez le domaine, il ne sert rien de privé ou de secret.

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

Guide étape par étape complet lié ci-dessus.

8
Tim

Ajoutez ceci (avant ou après):

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

Vous pouvez également l'ajouter en bas, car la correspondance ^~ le modificateur a priorité sur les expressions régulières. Voir les les docs .

3
Janghou

Si vous avez beaucoup de fichiers de configuration et qu'ils contiennent déjà un refus sur .htaccess comme

location ~ /\.ht { deny all; }

alors au lieu d'ignorer tous les fichiers de points, vous pouvez simplement ajouter un deuxième ignorer pour .git avec

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
0
rubo77