web-dev-qa-db-fra.com

Quelle structure de répertoires est généralement utilisée pour les domaines et sous-domaines sur un serveur Linux Apache

Bien que j'utilisais auparavant MAMP et AMPPS sur OSX, à des fins de test, cette question concerne les sites Web réels de production sur des serveurs Apache.

Si j'avais le nom de domaine www.example.com - s'il s'agissait d'un Apache installé sous Sudo, apt-get sous Linux (peut-être Debian ou Ubuntu) et non via une interface graphique comme MAMP ou AMPP, ne serait-il pas sous /var/www/public_html/www.example.com ou serait-ce /var/www/public_html/example

/var/www/public_html/yoururlhere est-il le type d'installation le plus courant sur les serveurs Linux?

Cependant, pourrait-il également s'agir de /var/www/www.example.com ou /var/www/example?

Si je devais avoir un sous-domaine, par exemple, http://canada.example.com, serait-il:

/var/www/public_html/example/canada

ou

/var/www/public_html/www.example.com/canada

Pour une URL telle que http://www.example.com/~site1 serait-il /var/www/public_html/example/site1 ou aurait-il besoin d'une forme de mod_rewrite?

En général, quelle est la façon la plus conventionnelle de procéder de la sorte pour les URL utilisant Apache sur des hôtes Linux, en particulier les grandes entreprises d’hébergement Web?

5
avenas8808

ne serait-ce pas sous /var/www/public_html/www.example.com ou serait-ce/var/www/public_html/example

Il s’agit d’un appel tout à fait personnel, dans la mesure où il n’a (dans tous les cas génériques) aucune conséquence technique, à la fois pour le chemin d’ancrage que vous choisissez et pour la configuration de ses éléments.

Il appartient donc à l'administrateur de décider quoi faire. Quelques considérations à prendre en compte pour choisir le schéma optimal:

  • comment les autorisations sont gérées? un utilisateur a accès à tous les sites Web ou un par site Web? Comment sont-ils consultés: ssh, sftp, ftp, etc.
  • comment fonctionnent les sites web? tous sous le même compte utilisateur httpd ou Apache, ou avez-vous un compte système distinct par site Web?
  • comment sont gérées les sauvegardes? Est-il nécessaire de faire quelques fins (un seul site Web) au lieu de tout ensemble
  • volumes de données et quotas: à un moment donné, tous les sites Web du même hôte rivaliseront pour l'accès aux E/S et le processeur. Par conséquent, si vous souhaitez passer d'un hôte à un autre, quel type de copie vous devez effectuer.

Et juste ce qui "lit" plus naturellement et la possibilité, par exemple, d'utiliser l'auto-complétion sur le nom du site Web s'il existe tel quel en tant que répertoire sur le système de fichiers.

Dans l'hébergement virtuel "de masse", vous pouvez même trouver d'autres schémas:

  • inversion des étiquettes dans un domaine (car les noms de domaine sont lus de droite à gauche): /var/www/public_html/com/example/canada, /var/www/public_html/com/example/www etc.

  • pour éviter trop de fichiers/répertoires dans un répertoire donné (car les systèmes de fichiers ne gèrent pas bien ce cas), effectuez une sorte de hachage, basé souvent sur le point précédent, car sinon vous commencerez fréquemment par www. assez discriminant: /srv/web/example/f/i/www.first.example, /srv/web/example/s/e/www.second.example, /srv/web/example/t/h/www.third.example, etc. (pour les sites Web www.first.example, www.second.example, www.third.example, etc.)

Je suis sûr que vous pouvez imaginer d'autres schémas. Si les sites Web sont gérés par un type de panneau, le panneau peut lui-même venir avec sa propre façon d'organiser les choses sur le système de fichiers.

Pour une URL telle que http://www.example.com/~site1

Généralement, un Apache standard sous Unix utilise ~ comme élément très spécifique du chemin, et ceci est géré par mod_userdir pour mapper généralement l'URL précédente sur /home/site1/public_html si site1 est un utilisateur Unix sur la boîte. Mais tout dépend de la configuration Apache ...

Voir https://httpd.Apache.org/docs/2.4/mod/mod_userdir.html

2
Patrick Mevzek

Les sites Web peuvent être desservis à partir de n'importe quel répertoire. J'ai vu /var/www, /srv/www et /home/username entre autres. Selon ce fil , le répertoire srv est destiné aux "données servies par ce système", donc cela semble logique. C’est ce que j’utilise normalement de nos jours, mais je pense que /var/www est toujours le plus répandu.

En termes d’hébergement de plusieurs sites, la procédure standard consiste à utiliser un répertoire distinct pour chaque site, souvent avec un sous-répertoire ‘public’ dans chacun d’eux. Ils peuvent être nommés comme domaine ou autre chose qui vous aide à les distinguer. Ainsi, par exemple, /var/www/example.com/public et /var/www/sub.example.com/public

Selon les sites que vous hébergez, vous pouvez utiliser des répertoires distincts pour les journaux. Vous pouvez utiliser plusieurs répertoires, tels que /var/log/Apache2/example.com, ou créer un répertoire de journaux à côté de votre répertoire public, c.-à-d. /var/www/example.com/logs.

1
DisgruntledGoat

Cela peut être un peu difficile de répondre à une question. Je suis heureux de voir Ubuntu dans la question. Cependant, ce qui manque, c'est si l'hébergement sera utilisé ou même un panneau de configuration. C'est là que ça devient délicat. Laisse-moi expliquer.

Il y a quelques années, à peu près au moment de la sortie d'Apache 2.0, un changement structurel a été apporté, qui ne s'est pas toujours matérialisé. Auparavant, toutes les configurations de site étaient placées dans httpd.conf, qui était la configuration d’Apache lui-même. Ce n'était pas nécessairement mauvais, cependant, un changement positif a été apporté à la configuration destinée à être plus sécurisée et plus simple à gérer. Il y avait et il y a toujours deux problèmes avec ce changement. Premièrement, Apache n’a pas conçu les versions des différents systèmes d’exploitation, et deuxièmement, tous les panneaux de contrôle n’ont pas suivi les meilleures pratiques de l’époque ni n’ont changé.

Par exemple, Ubuntu a implémenté la mise à jour du schéma de configuration alors que Redhat ne l’a pas fait. Du côté du panneau de commande, Webmin/Virtualmin a mis à jour le schéma de configuration, contrairement à cPanel. Voyez où je vais?

CPanel est utilisé universellement pour l'hébergement. C'est regrettable, car nous nettoyons souvent le bazar ici. Pour la plupart des hébergeurs, leurs sites rencontrent des problèmes de sécurité et des problèmes opérationnels qui ne devraient jamais exister.

Comme je n'utilise que Ubuntu, je peux vous dire que l'installation d'Apache est bonne et qu'elle le restera si vous utilisez également Webmin ou Virtualmin. Cependant, si vous choisissez d'utiliser cPanel, la configuration d'Apache sera aussi mauvaise que possible. Si vous choisissez de ne pas utiliser de panneau de configuration, tout va bien.

Voici ce qui se passe.

Les installations Redhat et cPanel créeront un espace Web dans/var/httpd/html ou dans/var/www/public_html. Parfois, ce répertoire sera sur une partition qui est petite, suivant les anciennes traditions lorsque les sites étaient petits. Ce n'est pas toujours le cas, cependant, j'ai souvent constaté qu'un opérateur de site manquait rapidement et facilement d'espace disque.

Les installations appropriées créeront un site par défaut dans le répertoire/home/ou dans le répertoire/var/www/avec des fichiers de configuration individuels pour chaque site sous/etc/Apache2/sites-available/et/etc/Apache2/sites-enabled /. Le fichier de configuration par défaut est 000-default.conf, ce qui devrait être en grande partie laissé seul. La raison en est de créer un site fourre-tout qui gère toutes les demandes IP et les demandes de domaines qui n'existent pas sur le serveur. Le fichier 000-default.conf peut être copié pour créer un nouveau site. En règle générale, le format de nom de fichier serait example.com.conf et créé dans le répertoire sites-available.

En ce qui concerne l’espace Web, il doit correspondre au fichier de configuration tel que /home/example.com/ ou /var/www/example.com. Je n'aime pas utiliser le répertoire/var/www/pour des sites individuels. Souvent, vous entrez dans des conflits d'autorisations. Enregistrez/var/www/html pour le site par défaut si c'est ce que vous avez. Sinon, si vous êtes habitué à définir des autorisations, je vous suggère d'utiliser le répertoire/home/qui ne présentera pas de conflits d'autorisations.

Bien sûr, vous aurez besoin de Sudo a2ensite example.com.conf pour activer correctement le site, puis redémarrez Apache avec Sudo service Apache2 restart.

Alors, qu'est-ce qui ne va pas avec/var/www /? Apache s'exécute avec des autorisations spécifiques qui devraient exister dans l'ensemble de l'arborescence. Si, par exemple, nous suivons ce que fait cPanel, votre premier site est créé sous/var/www/public_html /, ce qui en soi n’est pas mauvais. Cependant, le site suivant est créé sous/var/www/public_html/example /, ce qui le rend disponible en tant que répertoire du premier site créé en tant que www.firstsite.com/example/. Mal. Très mauvais. En outre, tous les sites sont exécutés sous un seul utilisateur, l'utilisateur par défaut d'Apaches, qui peut prendre plusieurs noms, notamment root. Il est rare que la racine soit utilisée. Ce devrait vraiment être un utilisateur non privilégié.

Lorsque vous segmentez des sites dans des répertoires totalement séparés dans un répertoire autre que/var/www /, chaque site peut être exécuté sous différents utilisateurs ajoutés au groupe utilisé par Apache. C'est le sandboxing comme mentionné dans les commentaires. Le fait de ne laisser que le site par défaut vous permet de multiplier les mauvaises requêtes dans le bac à sable, y compris les attaques intentionnelles.

Par exemple les configurations, j'en ai quelques unes dans cette réponse. config Virtualhost: routage et utilisation de wildcard Celles-ci ne sont pas controversées et devraient bien fonctionner en supposant que vous n'ayez rien fait de mal.

1
closetnoc