Wie aktiviere ich alle Site-Confs mit a2ensite (während ich 000-default.conf && default-ssl.conf übergebe)?

11

Ich verwende den Ubuntu-Server 16.04.2 mit Apache2, auf dem ich meine persönlichen Websites speichere.

Um alle meine conf-Dateien unter /etc/apache2/sites-available(außer 000-default.confund ssl-default.conf) zu aktivieren , ging ich zu /var/www/htmlund führte aus a2ensite.

Mir wurde dann gesagt:

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)?

Ich habe dann Ctrl+ versucht C, etwas anderes auszuführen.

Ich suche nach einer Möglichkeit, alle Site-Confs automatisch zu aktivieren, ohne eine bestimmte zu notieren. Ich möchte nur einen Befehl ausführen, der alle Site-Confs aktiviert, die ich selbst hinzugefügt habe.

JohnDoea
quelle

Antworten:

19

Verwenden Sie auch einfach find in Ihrem Konfigurationsverzeichnis.

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

Dadurch werden alle Ihre Konfigurationsdateien gefunden, deren Name nicht "Standard" enthält, und sie werden aktiviert.

Ziazis
quelle
1
Sie sollten auch nach Dateien mit einer *.confErweiterung suchen . Oder a2ensite würde sich beschweren, dass die Seite nicht existiert
Dan
@Dan nicht erforderlich, da wir im conf-Verzeichnis suchen.
Ziazis
Ich denke, diese Methode eignet sich grundsätzlich auch für die Erstellung von Nginx-Sblocks, nicht nur für Apache Vhosts.
JohnDoea
8

Sie müssen zu /etc/apache2/sites-availabledem Befehl navigieren und ihn dann ausführen:

sudo a2ensite *

Es werden alle Sites im Verzeichnis aktiviert. (Die Dateien sollten so etwas wie xxx.conf sein.)

Und dann Apache mit neu laden sudo service apache2 reload.

Ihre Befehlssequenz sollte also so aussehen:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload
Shakti Phartiyal
quelle
Dies aktiviert auch die conf-Datei default-ssl.conf... Dies geht aus der Ausgabe hervorEnabling site default-ssl.
JohnDoea
Sie können verwenden, dpkg -Sum festzustellen, ob die Konfigurationsdatei aus einem Paket stammt.
Muru
1

Kopieren Fügen Sie die folgenden Zeilen in den Dateinamen ein apache_enable.sh

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

Geben Sie den Befehl read + execute an apache_enable.shund führen Sie das Skript mit dem Root-Benutzer aus

Krishna Chalise
quelle
1

Unabhängig von unserem aktuellen Speicherort versucht der Befehl sudo a2ensite "*.conf", alle darin abgelegten Konfigurationsdateien zu aktivieren /etc/apache2/sites-available/.

Als nächstes können wir a2dissite 000-default.conf default-ssl.confdie Standardkonfigurationen von Apache deaktivieren und dann systemctl restart apache2.serviceneu starten.

Wir können dies alles wie einen einzigen Befehl ausführen:

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

Darüber hinaus können wir einen benutzerdefinierten Befehl über eine Funktion in bash erstellen:

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

Jetzt haben wir den Befehl , der für diesen Job entwickelt wurde. Um diesen Befehl dauerhaft zu machen, müssen wir die obigen Zeilen am Ende der Datei platzieren und dann . Das nächste einfache Skript führt diese Aufgabe aus: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
quelle
Die erste Zeile ist nicht wahr. Der *Platzhalter wird erweitert, bevor er a2ensitein meinem Fall an den Befehl übergeben wird. Dies funktioniert jedoch sudo a2ensite "*.conf".
Dan
Hallo, @Dan, in meinem Fall (Ubuntu 16.04.2) funktioniert es ohne Anführungszeichen richtig. Ich habe die Antwort jedoch aktualisiert. Können Sie überprüfen, ob a2ensite '*.conf'Ihr System ordnungsgemäß funktioniert?
pa4080
1
Ja, es funktioniert, ich bin übrigens auf Ubuntu 17.04.
Dan
0

Durch a2ensite /var/www/html/*/die Ausführung aktiviert Apache jede Site-Conf, die denselben Namen wie das Site- Verzeichnis hat .

Als Nebeneffekt wird auch versucht, Site-Verzeichnisse abzugleichen, die nicht mit Site-Conf-Dateien übereinstimmen, wie aus der folgenden Ausgabe vorhergesagt, aber ich denke, dies kann sicher ignoriert werden:

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!

Sie müssen Apache wahrscheinlich neu starten, nachdem Sie conf-Dateien aktiviert haben:

systemctl restart apache2.service
JohnDoea
quelle
1
Ich bin nicht sicher, aber warum befindet sich Ihre Site-Konfiguration im Webroot-Ordner? Versuchen Sie, den /etc/apache2/sites-availableOrdner für Konfigurationen für Ihre Sites zu verwenden. Sobald Sie sie über a2ensite aktivieren, werden sie automatisch mit verknüpft /etc/apache2/sites-enabled. Was Sie gerade tun, ist ziemlich seltsam und jeder, der Zugriff auf Ihren Webserver hat, kann Ihre Konfigurationen überprüfen?
Ziazis
Hallo @Ziazis. Ich verstehe wirklich nicht, warum Sie mich überhaupt fragen: "Jeder, der Zugriff auf Ihren Webserver hat, kann Ihre Konfigurationen überprüfen." Ich bin der einzige, der den Server benutzt. Wenn ich nicht wäre, hätten andere Benutzer normalerweise keinen Zugriff auf das Dokumentstammverzeichnis. Können Sie bitte klarstellen, warum Sie das fragen und was genau Sie falsch finden?
JohnDoea
Ich bin mir nicht sicher, wofür Sie diesen Webserver verwenden. Wenn es sich jedoch um ein Live-System mit einem Zugriff handelt, auf den Dritte zugreifen können, möchten Sie nicht, dass Ihre Konfigurationsdateien darin liegen, /var/www/htmlda dies der DocumentRoot der default.htmlSite ist. In deinem Fall scheinen Sie also die Konfigurationen dort auszuführen ... Es ist, als würde man mit offenem Mund essen, tu das nicht ;-).
Ziazis
Ich verstehe nicht Sie denken, ich habe die conf-Dateien im Dokumentenstamm abgelegt? Weil ich es nicht getan habe. Sie schlagen mir vor, sie dort abzulegen? Ich möchte das vermeiden ... Ich möchte nur alle aktivieren, die nicht 000-default und default-ssl sind. Übrigens benutze ich den Webserver, um meine persönlichen Websites zu speichern.
JohnDoea
Ah, ich verstehe - Sie haben alle Ihre RootDirectories genauso benannt wie Ihre Konfigurationsdateien. Und hier dachte ich, Sie haben Ihre apache2-Konfiguration geändert, um sie /var/www/htmlals Konfigurationsordner zu haben . Nvm dann. Was Sie tatsächlich brauchen, ist nur einfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis
0

Verschieben Sie die Standardkonfigurationen in einen anderen Ordner, und dann sollte das * für Sie so funktionieren, wie Sie es möchten.

Wechseln Sie in den Ordner "sites-available", da dieser nur in diesem Ordner funktioniert.

cd / etc / apache2 / sites-available /

sudo a2ensite *

geprüft

Carobell
quelle
AFAIK, können Sie dies von überall im System aus tun, wenn Sie dokumentieren, dass root / var / www / html ist?
JohnDoea
Der wichtige Teil ist der Ordner / etc / apache2_or_other / sites-available. Das Dokumentstammverzeichnis wird dann in dieser Konfiguration verknüpft. Sie könnten Ihr Stammverzeichnis in / usr / share / htlm haben und es würde nichts ändern, außer wenn Sie es nicht in die conf-Datei geschrieben hätten. Ich kann mich überall auf meinem Server befinden, solange sich die conf-Dateien im Ordner "sites-available" befinden. A2ensite erledigt seine Arbeit.
Carobell
Bearbeitet meine Antwort als die erste Option funktioniert nicht getestet
Carobell