Buat server Apache hanya menerima permintaan ke domain daripada IP

9

Saya memiliki server CentOS yang menjalankan Apache 2.2.15. Jika alamat IP server adalah 198.51.100.4 dan saya menulis di browser http://198.51.100.4 itu masuk di situs web saya.

Saya ingin mencegah ini. Saya ingin situs web saya hanya dapat diakses di FQDN yaitu http://example.com/ .

Bagaimana saya bisa mengkonfigurasi server saya sehingga situs web tidak dapat diakses ketika saya mengunjungi alamat IP?

antiks
sumber
2
Kemungkinan duplikat dari Apache menerima permintaan ke server lain?
Jenny D
Meskipun pertanyaannya tidak cocok dengan duplikat yang saya tautkan, jawaban untuk pertanyaan itu juga merupakan jawaban untuk pertanyaan ini.
Jenny D
Saya ingin tahu mengapa Anda melakukan itu. membalikkan DNS adalah suatu hal.
njzk2

Jawaban:

7

Anda dapat menggunakan Alias *untuk menangkap trafik lain selain yang diizinkan di host virtual Anda, untuk ini Anda harus menggunakan posisi terakhir host virtual dengan *alias.

Seperti itu, hanya domain yang ditentukan yang akan dilayani.

<VirtualHost *:80>
ServerName mywebsite.com
DocumentRoot /var/www/default
...
</VirtualHost>

<VirtualHost *:80>
ServerName another.mywebsite.com
DocumentRoot /var/www/another
...
</VirtualHost>

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
# [ Cancel trafic ]
RewriteRule .* - [END,R=406]
# [ Custom Log ]
CustomLog ${APACHE_LOG_DIR}/other.log combined
</VirtualHost>

Dalam contoh saya hanya mywebsite.com & yang lain. Mywebsite.com akan diizinkan, semua domain atau IP lainnya akan memiliki trafik dibatalkan.

Untuk membatalkan lalu lintas Anda dapat menggunakan pengalihan ke -dan kemudian menambahkan kode kesalahan, misalnya saya menggunakan RewriteRule untuk mengarahkan ke 406 Tidak Dapat Diterima ( R=406).

Di sini Anda dapat menemukan daftar kode arahan: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

Froggiz
sumber
Terima kasih! Saya mencoba metode Anda dan berhasil. Tapi saya sedikit berubah. Saya membuat virtualhost baru dan saya menempatkan sebagai ServerName alamat IP server + RewriteRule :)
antiks
11

Anda dapat menambahkan host virtual default yang hanya memberikan kesalahan "ditolak", atau apa pun. Ketika browser kemudian datang ke server web Anda tanpa host di URL yang cocok dengan apa pun ServerNameatau ServerAliasbaris di host virtual lain akan dilayani oleh host virtual default.

Jadi dalam konfigurasi apache Anda:

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/default
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName mywebsite.com
    ...
</VirtualHost>
Wurtel
sumber
1

Anda memerlukan aturan penulisan ulang seperti ini:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]
Kobus
sumber
Ini tidak melakukan apa yang diminta OP.
Lightness Races in Orbit