Como habilitar todos os sites confs com a2ensite (enquanto ultrapassa 000-default.conf && default-ssl.conf)?

11

Eu uso o servidor Ubuntu 16.04.2 com Apache2, no qual armazeno meus sites pessoais.

Para permitir que todos os meus arquivos de conf sob /etc/apache2/sites-available(além 000-default.confe ssl-default.conf), eu fui para /var/www/htmle executado a2ensite.

Foi-me dito então:

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

Eu fiz Ctrl+ Ccom o objetivo de executar outra coisa.

Estou procurando uma maneira de habilitar automaticamente todas as confs do site, sem notar uma específica - só quero executar um comando que habilite todas as confs do site que eu mesmo adicionei.

Zanna
fonte

Respostas:

18

Também pode usar find no seu diretório de configuração.

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

Isso localiza todos os seus arquivos de configuração que não possuem "padrão" em seus nomes e os ativa.

Ziazis
fonte
1
Você também deve procurar arquivos que tenham uma *.confextensão. Ou então o a2ensite reclamaria que o site não existe #
Dan
@ Dan não é necessário, pois estamos pesquisando no diretório conf.
Ziazis
Eu acho que esse método também é bom, por princípio, ao criar Nginx Sblocks, e não apenas para o Apache Vhosts.
8

Você precisa navegar /etc/apache2/sites-availablee executar o comando:

sudo a2ensite *

Ele permitirá todos os sites no diretório. (os arquivos devem ter algo como xxx.conf)

E recarregue o apache usando sudo service apache2 reload.

Portanto, sua sequência de comandos deve ser assim:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload
Shakti Phartiyal
fonte
Isso também habilita o arquivo conf default-ssl.conf... Isso fica claro na saídaEnabling site default-ssl.
Você pode usar dpkg -Spara ver se o arquivo de configuração é de um pacote.
muru 21/05
1

Independentemente da localização atual, o comando sudo a2ensite "*.conf"tentará ativar todos os arquivos de configuração inseridos /etc/apache2/sites-available/.

Em seguida, podemos usar a2dissite 000-default.conf default-ssl.confpara desativar as configurações padrão do Apache e depois podemos systemctl restart apache2.servicereiniciá-lo.

Podemos executar tudo isso como um único comando:

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

Além disso, podemos criar um comando personalizado através de uma função no bash:

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

Agora temos o comando , projetado para fazer esse trabalho. Para tornar esse comando permanente, devemos colocar as linhas acima na parte inferior do arquivo e depois nela. O próximo script simples realizará esta tarefa: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
fonte
A primeira linha não é verdadeira. O *curinga está sendo expandido antes de ser passado para o a2ensitecomando no meu caso. No entanto, isso funciona sudo a2ensite "*.conf".
Dan
Olá, @Dan, no meu caso (Ubuntu 16.04.2) funciona corretamente sem aspas. No entanto, eu atualizei a resposta. Você poderia verificar se as a2ensite '*.conf'obras estão corretas no seu sistema?
pa4080 25/05
1
Sim, funciona, estou no Ubuntu 17.04 btw.
Dan
0

A execução a2ensite /var/www/html/*/fará com que o Apache habilite cada conf de site com o mesmo nome , como o diretório do site.

Como efeito colateral, ele também tentará corresponder diretórios de sites que não correspondem aos arquivos conf do site, conforme previsto na saída a seguir, mas acho que isso pode ser ignorado com segurança:

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!

Você provavelmente precisará reiniciar o Apache depois de ativar os arquivos conf:

systemctl restart apache2.service

fonte
1
Não tenho certeza, mas por que a configuração do seu site está na pasta webroot? Tente usar a /etc/apache2/sites-availablepasta para configurações dos seus sites. Depois de ativá-los via a2ensite, eles são automaticamente vinculados /etc/apache2/sites-enabled. O que você está fazendo agora é muito estranho e todos os que têm acesso ao seu servidor da web podem analisar suas configurações?
Ziazis 18/05
Oi @Ziazis. Realmente não entendo, por que você me pergunta "todos os que têm acesso ao seu servidor da web podem analisar suas configurações?" Eu sou o único que usa o servidor; Se não estivesse, normalmente outros usuários não teriam acesso à raiz do documento. De qualquer forma, você pode esclarecer por que pergunta isso e o que exatamente acha errado?
Bem, não sei para que você está usando este servidor da web. No entanto, se este é um sistema ativo com um acesso acessível por terceiros, você não deseja que seus arquivos de configuração /var/www/htmlestejam, pois esse é o DocumentRoot do default.html-Site. Então, no seu caso, você parece estar executando as configurações lá ... É como comer com a boca aberta, não faça isso ;-).
Ziazis
Eu não entendo Você acha que eu coloquei os arquivos conf na raiz do documento? Porque eu não fiz. Você me sugere de colocá-los lá? Eu gostaria de evitar isso ... Eu só quero habilitar todos eles que não são 000-default e default-ssl. BTW, eu uso o servidor web para armazenar meus sites pessoais.
Ah, entendo - você nomeou todos os seus diretórios raiz iguais aos seus arquivos de configuração. E aqui eu pensei que você alterou sua configuração do apache2 para ter /var/www/htmlcomo sua pasta de configuração. Nvm então. O que você realmente precisa é apenas umfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis
0

copie e cole as seguintes linhas no nome do arquivo apache_enable.sh

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

e dê o comando read + execute apache_enable.she execute o script usando o usuário root

Krishna Chalise
fonte
0

Mova as configurações padrão para outra pasta e, em seguida, o * deve funcionar para você como você deseja.

Vá para a pasta "sites disponíveis", pois ela funciona apenas nesta pasta.

cd / etc / apache2 / sites-available /

sudo a2ensite *

testado

Carobell
fonte
AFAIK, você pode fazer isso de qualquer lugar do sistema quando documentar que a raiz é / var / www / html?
A parte importante é a pasta / etc / apache2_ou_other / sites-available. A raiz do documento é então vinculada nessa configuração. Você poderia ter sua raiz em / usr / share / htlm e ela não mudaria nada, exceto se você não a escrevesse no arquivo conf. Posso estar em qualquer lugar do meu servidor, desde que os arquivos conf estejam na pasta disponível no site a2ensite fará seu trabalho.
Carobell 29/05
Editado minha resposta como a primeira opção não funciona testado
Carobell