Nginx vô hiệu hóa .htaccess và các tệp ẩn nhưng cho phép thư mục được biết đến .well


16

Tôi có máy chủ Nginx và các tệp ẩn bị vô hiệu hóa trong nginx_vhost.conf

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

Nhưng LetsEncrypt cần truy cập vào .well-knownthư mục.

Làm cách nào để cho phép .well-knownthư mục và từ chối các tệp ẩn khác?


Lưu ý: nginx không sử dụng hoặc có .htaccesstệp. Nó có tập tin configuraiton nhưng chúng không được gọi .htaccess, cũng không hoạt động giống nhau.
Rob

Câu trả lời:


17

Các giải pháp khác không giúp tôi.

Giải pháp của tôi là bao gồm một regex tiêu cực cho .well-known. Khối mã của bạn sẽ trông như thế này sau đó:

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

Nó sẽ chặn mọi tệp chấm trừ những tệp bắt đầu bằng .well-known

PS: Tôi cũng sẽ thêm return 404;vào khối.


1
Có phải location ~* /\.(?!well-known\/) {như đã thấy tại github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/ không đồng nhất với điều này location ~ /\.(?!well-known).* { ?
Sao lưu dự phòng

3
không, nó không giống hệt nhau /\.(?!well-known\/)không biểu cảm như regex của tôi (vì tôi chặn tất cả các tệp chấm trừ định nghĩa nổi tiếng). Có lẽ tốt nhất sẽ là một sự kết hợp giống như location ~ /\.(?!well-known\/).*chỉ mở khóa thư mục nổi tiếng thay vì cũng là một lý thuyết .well-known-blabla. Nhưng tôi nghĩ không có mối nguy hiểm thực sự nào trong việc không chặn một tập tin lý thuyết .well-know-blabla.
Therealmarv

Tại sao vô hiệu hóa htaccess vì dù sao Nginx không xử lý nó?
Nữ web

3
Vâng, bạn đúng @webdess nhưng đôi khi có những môi trường hỗn hợp. Bất kỳ tệp chấm nào cũng không nên được phục vụ theo ý kiến ​​của tôi (bảo mật hoặc phơi bày lịch sử không mong muốn như với .git) trừ khi thực sự cần thiết.
Therealmarv

16

Nginx áp dụng các vị trí có biểu thức chính quy theo thứ tự xuất hiện trong tệp cấu hình.

Do đó, thêm một mục như thế này ngay trước vị trí hiện tại của bạn, nó sẽ giúp bạn.

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

Cảm ơn bạn, đây chính xác là những gì tôi cần! Đặt điều này trước một quy tắc từ chối truy cập vào tất cả các dotfiles. Điều duy nhất tôi thay đổi là thoát khỏi dấu chấm, vd location ~ /\.well-known {. Dù bằng cách nào, đây sẽ là câu trả lời được chấp nhận.
aexl

8

Tôi đã cung cấp hướng dẫn từng bước đầy đủ về cách sử dụng Let Encrypt với NGINX trên trang web của tôi.

Các phần chính là:

  • Ứng dụng khách chính thức chỉ ổn và thực sự kém trên Amazon Linux. Tôi đề nghị một khách hàng khác, ACME .
  • Sử dụng vị trí này cho phương pháp webroot, với khách hàng được đề xuất của tôi. Lưu ý rằng các yêu cầu được phục vụ qua http, không phải https.

Bạn hoàn toàn không cần người nghe trong khối https của mình, tất cả đều được thực hiện trên https. Điều này chỉ để chứng minh bạn kiểm soát tên miền, nó không phục vụ bất cứ điều gì riêng tư hoặc bí mật.

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

Hướng dẫn từng bước đầy đủ liên kết ở trên.


3

Thêm cái này (trước hoặc sau):

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

Bạn cũng có thể thêm phần này ở dưới cùng, bởi vì công cụ ^~sửa đổi phù hợp được ưu tiên hơn các biểu thức thông thường. Xem các tài liệu .


0

Nếu bạn có nhiều tệp cấu hình và chúng đã chứa từ chối trên .htaccess như

location ~ /\.ht { deny all; }

sau đó thay vì bỏ qua tất cả các tệp dấu chấm , bạn chỉ cần thêm một lần bỏ qua thứ hai cho .git với

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.