Odpowiedzi:
Dziękuję za inne odpowiedzi. Rozwiązałem go, dodając domyślnego wirtualnego hosta bez żadnych uprawnień. Globalny DocumentRoot
i ServerName
opcje muszą pasować do tych określonych w wirtualnym hoście.
/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>
W ten sposób otrzymuję komunikat 403 Forbidden, gdy serwer uzyskuje bezpośredni dostęp do adresu IP, co jest dokładnie tym, czego chciałem. Byłoby jeszcze lepiej, gdybym nie potrzebował /var/www/html
do tego istniejącego katalogu, ale Apache narzeka, jeśli podam coś takiego /dev/null
.
Nie jestem pewien, czy chcesz to zrobić. Jeśli nie ma domyślnego vhosta w konfiguracji apache, pierwszy zdefiniowany vhost staje się domyślnym .
Wszystko, co naprawdę musisz zrobić, to ustawić domyślnie pustą stronę.
Tak i nie.
Można wykomentowac do DocumentRoot
dyrektywy, nie ma problemu. Ale to niewiele osiąga, ponieważ wtedy domyślnie zostanie ustawiony domyślny katalog, w PREFIX/htdocs/
którym ustawiony jest PREFIX podczas budowania apache.
Gdy skonfigurujesz VirtualHosts, wszystkie żądania, które nie są obsługiwane przez jawnie skonfigurowanego hosta wirtualnego, są obsługiwane przez domyślnego hosta wirtualnego (który zazwyczaj jest pierwszym, ale httpd -S
ci to powie).
Każdy plik konfiguracyjny Apache z rozszerzeniem .conf
znajdującym się w nim /etc/httpd/conf.d/
zostanie dołączony jako część konfiguracji Apache. Dlatego, aby wyłączyć domyślną konfigurację strony powitalnej, musimy zmienić jej nazwę/etc/httpd/conf.d/welcome.conf:
Krok pierwszy przenieś domyślny plik powitalny:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
Krok drugi uruchom ponownie usługę Appache2
sudo systemctl restart httpd
W twojej /etc/httpd/conf/httpd.conf, jeśli twoja dyrektywa Listen to
Listen 80
To jest wredne
*:80
Zdefiniowałeś kilka <listener>
+ <servename>
w twoim /etc/httpd/conf/httpd.conf i /etc/httpd/conf.d/default.conf, które są takie same: *:80
+ <server-ip>
. Apache bierze pod uwagę tylko jeden.
Tak więc twoja konfiguracja vhosta nie ma sensu.
Twój plik /etc/httpd/conf/httpd.conf wystarczy, aby zablokować dostęp do katalogu / var / www / html.
Po prostu dodaj:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
Proszę przeczytać na https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :
Jak serwer wybiera odpowiedni host wirtualny oparty na nazwie
Należy pamiętać, że pierwszym krokiem w rozwiązywaniu hosta wirtualnego opartego na nazwie jest rozpoznawanie oparte na protokole IP. Rozpoznawanie hosta wirtualnego na podstawie nazwy wybiera najbardziej odpowiedni host wirtualny na podstawie nazwy po zawężeniu kandydatów do najlepszego dopasowania opartego na adresie IP. Użycie symbolu wieloznacznego (*) dla adresu IP we wszystkich dyrektywach VirtualHost powoduje, że to mapowanie oparte na adresie IP jest nieistotne.
Kiedy nadejdzie żądanie, serwer znajdzie najlepszy (najbardziej konkretny) zgodny argument na podstawie adresu IP i portu używanego przez żądanie. Jeśli istnieje więcej niż jeden wirtualny host zawierający ten najlepiej dopasowany adres i kombinację portów, Apache dokona dalszego porównania dyrektyw ServerName i ServerAlias z nazwą serwera obecną w żądaniu.
W przypadku pominięcia dyrektywy ServerName na dowolnym hoście wirtualnym opartym na nazwie, domyślnym serwerem będzie w pełni kwalifikowana nazwa domeny (FQDN) pochodząca z systemowej nazwy hosta. Ta niejawnie ustawiona nazwa serwera może prowadzić do sprzecznego z intuicją dopasowywania hosta wirtualnego i jest odradzana.
Domyślny vhost oparty na nazwie dla kombinacji adresu IP i portu Jeśli w zestawie hostów wirtualnych zawierających najbardziej konkretny zgodny adres IP i kombinację portów nie znaleziono pasującej nazwy serwera lub nazwy serwera, to pierwszy wymieniony host wirtualny pasuje do tego, który zostanie użyty.
Po prostu zmień domyślny port na:
Listen 80
Listen 8080 # any fake port
i pozostaw * .80 w VirtualHost
Działa dla mnie z Apache2 i Centos 7
Więcej przykładów można znaleźć w dokumentacji . Spójrz na zmienną _default_.
Aby wyłączyć tę stronę, musimy zmienić nazwę pliku /etc/httpd/conf.d/welcome.conf na coś innego lub możesz po prostu usunąć go, jeśli go nie potrzebujesz.
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
Upewnij się, że Apache jest zrestartowany (jako root) za pomocą polecenia:
zrestartuj systemctl httpd