ฉันโฮสต์บางเว็บไซต์บนเซิร์ฟเวอร์ของฉันที่ใช้ Apache Httpd แต่ละเว็บไซต์มีโดเมนของตัวเองหรือโดเมนย่อยและโฮสต์เสมือน ดังนั้นฉันไม่จำเป็นต้องรูทเอกสารเริ่มต้น มันเป็นไปได้ที่จะปิดการใช้งานDocumentRoot
ใน/etc/httpd/conf/httpd.conf
?
ฉันโฮสต์บางเว็บไซต์บนเซิร์ฟเวอร์ของฉันที่ใช้ Apache Httpd แต่ละเว็บไซต์มีโดเมนของตัวเองหรือโดเมนย่อยและโฮสต์เสมือน ดังนั้นฉันไม่จำเป็นต้องรูทเอกสารเริ่มต้น มันเป็นไปได้ที่จะปิดการใช้งานDocumentRoot
ใน/etc/httpd/conf/httpd.conf
?
คำตอบ:
ขอบคุณสำหรับคำตอบอื่น ๆ ฉันแก้ไขมันโดยการเพิ่มโฮสต์เสมือนเริ่มต้นโดยไม่มีสิทธิ์ใด ๆ ส่วนกลาง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
แทน
ใช่และไม่.
คุณสามารถแสดงความคิดเห็นหรือลบDocumentRoot
คำสั่งไม่มีปัญหา แต่นั่นก็ไม่ประสบความสำเร็จเท่าไหร่เพราะจากนั้นมันจะเป็นค่าเริ่มต้นไปยังไดเรคทอรีเริ่มต้นPREFIX/htdocs/
ที่ตั้งค่า PREFIX ไว้เมื่อคุณสร้าง apache
เมื่อคุณมี VirtualHosts ตั้งค่าคำขอทั้งหมดที่ไม่ได้รับการจัดการโดยโฮสต์เสมือนที่กำหนดไว้อย่างชัดเจนได้รับการจัดการโดย virtualhost เริ่มต้น (ซึ่งโดยปกติจะเป็นโฮสต์แรก แต่httpd -S
จะบอกคุณ)
ไฟล์การกำหนดค่า 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
ใน /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 ที่ตรงกับการจับคู่ที่เฉพาะเจาะจงมากที่สุดและการรวมกันของพอร์ต
เพียงเปลี่ยนพอร์ตเริ่มต้นเป็น:
Listen 80
Listen 8080 # any fake port
และปล่อย * .80 ใน VirtualHost
ได้ผลสำหรับฉันกับ Apache2 และ Centos 7
เพื่อปิดการใช้งานหน้านี้เราต้องเปลี่ยนชื่อไฟล์ /etc/httpd/conf.d/welcome.conf เป็นอย่างอื่นหรือคุณสามารถลบได้ถ้าคุณไม่ต้องการ
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
ตรวจสอบให้แน่ใจว่า Apache เริ่มต้นใหม่ (เป็น root) ด้วยคำสั่ง:
systemctl รีสตาร์ท httpd