Score:1

การกำหนดค่า apache ไม่ให้ให้บริการไฟล์ php แบบคงที่ เว้นแต่จะมีการกำหนดค่า php-fpm

ธง ng
Tom

ฉันมีส่วนการกำหนดค่า apache 2.4 ที่ฉันใช้เพื่อจัดการกับสถานการณ์ที่หายาก ซึ่งกล่อง apache ที่กำหนดค่าไม่ถูกต้องสามารถให้บริการไฟล์ php เป็นข้อความธรรมดาแบบคงที่ และอาจทำให้ข้อมูลรับรอง ฯลฯ หายไป

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <Files "*.php">
        Require all denied
    </Files>
  </IfModule>
</IfModule>

คำสั่งเหล่านั้นจะตรวจสอบว่ามีโมดูล php อยู่หรือไม่ และหากไม่พบโมดูลใดโมดูลหนึ่ง ก็จะไม่ให้บริการหน้าดังกล่าว

อย่างไรก็ตามในรุ่นปัจจุบันของ httpd 2.4 สำหรับ centos-8 นั้น php-fpm เป็นวิธีเริ่มต้นในการกำหนดค่าตัวจัดการสำหรับ php และจะไม่โหลดโมดูลใด ๆ สำหรับ php:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

น่าเสียดายที่โมดูล proxy_fcgi โหลดอัตโนมัติโดย httpd ดังนั้นจึงไม่มีประโยชน์เนื่องจากเป็นตัวบ่งชี้ว่ามีการกำหนดค่า php-fpm (หรือไม่):

[root@web httpd]# rpm -q --whatprovides /usr/lib64/httpd/modules/mod_proxy_fcgi.so
httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64

ตาม เอกสาร มี แฮนด์เลอร์ ตัวแปร:

HANDLER ชื่อของตัวจัดการที่สร้างการตอบสนอง

... ซึ่งควรส่งคืนอย่างใดอย่างหนึ่ง ในตัวจัดการที่สร้างขึ้น

ตัวจัดการเริ่มต้น: ส่งไฟล์โดยใช้ default_handler() ซึ่งเป็นตัวจัดการที่ใช้โดยค่าเริ่มต้นเพื่อจัดการเนื้อหาคงที่ (หลัก)
send-as-is: ส่งไฟล์ที่มีส่วนหัว HTTP ตามที่เป็นอยู่ (mod_asis)
cgi-script: ถือว่าไฟล์เป็นสคริปต์ CGI (mod_cgi)
ไฟล์ imap: แยกวิเคราะห์เป็นไฟล์กฎของ imagemap (mod_imagemap)
ข้อมูลเซิร์ฟเวอร์: รับข้อมูลการกำหนดค่าของเซิร์ฟเวอร์ (mod_info)
สถานะเซิร์ฟเวอร์: รับรายงานสถานะของเซิร์ฟเวอร์ (mod_สถานะ)
แผนที่ประเภท: แยกวิเคราะห์เป็นไฟล์แผนที่ประเภทสำหรับการเจรจาเนื้อหา (mod_negotiation)

อย่างไรก็ตาม ความพยายามของฉันในการจับคู่กับมันไม่ประสบความสำเร็จ เช่น สิ่งนี้ไม่ทำงาน:

<FilesMatch \.(php|phar)$>
  <If "%{HANDLER} == 'default-handler'">
    Require all denied
  </If>
</FilesMatch>

ข้อเสนอแนะใด ๆ ที่ชื่นชม

แก้ไข

ฉันทิ้งค่าของตัวแปร %{HANDLER} ทั้งที่ติดตั้ง php-fpm และไม่เป็นเช่นนั้น:

<IfModule headers_module>
    Header  always set X-HANDLER "expr=%{HANDLER}"
</IfModule>

และส่งคืนส่วนหัวต่อไปนี้:

X-HANDLER: ข้อความ/ธรรมดา # ไม่มี php-fpm

X-HANDLER: proxy:unix:/run/php-fpm/www.sock|fcgi://localhost # กับ php-fpm

ดังนั้นฉันจึงอัปเดตการทดสอบเป็น:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <If "%{HANDLER} == 'text/plain'">
      <Files "*.php">
          Require all denied
      </Files>
    </If>
  </IfModule>
</IfModule>

อย่างไรก็ตามนั่นก็ไม่ได้ผลเช่นกัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา