Bagaimana cara mengaktifkan semua situs confs dengan a2ensite (sambil melewati lebih dari 000-default.conf && default-ssl.conf)?

11

Saya menggunakan server Ubuntu 16.04.2 dengan Apache2, di mana saya menyimpan situs web pribadi saya.

Untuk mengaktifkan semua file conf saya di bawah /etc/apache2/sites-available(selain 000-default.confdan ssl-default.conf), saya pergi ke /var/www/htmldan dieksekusi a2ensite.

Saya kemudian diberitahu:

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

Saya kemudian melakukan Ctrl+ Cbertujuan untuk mengeksekusi sesuatu yang lain.

Saya mencari cara untuk secara otomatis mengaktifkan semua conf situs, tanpa memperhatikan yang spesifik --- Saya hanya ingin menjalankan perintah yang akan memungkinkan semua conf situs yang saya tambahkan sendiri.

Zanna
sumber

Jawaban:

18

Mungkin hanya menggunakan find di direktori config Anda.

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

Ini menemukan semua file konfigurasi Anda yang tidak memiliki "default" di namanya dan mengaktifkannya.

Ziazis
sumber
1
Anda juga harus mencari file yang memiliki *.confekstensi. Atau a2ensite akan mengeluh bahwa situs tersebut tidak ada
Dan
@Dan tidak perlu karena kita mencari di direktori conf.
Ziazis
Saya kira metode ini juga bagus, pada prinsipnya, saat membuat Nginx Sblocks, dan tidak hanya untuk Apache Vhosts.
8

Anda harus menavigasi ke /etc/apache2/sites-availabledan kemudian menjalankan perintah:

sudo a2ensite *

Ini akan memungkinkan semua situs dalam direktori. (file harus berupa sesuatu seperti xxx.conf)

Dan kemudian memuat ulang apache menggunakan sudo service apache2 reload.

Jadi urutan perintah Anda harus seperti ini:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload
Shakti Phartiyal
sumber
Ini juga memungkinkan file conf default-ssl.conf... Ini jelas dari outputEnabling site default-ssl.
Anda dapat menggunakan dpkg -Suntuk melihat apakah file konfigurasi berasal dari sebuah paket.
muru
1

Tidak peduli apa lokasi kami saat ini, perintah sudo a2ensite "*.conf"akan berusaha untuk mengaktifkan semua file konfigurasi yang ditempatkan di /etc/apache2/sites-available/.

Selanjutnya kita dapat menggunakan a2dissite 000-default.conf default-ssl.confuntuk menonaktifkan konfigurasi default Apache dan kemudian kita dapat menggunakannya systemctl restart apache2.serviceuntuk me-restart itu.

Kita dapat menjalankan ini semua seperti satu perintah:

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

Sesuatu yang lebih, kita dapat membuat perintah khusus melalui fungsi di bash:

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

Sekarang kita memiliki perintah , yang dirancang untuk melakukan pekerjaan ini. Untuk membuat perintah ini permanen, kita harus menempatkan baris di atas ke bagian bawah file dan kemudian . Skrip sederhana berikutnya akan menyelesaikan tugas ini: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
sumber
Baris pertama tidak benar. The *wildcard sedang diperluas sebelum itu akan diteruskan ke a2ensiteperintah dalam kasus saya. Namun, ini berhasil sudo a2ensite "*.conf".
Dan
Hai, @Dan, dalam kasus saya (Ubuntu 16.04.2) berfungsi dengan baik tanpa tanda kutip. Namun saya sudah memperbarui jawabannya. Bisakah Anda memeriksa apakah a2ensite '*.conf'berfungsi dengan benar di sistem Anda?
pa4080
1
Ya berhasil, saya di Ubuntu 17,04 btw.
Dan
0

Eksekusi a2ensite /var/www/html/*/akan membuat Apache mengaktifkan setiap situs conf yang memiliki nama yang sama , seperti dir situs.

Sebagai efek samping, itu juga akan mencoba untuk mencocokkan dir situs yang tidak cocok dengan file conf situs, seperti yang diperkirakan dari output berikut, tapi saya pikir ini dapat diabaikan dengan aman:

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!

Anda mungkin perlu me-restart Apache setelah mengaktifkan file conf:

systemctl restart apache2.service

sumber
1
Saya tidak yakin, tetapi mengapa konfigurasi situs Anda di folder webroot? Coba gunakan /etc/apache2/sites-availablefolder untuk konfigurasi untuk situs Anda. Setelah Anda mengaktifkannya melalui a2ensite, mereka secara otomatis ditautkan ke /etc/apache2/sites-enabled. Apa yang Anda lakukan sekarang cukup aneh dan semua orang yang memiliki akses ke server Anda dapat melihat ke dalam konfigurasi Anda?
Ziazis
Hai @Ziazis. Saya benar-benar tidak mengerti, mengapa Anda bertanya kepada saya "semua orang yang memiliki akses ke server web Anda dapat melihat ke dalam konfigurasi Anda?" Saya satu-satunya orang yang menggunakan server; Jika tidak, maka biasanya pengguna lain tidak akan memiliki akses ke dokumen root. Ngomong-ngomong, bisakah Anda menjelaskan mengapa Anda menanyakan hal itu dan apa yang sebenarnya Anda temukan salah?
Yah saya tidak yakin untuk apa Anda menggunakan server web ini. Namun jika ini adalah sistem langsung dengan akses yang dapat dijangkau oleh pihak ketiga Anda tidak ingin file konfigurasi Anda berada /var/www/htmlkarena itu adalah DocumentRoot dari default.html-Situs. Jadi dalam kasus Anda, Anda tampaknya menjalankan konfigurasi di sana ... Ini seperti makan dengan mulut terbuka, jangan lakukan itu ;-).
Ziazis
Saya tidak mengerti. Anda pikir saya memasukkan file conf ke root dokumen? Karena saya tidak melakukannya. Anda menyarankan saya untuk meletakkannya di sana? Saya ingin menghindarinya ... Saya hanya ingin mengaktifkan semuanya yang bukan 000-default dan default-ssl. BTW, saya menggunakan server web untuk menyimpan situs web pribadi saya.
Ah, saya mengerti - Anda memberi nama semua RootDirectories Anda sama dengan file konfigurasi Anda. Dan di sini saya pikir Anda mengubah konfigurasi apache2 Anda untuk /var/www/htmldijadikan folder konfigurasi Anda. Nvm lalu. Apa yang sebenarnya Anda butuhkan hanyalahfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis
0

salin tempel baris berikut dalam nama file apache_enable.sh

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

dan berikan perintah baca + eksekusi ke apache_enable.shdan jalankan skrip menggunakan pengguna root

Krishna Chalise
sumber
0

Pindahkan konfigurasi default ke folder lain dan kemudian * seharusnya berfungsi untuk Anda seperti yang Anda inginkan.

Buka folder "situs yang tersedia" karena hanya berfungsi di folder ini.

cd / etc / apache2 / sites-available /

sudo a2ensite *

diuji

Carobell
sumber
AFAIK, Anda bisa melakukannya dari mana saja di sistem ketika Anda mendokumentasikan root adalah / var / www / html?
Bagian yang penting adalah folder / etc / apache2_or_other / sites-available. Root dokumen kemudian ditautkan dalam konfigurasi itu. Anda dapat memiliki root di / usr / share / htlm dan itu tidak akan mengubah apa pun kecuali jika Anda tidak menuliskannya di file conf. Saya bisa berada di mana saja di server saya, selama file conf ada di folder yang tersedia situs a2ensite akan melakukan tugasnya.
Carobell
Mengedit jawaban saya karena opsi pertama tidak berhasil diuji
Carobell