Nginx .htaccess ve gizli dosyaları devre dışı bırakır, ancak .well-bilinen dizine izin verir


16

Bir Nginx sunucum var ve gizli dosyaları nginx_vhost.conf

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

Ancak LetsEncrypt'in .well-knowndizine erişmesi gerekiyor .

.well-knownDizine nasıl izin verebilirim ve diğer gizli dosyaları nasıl reddedebilirim?


Not: nginx .htaccessdosya kullanmaz veya dosyaları içermez . Yapılandırma dosyaları var, ancak çağrılmıyor .htaccessveya aynı şekilde çalışmıyorlar.
Rob

Yanıtlar:


17

Diğer çözümler bana yardımcı olmadı.

Benim çözümüm bir eklemektir negatif normal ifade için .well-known. Kod bloğunuz şu şekilde görünmelidir:

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

İle başlayanlar dışında her nokta dosyasını engeller .well-known

PS: Ben de return 404;bloğa eklerdim.


1
Mi location ~* /\.(?!well-known\/) {de görüldüğü gibi github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/... bu özdeş location ~ /\.(?!well-known).* { ?
Pro Backup

3
hayır tam olarak aynı değil. /\.(?!well-known\/)benim regex kadar etkileyici değil (çünkü tanımı ile iyi bilinen hariç tüm nokta dosyalarını engellerim). Belki de en iyisi, location ~ /\.(?!well-known\/).*teorik olarak değil, sadece iyi bilinen dizinin kilidini açan bir kombinasyon olabilir .well-known-blabla. Ama bence bir teorik, iyi bilinen bir blabla dosyasını engellememek için gerçek bir tehlike yok.
therealmarv

Nginx neden halletmediği için neden htaccess'i devre dışı bırakalım?
Webwoman

3
Evet haklısın @webwoman ama bazen karışık ortamlar var. Gerçekten gerekmedikçe herhangi bir nokta dosyası benim görüşüme göre (güvenlik veya .git gibi geçmişin istenmeyen açığa çıkarılması) sunulmamalıdır.
therealmarv

16

Nginx, düzenli ifadeleri olan konumları yapılandırma dosyasındaki görünüm sırasına göre uygular.

Bu nedenle, mevcut konumunuzdan hemen önce böyle bir giriş eklemek size yardımcı olacaktır.

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

Teşekkür ederim, tam da ihtiyacım olan şey bu! Tüm nokta dosyalarına erişimi reddeden bir kuraldan önce bunu yerleştirin. Değiştirdiğim tek şey noktadan kaçmaktı, örneğin location ~ /\.well-known {. Her iki durumda da, kabul edilen cevap bu olmalıdır.
aexl

8

Web sitemde NGINX ile Let's Encrypt'in nasıl kullanılacağına dair tam bir adım adım eğitim sağladım .

Anahtar parçalar:

  • Resmi istemci sadece iyi ve Amazon Linux'ta gerçekten fakir. Farklı bir müşteri öneriyorum, ACME .
  • Webroot yöntemi için bu konumu, önerilen istemcimle birlikte kullan. İsteklerin https yerine http üzerinden sunulduğunu unutmayın.

Https bloğunuzda dinleyicilere ihtiyacınız yoktur, hepsi https'de yapılır. Bu yalnızca alanı kontrol ettiğinizi kanıtlamak içindir, özel veya gizli bir şey sunmaz.

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

Yukarıda bağlantılı tam adım adım kılavuz.


3

Bunu ekleyin (önce veya sonra):

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

Eşleşen ^~değiştirici normal ifadelere göre öncelikli olduğundan, bunu en altta da ekleyebilirsiniz . Belgelere bakın .


0

Çok sayıda yapılandırma dosyanız varsa ve zaten .htaccess üzerinde bir reddetme içeriyorsa,

location ~ /\.ht { deny all; }

Sonra yerine tüm nokta dosyaları görmezden gelmekle , sadece ikinci ile .git için görmezden ekleyebilirsiniz

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.