จะปิดการใช้งานรูทเอกสารเริ่มต้นใน Apache ได้อย่างไร?


13

ฉันโฮสต์บางเว็บไซต์บนเซิร์ฟเวอร์ของฉันที่ใช้ Apache Httpd แต่ละเว็บไซต์มีโดเมนของตัวเองหรือโดเมนย่อยและโฮสต์เสมือน ดังนั้นฉันไม่จำเป็นต้องรูทเอกสารเริ่มต้น มันเป็นไปได้ที่จะปิดการใช้งานDocumentRootใน/etc/httpd/conf/httpd.conf?

คำตอบ:


10

ขอบคุณสำหรับคำตอบอื่น ๆ ฉันแก้ไขมันโดยการเพิ่มโฮสต์เสมือนเริ่มต้นโดยไม่มีสิทธิ์ใด ๆ ส่วนกลางDocumentRootและServerNameตัวเลือกจะต้องตรงกับตัวเลือกที่ระบุในโฮสต์เสมือน

/etc/httpd/conf/httpd.conf

...
ServerName <server-ip>:80

DocumentRoot "/var/www/html"

<Directory />
    Order Deny,Allow
    Deny from all
    Options None
    AllowOverride None
</Directory>
...

/etc/httpd/conf.d/default.conf

<VirtualHost *:80>
        ServerName <server-ip>
        DocumentRoot /var/www/html
</VirtualHost>

ด้วยวิธีนี้ฉันจะได้รับข้อความที่ต้องห้าม 403 เมื่อเซิร์ฟเวอร์เข้าถึงได้โดยเป็น ip โดยตรงซึ่งเป็นสิ่งที่ฉันต้องการ มันจะดียิ่งขึ้นถ้าฉันไม่ต้องการ/var/www/htmlไดเรกทอรีที่มีอยู่สำหรับสิ่งนั้น แต่ Apache บ่นถ้าฉันระบุบางสิ่งบางอย่าง/dev/nullแทน


6

ฉันไม่แน่ใจว่าคุณต้องการทำเช่นนั้น ถ้าไม่มี vhost เริ่มต้นในการตั้งค่า Apache ที่ vhost ครั้งแรกที่กำหนดจะกลายเป็นค่าเริ่มต้น

สิ่งที่คุณต้องทำคือเริ่มต้นให้บริการหน้าว่าง


6

ใช่และไม่.

คุณสามารถแสดงความคิดเห็นหรือลบDocumentRootคำสั่งไม่มีปัญหา แต่นั่นก็ไม่ประสบความสำเร็จเท่าไหร่เพราะจากนั้นมันจะเป็นค่าเริ่มต้นไปยังไดเรคทอรีเริ่มต้นPREFIX/htdocs/ที่ตั้งค่า PREFIX ไว้เมื่อคุณสร้าง apache

เมื่อคุณมี VirtualHosts ตั้งค่าคำขอทั้งหมดที่ไม่ได้รับการจัดการโดยโฮสต์เสมือนที่กำหนดไว้อย่างชัดเจนได้รับการจัดการโดย virtualhost เริ่มต้น (ซึ่งโดยปกติจะเป็นโฮสต์แรก แต่httpd -Sจะบอกคุณ)


1

ไฟล์การกำหนดค่า Apache ที่มีส่วนขยายที่.confอยู่ภายใน/etc/httpd/conf.d/จะถูกรวมไว้เป็นส่วนหนึ่งของการกำหนดค่า Apache ดังนั้นเพื่อปิดการใช้งานการกำหนดค่าหน้า "ยินดีต้อนรับ" เริ่มต้นเราจำเป็นต้องเปลี่ยนชื่อการกำหนดค่า/etc/httpd/conf.d/welcome.conf:

ขั้นตอนที่หนึ่ง: ย้ายไฟล์ต้อนรับเริ่มต้น:

sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup 

ขั้นตอนที่สองเริ่มต้นบริการ Appache2 อีกครั้ง

sudo systemctl restart httpd

0

ใน /etc/httpd/conf/httpd.conf ของคุณหากฟังคำสั่งของคุณคือ

Listen 80

นั่นหมายความว่า

*:80

คุณได้กำหนดคู่<listener>+ <servename>ใน /etc/httpd/conf/httpd.conf และ /etc/httpd/conf.d/default.conf ของคุณซึ่งเป็นเดียวกัน: +*:80 <server-ip>ดังนั้น Apache คำนึงถึงเพียงหนึ่งเดียวเท่านั้น

ดังนั้นการกำหนดค่า vhost ของคุณจึงไม่มีประโยชน์

/etc/httpd/conf/httpd.conf ของคุณเพียงพอที่จะบล็อกการเข้าถึงไดเรกทอรี / var / www / html ของคุณ

เพียงเพิ่ม:

<Directory /var/www/html>
    Order Deny,Allow
    Deny from all
    Options None
    AllowOverride None
</Directory>

โปรดอ่านhttps://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :

วิธีที่เซิร์ฟเวอร์เลือกโฮสต์เสมือนตามชื่อที่เหมาะสม

สิ่งสำคัญคือต้องตระหนักว่าขั้นตอนแรกในการแก้ปัญหาโฮสต์เสมือนตามชื่อคือการจำแนก IP การจำแนกโฮสต์เสมือนโดยใช้ชื่อนั้นจะเลือกโฮสต์เสมือนตามชื่อที่เหมาะสมที่สุดหลังจากทำการ จำกัด ผู้สมัครให้เหมาะสมที่สุดกับการจับคู่ IP การใช้ไวด์การ์ด (*) สำหรับที่อยู่ IP ในคำสั่ง VirtualHost ทั้งหมดทำให้การทำแผนที่บน IP นี้ไม่เกี่ยวข้อง

เมื่อคำขอมาถึงเซิร์ฟเวอร์จะค้นหาอาร์กิวเมนต์ที่ตรงกันที่ดีที่สุด (เฉพาะเจาะจงมากที่สุด) ตามที่อยู่ IP และพอร์ตที่ใช้โดยคำขอ หากมีโฮสต์เสมือนมากกว่าหนึ่งโฮสต์ที่มีที่อยู่ที่ตรงกับสิ่งนี้ที่สุดและการรวมกันของพอร์ต Apache จะเปรียบเทียบคำสั่ง ServerName และ ServerAlias ​​เพิ่มเติมกับชื่อเซิร์ฟเวอร์ที่มีอยู่ในคำขอ

หากคุณไม่ใช้คำสั่งชื่อเซิร์ฟเวอร์จากโฮสต์เสมือนที่ใช้ชื่อเซิร์ฟเวอร์จะใช้ชื่อโดเมนแบบเต็ม (FQDN) ที่ได้รับมาจากชื่อโฮสต์ของระบบ ชื่อเซิร์ฟเวอร์ที่ตั้งค่าโดยปริยายนี้สามารถนำไปสู่การจับคู่โฮสต์เสมือนที่ใช้งานง่ายและไม่สนับสนุน

vhost แบบอิงชื่อดีฟอลต์สำหรับ IP และการรวมกันของพอร์ตหากไม่พบ ServerName หรือ ServerAlias ​​ที่ตรงกันในชุดของโฮสต์เสมือนที่มีที่อยู่ IP ที่ตรงกับการจับคู่ที่เฉพาะเจาะจงมากที่สุดและการรวมกันของพอร์ต


0

เพียงเปลี่ยนพอร์ตเริ่มต้นเป็น:

Listen 80
Listen 8080 # any fake port

และปล่อย * .80 ใน VirtualHost

ได้ผลสำหรับฉันกับ Apache2 และ Centos 7

ตัวอย่างอื่น ๆ ที่คุณจะพบในเอกสาร ดูตัวแปร _default_


0

เพื่อปิดการใช้งานหน้านี้เราต้องเปลี่ยนชื่อไฟล์ /etc/httpd/conf.d/welcome.conf เป็นอย่างอื่นหรือคุณสามารถลบได้ถ้าคุณไม่ต้องการ

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup

ตรวจสอบให้แน่ใจว่า Apache เริ่มต้นใหม่ (เป็น root) ด้วยคำสั่ง:

systemctl รีสตาร์ท httpd

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.