Bagaimana cara menonaktifkan root dokumen default di Apache?

13

Saya meng-host beberapa situs web di server saya yang menjalankan Apache Httpd. Setiap situs web memiliki domain atau sub-domain dan host virtual sendiri. Oleh karena itu, saya tidak memerlukan root dokumen default. Apakah mungkin untuk menonaktifkan DocumentRootdi /etc/httpd/conf/httpd.conf?

danijar
sumber

Jawaban:

10

Terima kasih atas jawaban lainnya. Saya menyelesaikannya dengan menambahkan virtual host default tanpa izin. Opsi global DocumentRootdan ServerNameharus cocok dengan yang ditentukan dalam virtual host.

/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>

Dengan cara ini, saya mendapatkan pesan Terlarang 403 ketika server diakses oleh ip itu langsung, yang persis apa yang saya inginkan. Akan lebih baik jika saya tidak memerlukan /var/www/htmldirektori yang sudah ada untuk itu, tetapi Apache mengeluh jika saya menentukan sesuatu seperti itu /dev/null.

danijar
sumber
6

Saya tidak yakin Anda ingin melakukan itu. Jika tidak ada vhost default di konfigurasi apache, vhost yang ditentukan pertama menjadi default .

Yang perlu Anda lakukan hanyalah memiliki default melayani halaman kosong.

user9517
sumber
6

Iya dan tidak.

Anda dapat mengomentari atau menghapus DocumentRootarahan, tidak ada masalah. Tetapi itu tidak mencapai banyak, karena dengan itu akan default ke direktori default di PREFIX/htdocs/mana PREFIX diatur ketika Anda membangun apache.

Ketika Anda memiliki VirtualHost, atur semua permintaan yang tidak ditangani oleh host virtual yang dikonfigurasi secara eksplisit, ditangani oleh virtualhost default (yang biasanya yang pertama, tetapi httpd -Sakan memberi tahu Anda).

HBruijn
sumber
1

Setiap file konfigurasi Apache dengan ekstensi yang .confberada di dalamnya /etc/httpd/conf.d/akan dimasukkan sebagai bagian dari konfigurasi Apache. Jadi untuk menonaktifkan konfigurasi halaman "Selamat Datang" default, kita perlu mengubah nama konfigurasinya/etc/httpd/conf.d/welcome.conf:

Langkah satu pindahkan file selamat datang default:

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

Langkah kedua layanan reboot Appache2

sudo systemctl restart httpd
Usman Ali Maan
sumber
0

Di /etc/httpd/conf/httpd.conf Anda, jika arahan Dengarkan Anda

Listen 80

Itu kejam

*:80

Anda telah menentukan pasangan <listener>+ <servename>di /etc/httpd/conf/httpd.conf dan /etc/httpd/conf.d/default.conf yang sama: *:80+ <server-ip>. Jadi, Apache hanya memperhitungkan satu.

Jadi, konfigurasi vhost Anda tidak ada gunanya.

/Etc/httpd/conf/httpd.conf Anda sudah cukup untuk memblokir akses ke direktori / var / www / html Anda.

Cukup tambahkan:

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

Silakan baca ke https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :

Bagaimana server memilih host virtual berbasis nama yang tepat

Penting untuk mengenali bahwa langkah pertama dalam resolusi host virtual berbasis nama adalah resolusi berbasis IP. Resolusi host virtual berbasis nama hanya memilih host virtual berbasis nama yang paling tepat setelah mempersempit kandidat menjadi pasangan berbasis IP terbaik. Menggunakan wildcard (*) untuk alamat IP di semua arahan VirtualHost membuat pemetaan berbasis IP ini tidak relevan.

Ketika permintaan datang, server akan menemukan argumen yang cocok (paling spesifik) berdasarkan pada alamat IP dan port yang digunakan oleh permintaan. Jika ada lebih dari satu host virtual yang berisi kombinasi port dan alamat yang paling cocok ini, Apache selanjutnya akan membandingkan arahan ServerName dan ServerAlias ​​dengan nama server yang ada dalam permintaan.

Jika Anda menghilangkan direktif ServerName dari host virtual berbasis nama apa pun, server akan default ke nama domain berkualifikasi lengkap (FQDN) yang berasal dari nama host sistem. Kumpulan nama server yang tersirat ini dapat menyebabkan pencocokan host virtual kontra-intuitif dan tidak disarankan.

Vhost berbasis nama default untuk IP dan kombinasi port Jika tidak ada ServerName atau ServerAlias ​​yang cocok ditemukan dalam set host virtual yang berisi alamat IP dan kombinasi port yang paling spesifik, maka host virtual terdaftar pertama yang cocok dengan yang akan digunakan.

Jordan LE NUFF
sumber
0

Cukup ganti port default ke:

Listen 80
Listen 8080 # any fake port

dan tinggalkan * .80 di VirtualHost

Bekerja untuk saya dengan Apache2 dan Centos 7

Lebih banyak contoh dapat Anda temukan dalam dokumentasi . Lihatlah variabel _default_.

Vasin Yuriy
sumber
0

Untuk menonaktifkan halaman ini, kita harus mengganti nama file /etc/httpd/conf.d/welcome.conf ke sesuatu yang lain atau Anda dapat menghapusnya jika Anda tidak membutuhkannya.

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

Pastikan bahwa Apache direstart (sebagai root) dengan perintah:

systemctl restart httpd

Sukhjinder Singh
sumber