Nginx menonaktifkan .htaccess dan file-file yang disembunyikan tetapi mengizinkan direktori .kenal

16

Saya memiliki server Nginx, dan menonaktifkan file tersembunyi di Internet nginx_vhost.conf

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

Tetapi LetsEncrypt membutuhkan akses ke .well-knowndirektori.

Bagaimana cara saya mengizinkan .well-knowndirektori dan menolak file tersembunyi lainnya?

Janghou
sumber
Catatan: nginx tidak menggunakan atau memiliki .htaccessfile. Ini memiliki file configuraiton tetapi mereka tidak dipanggil .htaccess, mereka juga tidak bekerja sama.
Rob

Jawaban:

17

Solusi lain tidak membantu saya.

Solusi saya adalah memasukkan regex negatif untuk .well-known. Blok kode Anda akan terlihat seperti ini:

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

Ini akan memblokir setiap file dot kecuali yang dimulai dengan .well-known

PS: Saya juga akan menambah return 404;blok.

karenanya
sumber
1
Apakah location ~* /\.(?!well-known\/) {seperti yang terlihat di github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/… identik dengan ini location ~ /\.(?!well-known).* { ?
Pro Backup
3
tidak persis tidak persis sama. /\.(?!well-known\/)tidak se ekspresif regex saya (karena saya memblokir semua file dot kecuali dikenal dengan definisi). Mungkin yang terbaik adalah kombinasi seperti location ~ /\.(?!well-known\/).*yang membuka blokir hanya direktori terkenal bukan juga teoretis .well-known-blabla. Tapi saya pikir tidak ada bahaya nyata dengan tidak memblokir file teoretis .bau-dikenal-blabla.
therealmarv
mengapa menonaktifkan htaccess karena bagaimanapun Nginx tidak menanganinya?
Webwoman
3
Ya Anda benar @ wanita wanita tetapi kadang-kadang ada lingkungan campuran. File dot apa pun tidak boleh disajikan menurut pendapat saya (keamanan atau pengungkapan riwayat yang tidak diinginkan seperti dengan .git) kecuali benar-benar diperlukan.
therealmarv
16

Nginx menerapkan lokasi dengan ekspresi reguler sesuai urutan kemunculannya di file konfigurasi.

Karenanya, menambahkan entri seperti ini tepat sebelum lokasi Anda saat ini akan membantu Anda.

location ~ /\.well-known { 
    allow all;
}
Weirdei
sumber
Terima kasih, inilah tepatnya yang saya butuhkan! Menempatkan ini di depan aturan yang menolak akses ke semua file dot. Satu-satunya hal yang saya ubah adalah keluar dari titik, mis location ~ /\.well-known {. Bagaimanapun, ini harus menjadi jawaban yang diterima.
aexl
8

Saya telah menyediakan tutorial langkah demi langkah lengkap tentang cara menggunakan Let's Encrypt dengan NGINX di situs web saya.

Bagian kuncinya adalah:

  • Klien resmi hanya ok, dan benar-benar buruk di Amazon Linux. Saya merekomendasikan klien yang berbeda, ACME .
  • Gunakan lokasi ini untuk metode webroot, dengan klien rekomendasiku. Perhatikan bahwa permintaan dilayani melalui http, bukan https.

Anda tidak perlu pendengar di blok https Anda sama sekali, itu semua dilakukan di https. Ini hanya untuk membuktikan bahwa Anda mengendalikan domain, itu tidak melayani sesuatu yang bersifat pribadi atau rahasia.

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

Panduan langkah demi langkah lengkap yang ditautkan di atas.

Tim
sumber
3

Tambahkan ini (sebelum atau sesudah):

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

Anda dapat menambahkan ini juga di bagian bawah, karena ^~pengubah yang cocok lebih diutamakan daripada ekspresi reguler. Lihat dokumen .

Janghou
sumber
0

Jika Anda memiliki banyak file konfigurasi dan file tersebut sudah mengandung deny pada .htaccess like

location ~ /\.ht { deny all; }

lalu alih-alih mengabaikan semua file dot , Anda bisa menambahkan abaikan kedua untuk .git with

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