Comment désactiver la racine de document par défaut dans Apache?

13

J'héberge des sites Web sur mon serveur exécutant Apache Httpd. Chaque site Web possède son propre domaine ou sous-domaine et son hôte virtuel. Par conséquent, je n'ai besoin d'aucune racine de document par défaut. Est-il possible de désactiver DocumentRootdans /etc/httpd/conf/httpd.conf?

danijar
la source

Réponses:

10

Merci pour les autres réponses. Je l'ai résolu en ajoutant un hôte virtuel par défaut sans aucune autorisation. Les options globales DocumentRootet ServerNamedoivent correspondre à celles spécifiées dans l'hôte virtuel.

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

De cette façon, j'obtiens un message interdit 403 lorsque le serveur est directement accessible par son ip, ce qui est exactement ce que je voulais. Ce serait encore mieux si je n'avais pas besoin d' /var/www/htmlun répertoire existant pour cela, mais Apache se plaint si je spécifie quelque chose comme à la /dev/nullplace.

danijar
la source
6

Je ne suis pas sûr que tu veuilles faire ça. S'il n'y a pas de vhost par défaut dans une configuration apache, le premier vhost défini devient le défaut .

Tout ce que vous devez vraiment faire, c'est que la valeur par défaut serve une page vierge.

user9517
la source
6

Oui et non.

Vous pouvez commenter ou supprimer la DocumentRootdirective, pas de problème. Mais cela n'obtient pas grand-chose, car il sera par défaut dans le répertoire par défaut PREFIX/htdocs/où PREFIX est défini lorsque vous construisez apache.

Lorsque VirtualHosts a configuré toutes les demandes qui ne sont pas traitées par un hôte virtuel explicitement configuré, elles sont gérées par le virtualhost par défaut (qui est généralement le premier, mais httpd -Svous le dira).

HBruijn
la source
1

Tout fichier de configuration Apache avec l'extension .confsituée à l'intérieur /etc/httpd/conf.d/sera inclus dans le cadre de la configuration Apache. Ainsi, pour désactiver la configuration par défaut de la page "Bienvenue", nous devons renommer sa configuration/etc/httpd/conf.d/welcome.conf:

Étape 1 Déplacer le fichier de bienvenue par défaut:

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

Étape 2: redémarrer le service Appache2

sudo systemctl restart httpd
Usman Ali Maan
la source
0

Dans votre /etc/httpd/conf/httpd.conf, si votre directive Listen est

Listen 80

C'est méchant

*:80

Vous avez défini un couple <listener>+ <servename>dans vos /etc/httpd/conf/httpd.conf et /etc/httpd/conf.d/default.conf qui sont les mêmes: *:80+ <server-ip>. Donc, Apache n'en prend qu'un en compte.

Donc, votre configuration vhost est inutile.

Votre /etc/httpd/conf/httpd.conf est suffisant pour bloquer l'accès à votre répertoire / var / www / html.

Ajoutez simplement:

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

Veuillez lire https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :

Comment le serveur sélectionne l'hôte virtuel basé sur le nom approprié

Il est important de reconnaître que la première étape de la résolution d'hôte virtuel basée sur le nom est la résolution basée sur IP. La résolution d'hôte virtuel basée sur le nom ne choisit l'hôte virtuel basé sur le nom le plus approprié qu'après avoir restreint les candidats à la meilleure correspondance basée sur IP. L'utilisation d'un caractère générique (*) pour l'adresse IP dans toutes les directives VirtualHost rend ce mappage basé sur IP non pertinent.

Lorsqu'une demande arrive, le serveur trouvera le meilleur argument de correspondance (le plus spécifique) en fonction de l'adresse IP et du port utilisés par la demande. S'il existe plusieurs hôtes virtuels contenant cette combinaison d'adresse et de port la mieux adaptée, Apache comparera davantage les directives ServerName et ServerAlias ​​au nom de serveur présent dans la demande.

Si vous omettez la directive ServerName de tout hôte virtuel basé sur le nom, le serveur utilisera par défaut un nom de domaine complet (FQDN) dérivé du nom d'hôte du système. Ce nom de serveur défini implicitement peut conduire à une correspondance d'hôte virtuel contre-intuitive et est déconseillé.

Le vhost basé sur le nom par défaut pour une combinaison IP et port Si aucun ServerName ou ServerAlias ​​correspondant n'est trouvé dans l'ensemble d'hôtes virtuels contenant l'adresse IP et la combinaison de ports correspondants les plus spécifiques, alors le premier hôte virtuel répertorié qui correspond à celui qui sera utilisé.

Jordan LE NUFF
la source
0

Changez simplement le port par défaut en:

Listen 80
Listen 8080 # any fake port

et laissez * .80 dans VirtualHost

Fonctionne pour moi avec Apache2 et Centos 7

Plus d'exemples que vous pouvez trouver dans la documentation . Jetez un oeil à la variable _default_.

Vasin Yuriy
la source
0

Pour désactiver cette page, nous devons renommer le fichier /etc/httpd/conf.d/welcome.conf en quelque chose d'autre ou vous pouvez simplement le supprimer si vous n'en avez pas besoin.

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

Assurez-vous qu'Apache est redémarré (en tant que root) avec la commande:

systemctl restart httpd

Sukhjinder Singh
la source