Comment activer toutes les confs du site avec a2ensite (en passant plus de 000-default.conf && default-ssl.conf)?

11

J'utilise le serveur Ubuntu 16.04.2 avec Apache2, sur lequel je stocke mes sites Web personnels.

Pour activer tous mes fichiers de conf sous /etc/apache2/sites-available(en plus de 000-default.confet ssl-default.conf), je suis allé /var/www/htmlet exécuté a2ensite.

On m'a alors dit:

Your choices are: 
000-default default-ssl domain.tld1 domain.tld2 domain.tld3 domain.tld4 
Which site(s) do you want to enable (wildcards ok)?

J'ai ensuite fait Ctrl+ Cvisant à exécuter autre chose.

Je cherche un moyen d'activer automatiquement toutes les confs de site, sans en noter une en particulier --- Je veux juste exécuter une commande qui activera toutes les confs de site que j'ai moi-même ajoutées.

Zanna
la source

Réponses:

18

Pourrait aussi bien utiliser find sur votre répertoire de configuration.

find /etc/apache2/sites-available/ -type f -and -not -name "*default*" -exec a2ensite {} \;

Cela trouve tous vos fichiers de configuration qui n'ont pas "par défaut" dans leur nom et les active.

Ziazis
la source
1
Vous devez également rechercher les fichiers qui ont une *.confextension. Ou bien a2ensite se plaindrait que le site n'existe pas
Dan
@Dan pas nécessaire car nous recherchons dans le répertoire conf.
Ziazis
Je suppose que cette méthode est également bonne, par principe, lors de la création de Nginx Sblocks, et pas seulement pour les Apache Vhosts.
8

Vous devez accéder à /etc/apache2/sites-available, puis exécuter la commande:

sudo a2ensite *

Il activera tous les sites du répertoire. (les fichiers devraient ressembler à xxx.conf)

Et puis rechargez apache en utilisant sudo service apache2 reload.

Donc, votre séquence de commandes devrait ressembler à ceci:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload
Shakti Phartiyal
la source
Cela active également le fichier conf default-ssl.conf... Cela ressort clairement de la sortieEnabling site default-ssl.
Vous pouvez utiliser dpkg -Spour voir si le fichier de configuration provient d'un package.
muru
1

Quel que soit notre emplacement actuel, la commande sudo a2ensite "*.conf"tentera d'activer tous les fichiers de configuration placés dans /etc/apache2/sites-available/.

Ensuite, nous pouvons utiliser a2dissite 000-default.conf default-ssl.confpour désactiver les configurations par défaut d'Apache, puis nous pouvons utiliser systemctl restart apache2.servicepour le redémarrer.

Nous pouvons exécuter tout cela comme une seule commande:

sudo bash -c "a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service"

Quelque chose de plus, nous pouvons créer une commande personnalisée via une fonction dans bash:

function a2ensites {
        sudo bash -c "a2ensite '*.conf' && a2dissite 000-default default-ssl && systemctl restart apache2.service"
}
export -f a2ensites

Nous avons maintenant la commande , conçue pour faire ce travail. Pour rendre cette commande permanente, nous devons placer les lignes ci-dessus au bas du fichier et ensuite . Le script simple suivant accomplira cette tâche:a2ensites~/.bashrcsource

 printf "\nfunction a2ensites { \n\tsudo bash -c \"a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service\" \n}\nexport -f a2ensites\n" | tee -a $HOME/.bashrc; source $HOME/.bashrc
pa4080
la source
La première ligne n'est pas vraie. Le *caractère générique est en cours d'extension avant d'être transmis à la a2ensitecommande dans mon cas. Cependant, cela fonctionne sudo a2ensite "*.conf".
Dan
Salut, @Dan, dans mon cas (Ubuntu 16.04.2) cela fonctionne correctement sans guillemets. Cependant, j'ai mis à jour la réponse. Pourriez-vous vérifier si a2ensite '*.conf'fonctionne correctement dans votre système?
pa4080
1
Oui ça marche, je suis sur Ubuntu 17.04 btw.
Dan
0

L'exécution a2ensite /var/www/html/*/fera qu'Apache activera chaque conf de site qui porte le même nom que le répertoire du site.

Comme effet secondaire, il essaiera également de faire correspondre les répertoires du site qui ne correspondent pas aux fichiers de configuration du site, comme prévu à partir de la sortie suivante, mais je pense que cela peut être ignoré en toute sécurité:

ERROR: Site /var/www/html/domain.tld1 does not exist!
ERROR: Site /var/www/html/domain.tld2 does not exist!
ERROR: Site /var/www/html/nice_directory does not exist!
ERROR: Site /var/www/html/nice_file does not exist!

Vous devrez probablement redémarrer Apache après avoir activé les fichiers de conf:

systemctl restart apache2.service

la source
1
Je ne suis pas sûr, mais pourquoi la configuration de votre site se trouve-t-elle dans le dossier webroot? Essayez d'utiliser le /etc/apache2/sites-availabledossier pour les configurations de vos sites. Une fois que vous les activez via a2ensite, ils sont automatiquement liés à /etc/apache2/sites-enabled. Ce que vous faites en ce moment est assez bizarre et tous ceux qui ont accès à votre serveur Web peuvent examiner vos configurations?
Ziazis
Salut @Ziazis. Je ne comprends vraiment pas, pourquoi vous me demandez même "tous ceux qui ont accès à votre serveur web peuvent regarder vos configurations?" Je suis le seul à utiliser le serveur; Si ce n'était pas le cas, les autres utilisateurs n'auraient généralement pas accès à la racine du document. Quoi qu'il en soit, pouvez-vous préciser pourquoi vous posez cette question et qu'est-ce que vous trouvez exactement faux?
Eh bien, je ne sais pas pourquoi vous utilisez ce serveur Web. Cependant, s'il s'agit d'un système en direct avec un accès qui est accessible par un tiers, vous ne voulez pas que vos fichiers de configuration se trouvent, /var/www/htmlcar c'est le DocumentRoot du default.html-Site. Donc, dans votre cas, vous semblez exécuter les configurations là-dedans ... C'est comme manger avec la bouche ouverte, ne faites pas ça ;-).
Ziazis
Je ne comprends pas. Vous pensez que j'ai mis les fichiers de conf à la racine du document? Parce que je ne l'ai pas fait. Vous me proposez de les mettre là-bas? Je voudrais éviter cela ... Je veux juste activer tous ceux qui ne sont pas 000-default et default-ssl. BTW, j'utilise le serveur Web pour stocker mes sites Web personnels.
Ah, je vois - vous avez nommé tous vos RootDirectories de la même manière que vos fichiers de configuration. Et ici, je pensais que vous avez changé votre configuration apache2 pour avoir /var/www/htmlcomme dossier de configuration. Tant pis alors. Ce dont vous avez réellement besoin est juste unfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis
0

copier coller les lignes suivantes dans le nom du fichier apache_enable.sh

cd /etc/apache2/sites-available/
a2ensite *
service apache2 reload

et donner la commande read + execute apache_enable.shet exécuter le script en utilisant l'utilisateur root

Krishna Chalise
la source
0

Déplacez les configurations par défaut vers un autre dossier, puis * devrait fonctionner pour vous comme vous le souhaitez.

Allez dans le dossier "sites-available" car il ne fonctionne que dans ce dossier.

cd / etc / apache2 / sites-available /

sudo a2ensite *

testé

Carobell
la source
AFAIK, vous pourriez le faire de n'importe où dans le système lorsque vous documentez la racine est / var / www / html?
La partie importante est le dossier / etc / apache2_or_other / sites-available. La racine du document est ensuite liée dans cette configuration. Vous pourriez avoir votre racine dans / usr / share / htlm et cela ne changerait rien sauf si vous ne l'écriviez pas dans le fichier conf. Je peux être n'importe où sur mon serveur, tant que les fichiers conf se trouvent dans le dossier des sites disponibles, a2ensite fera son travail.
Carobell
Modifié ma réponse car la première option ne fonctionne pas testée
Carobell