Nginx ปิดใช้งาน. htaccess และไฟล์ที่ซ่อน แต่อนุญาตให้ใช้ไดเรกทอรีที่รู้จักกันดี


16

ฉันมีเซิร์ฟเวอร์ Nginx และปิดการใช้งานไฟล์ที่ซ่อนอยู่ใน nginx_vhost.conf

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

แต่ LetsEncrypt ต้องการการเข้าถึง .well-knownไดเรกทอรี

ฉันจะอนุญาตให้.well-knownไดเรกทอรีและปฏิเสธไฟล์ที่ซ่อนอื่น ๆ ได้อย่างไร


หมายเหตุ: nginx ไม่ได้ใช้หรือมี.htaccessไฟล์ มันมีไฟล์ configuraiton แต่มันไม่ได้ถูกเรียก.htaccessและมันก็ไม่ทำงานเหมือนกัน
Rob

คำตอบ:


17

โซลูชันอื่นไม่ได้ช่วยฉัน

วิธีการแก้ปัญหาของฉันคือการรวมregex เชิงลบ.well-knownสำหรับ โค้ดบล็อกของคุณควรมีลักษณะดังนี้:

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

มันจะบล็อกทุกจุดไฟล์ยกเว้นคนที่เริ่มต้นด้วย .well-known

PS: ฉันจะเพิ่มreturn 404;ไปยังบล็อกด้วย


1
จะlocation ~* /\.(?!well-known\/) {เห็นได้ที่github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/…เหมือนกับสิ่งนี้location ~ /\.(?!well-known).* { หรือไม่
สำรองข้อมูล Pro

3
ไม่มันไม่เหมือนกันอย่างแน่นอน /\.(?!well-known\/)ไม่ชัดเจนเท่า regex ของฉัน (เพราะฉันบล็อกไฟล์ dot ทั้งหมดยกเว้นที่รู้จักกันดีตามคำจำกัดความ) บางทีสิ่งที่ดีที่สุดอาจเป็นการรวมกันlocation ~ /\.(?!well-known\/).*ที่ไม่บล็อกเฉพาะไดเรกทอรีที่รู้จักกันดี.well-known-blablaเท่านั้น แต่ฉันคิดว่าไม่มีอันตรายที่แท้จริงในการไม่บล็อกไฟล์. well-known-blabla ตามหลักวิชา
therealmarv

เหตุใดจึงปิดใช้งาน htaccess เนื่องจาก Nginx ไม่จัดการ
Webwoman

3
ใช่คุณถูก @webwoman แต่บางครั้งก็มีสภาพแวดล้อมที่หลากหลาย ไฟล์ dot ใด ๆ ไม่ควรแสดงในความคิดของฉัน (ความปลอดภัยหรือการเปิดเผยประวัติที่ไม่ต้องการเช่น. git) เว้นแต่จำเป็นจริงๆ
therealmarv

16

Nginx ใช้ตำแหน่งที่มีนิพจน์ทั่วไปตามลำดับที่ปรากฏในไฟล์กำหนดค่า

ดังนั้นการเพิ่มรายการเช่นนี้ก่อนตำแหน่งปัจจุบันของคุณจะช่วยคุณได้

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

ขอบคุณนี่คือสิ่งที่ฉันต้องการ! วางไว้ก่อนที่กฎจะปฏิเสธการเข้าถึงดอทไฟล์ทั้งหมด location ~ /\.well-known {สิ่งเดียวที่ผมเปลี่ยนเป็นที่หลบหนีจุดเช่น ไม่ว่าจะด้วยวิธีใดควรเป็นคำตอบที่ยอมรับได้
aexl

8

ฉันได้ให้การสอนแบบเต็มขั้นตอนเกี่ยวกับวิธีใช้ Let's Encrypt กับ NGINXบนเว็บไซต์ของฉัน

ส่วนสำคัญคือ:

  • ลูกค้าอย่างเป็นทางการก็โอเคและแย่มากใน Amazon Linux ผมขอแนะนำให้ลูกค้าที่แตกต่างกันสุดยอด
  • ใช้ตำแหน่งนี้สำหรับวิธี webroot กับไคลเอนต์แนะนำของฉัน โปรดทราบว่าคำขอจะให้บริการผ่าน http ไม่ใช่ https

คุณไม่ต้องการผู้ฟังในบล็อก https เลยมันทำเสร็จแล้วบน https นี่เป็นเพียงการพิสูจน์ว่าคุณควบคุมโดเมนไม่ใช่สิ่งที่เป็นส่วนตัวหรือเป็นความลับ

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

คู่มือแบบเต็มขั้นตอนลิงก์ด้านบน


3

เพิ่มสิ่งนี้ (ก่อนหรือหลัง):

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

คุณสามารถเพิ่มสิ่งนี้ได้ที่ด้านล่างเนื่องจาก^~ตัวดัดแปลงการจับคู่มีความสำคัญมากกว่านิพจน์ทั่วไป ดูเอกสาร


0

หากคุณมีไฟล์กำหนดค่าจำนวนมากและพวกเขามีการปฏิเสธใน. htaccess เช่นนั้น

location ~ /\.ht { deny all; }

จากนั้นแทนที่จะเพิกเฉยกับไฟล์ dot ทั้งหมดคุณสามารถเพิ่มการละเว้นสองสำหรับ. git ด้วย

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.