Jak wyłączyć domyślny katalog główny dokumentu w Apache?

13

Na moim serwerze obsługuję strony internetowe z Apache Httpd. Każda witryna ma własną domenę lub subdomenę i wirtualny host. Dlatego nie potrzebuję domyślnego katalogu głównego dokumentu. Czy można wyłączyć DocumentRootw /etc/httpd/conf/httpd.conf?

danijar
źródło

Odpowiedzi:

10

Dziękuję za inne odpowiedzi. Rozwiązałem go, dodając domyślnego wirtualnego hosta bez żadnych uprawnień. Globalny DocumentRooti ServerNameopcje 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/htmldo tego istniejącego katalogu, ale Apache narzeka, jeśli podam coś takiego /dev/null.

danijar
źródło
6

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ę.

użytkownik9517
źródło
6

Tak i nie.

Można wykomentowac do DocumentRootdyrektywy, 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 -Sci to powie).

HBruijn
źródło
1

Każdy plik konfiguracyjny Apache z rozszerzeniem .confznajdują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
Usman Ali Maan
źródło
0

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.

Jordan LE NUFF
źródło
0

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_.

Vasin Yuriy
źródło
0

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

Sukhjinder Singh
źródło