O servidor HTTP Apache é o servidor Web mais amplamente usado no mundo. Ele fornece muitas características poderosas, incluindo módulos carregáveis dinamicamente, suporte robusto de mídia e uma integração extensa com outros softwares populares.
Neste guia, você instalará um servidor web Apache com hosts virtuais em seu servidor CentOS 8.
Você precisará do seguinte para completar este guia:
O Apache está disponível dentro dos repositórios de software padrão do CentOS, o que significa que você pode instalá-lo com o gerenciador de pacotes dnf
.
Como o usuário sudo não root configurado nos pré-requisitos, instale o pacote Apache:
- sudo dnf install httpd
Após confirmar a instalação, o dnf
irá instalar o Apache e todas as dependências necessárias.
Ao completar o Passo 4 do tutorial de Configuração Inicial de Servidor com o CentOS 8 mencionado na seção de pré-requisitos, você já terá instalado o firewalld
em seu servidor para exibir solicitações por HTTP.
Se você também planeja configurar o Apache para fornecer conteúdo por HTTPS, você também irá querer abrir a porta 443
habilitando o serviço https
:
- sudo firewall-cmd --permanent --add-service=https
Em seguida, recarregue o firewall para colocar essas novas regras em vigor:
- sudo firewall-cmd --reload
Após o firewall recarregar, você está pronto para iniciar o serviço e verificar o servidor web.
O Apache não inicia automaticamente no CentOS assim que a instalação termina. Dessa forma você precisará iniciar o processo Apache manualmente:
- sudo systemctl start httpd
Verifique se o serviço está em execução com o seguinte comando:
- sudo systemctl status httpd
Você receberá um status active
quando o serviço estiver executando:
Output● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND
...
Como essa saída indica, o serviço foi iniciado com sucesso. No entanto, a melhor maneira de testar isso é solicitando uma página do Apache.
Você pode acessar a página de destino padrão do Apache para confirmar que o software está funcionando corretamente através do seu endereço IP: Se você não sabe o endereço IP do seu servidor, você pode obtê-lo de algumas maneiras diferentes a partir da linha de comando.
Digite q
para retornar ao prompt de comando e, em seguida, digite:
- hostname -I
Este comando exibirá todos os endereços de rede do host. Dessa forma, você irá obter alguns endereços IP separados por espaços. Você pode testar cada um deles em seu navegador web para ver se eles funcionam.
Alternativamente, você pode usar o curl
para solicitar seu IP a partir do icanhazip.com
, o que dará a você o endereço IPv4 público como visto de outro local na Internet:
- curl -4 icanhazip.com
Quando você tiver o endereço IP do seu servidor, digite-o na barra de endereço do seu navegador:
http://your_server_ip
Você verá a página web padrão do Apache no CentOS 8:
Esta página indica que o Apache está funcionando corretamente. Ela também inclui algumas informações básicas sobre arquivos importantes do Apache e localizações de diretórios importantes.
Agora que o serviço está instalado e em execução, você pode agora usar diferentes comandos systemctl para gerenciar o serviço.
Para parar seu servidor Web, digite:
- sudo systemctl stop httpd
Para iniciar o servidor web quando ele estiver parado, digite:
- sudo systemctl start httpd
Para parar e então iniciar o serviço novamente, digite:
- sudo systemctl restart httpd
Se você estiver simplesmente fazendo alterações de configuração, o Apache geralmente pode recarregar sem quedas na conexão. Para fazer isso, utilize este comando:
- sudo systemctl reload httpd
Por padrão, o Apache está configurado para iniciar automaticamente quando o servidor for iniciado. Se isso não é o que você quer, desative este comportamento digitando:
- sudo systemctl disable httpd
Para reativar o serviço de inicialização no boot, digite:
- sudo systemctl enable httpd
O Apache agora irá iniciar automaticamente quando o servidor for reiniciado novamente.
A configuração padrão para o Apache permitirá que seu servidor hospede um único site. Se você planeja hospedar vários domínios em seu servidor, você precisará configurar virtual hosts em seu servidor web Apache.
Ao utilizar o servidor web Apache, você pode usar virtual hosts (se você estiver mais familiarizado com o Nginx, esses são semelhantes aos blocos de servidor) para encapsular detalhes de configuração e hospedar mais de um domínio em um único servidor. Neste passo,vamos configurar um domínio chamado example.com
, mas você deve substituí-lo por seu próprio nome de domínio. Se você estiver configurando um nome de domínio com a DigitalOcean, consulte nossa Documentação de Rede.
O Apache no CentOS 8 tem um virtual host habilitado por padrão que está configurado para exibir documentos do diretório /var/www/html
. Enquanto isso funciona bem para um único site, ele pode tornar-se indevido se você estiver hospedando vários sites. Em vez de modificar o /var/www/html
, você irá criar uma estrutura de diretórios dentro do /var/www
para o site example.com
, deixando o /var/www/html
intocado como o diretório padrão para ser servido se uma solicitação de cliente não corresponder a nenhum outro site.
Crie o diretório html
para example.com
como segue, usando a flag -p
para criar quaisquer diretórios pais necessários:
- sudo mkdir -p /var/www/example.com/html
Crie um diretório adicional para armazenar arquivos de logs para o site:
- sudo mkdir -p /var/www/example.com/log
Em seguida, atribua a propriedade do diretório html
com a variável de ambiente $USER
:
- sudo chown -R $USER:$USER /var/www/example.com/html
Certifique-se de que seu web root tenha as permissões padrão configuradas:
- sudo chmod -R 755 /var/www
A seguir, crie uma página de exemplo index.html
utilizando o nano
ou seu editor favorito:
- sudo vi /var/www/example.com/html/index.html
Pressione i
para mudar para o modo INSERT
e adicione o seguinte exemplo HTML ao arquivo:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
Salve e feche o arquivo pressionando ESC
, digitando :wq
e pressionando ENTER
.
Com seu diretório do site e o arquivo de index prontos, você está quase pronto para criar os arquivos de virtual host. Os arquivos de virtual host especificam a configuração de seus sites separados e informam ao servidor Apache como responder a várias solicitações de domínios.
Antes de criar seus virtual hosts, você precisará criar um diretório sites-available
para armazená-los. Você também criará o diretório sites-enabled
que informa ao Apache que um virtual host está pronto para servir aos visitantes. O diretório sites-enabled
terá links simbólicos para os virtual hosts que queremos publicar. Crie ambos os diretórios com o seguinte comando:
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Em seguida, você irá informar ao Apache para procurar virtual hosts no diretório sites-enabled
. Para conseguir isso, edite o arquivo de configuração principal do Apache usando o vi ou seu editor de texto favorito e adicione uma linha que declara um diretório opcional para arquivos de configuração adicionais:
- sudo vi /etc/httpd/conf/httpd.conf
Pressione o G
maiúsculo para navegar até o final do arquivo. Em seguida pressione i
para mudar para o modo INSERT
e adicione a seguinte linha ao final do arquivo:
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
Salve e feche o arquivo quando terminar de adicionar essa linha. Agora que você tem seus diretórios de virtual host prontos, você criará seu arquivo de virtual host.
Comece criando um novo arquivo no diretório sites-available
:
- sudo vi /etc/httpd/sites-available/example.com.conf
Adicione no seguinte bloco de configuração e mude o domínio example.com
para o seu nome de domínio:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>
Isso dirá ao Apache onde encontrar o web root diretamente que contém os documentos web publicamente acessíveis. Ele também informa ao Apache onde armazenar erros e logs de solicitações para este site em particular.
Salve e feche o arquivo quando você terminar.
Agora que você criou os arquivos de virtual host, você os habilitará para que o Apache saiba como exibi-los aos visitantes. Para fazer isso, crie um link simbólico para cada virtual host no diretório sites-enabled
:
- sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
Agora, seu virtual host está configurado e pronto para servir o conteúdo. Antes de reiniciar o serviço Apache, vamos garantir que o SELinux está com as políticas corretas prontas para seus virtual hosts.
O SELinux é um módulo de segurança do Kernel Linux, que aumenta a segurança dos sistemas Linux. O CentOS 8 vem equipado com o SELinux configurado para funcionar com a configuração padrão do Apache. Como você alterou a configuração padrão configurando um diretório de log personalizado no arquivo de configuração de virtual hosts, você receberá um erro caso você tentar iniciar o serviço Apache. Para resolver isso, você precisa atualizar as políticas do SELinux para permitir que o Apache escreva nos arquivos necessários.
Há diferentes maneiras de definir políticas baseadas nas necessidades do seu ambiente, uma vez que o SELinux permite que você personalize seu nível de segurança. Este passo irá abordar dois métodos de ajuste das políticas do Apache: universalmente e em um diretório específico. O ajuste das políticas em diretórios é mais seguro. Portanto, é a abordagem recomendada.
Definir a política do Apache universalmente irá informar ao SELinux para tratar de todos os processos de Apache de maneira idêntica, utilizando o Booleano httpd_unified
. Embora essa abordagem seja mais conveniente, ela não lhe dará o mesmo nível de controle como uma abordagem que se concentra em uma política de arquivos ou diretórios.
Execute o seguinte comando para definir uma política universal do Apache:
- sudo setsebool -P httpd_unified 1
O comando setsebool
altera os valores Booleanos do SELinux. A flag -P
atualizará o valor de inicialização, fazendo com que essa alteração persista em reinicializações. O httpd_unified
é o Booleano que dirá ao SELinux para tratar todos os processos do Apache como sendo do mesmo tipo, então você o habilitou com um valor de 1
.
Configurando individualmente as permissões do SELinux para o diretório /var/www/example.com/log
dará a você mais controle sobre suas políticas do Apache, mas também pode precisar de mais manutenção. Como essa opção não define políticas universalmente, você precisará definir manualmente o tipo de contexto para quaisquer novos diretórios de logs especificados em sua configuração de virtual host.
Primeiro, verifique o tipo de contexto que o SELinux deu ao diretório /var/www/example.com/log
:
- sudo ls -dlZ /var/www/example.com/log/
Este comando lista e mostra o contexto SELinux do diretório. Você receberá um resultado similar ao seguinte:
Outputdrwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
O contexto atual é o httpd_sys_content_t
, que informa ao SELinux que o processo Apache pode ler apenas os arquivos criados neste diretório. Neste tutorial, você alterará o tipo de contexto do diretório /var/www/example.com/log
para httpd_log_t
. Este tipo permitirá ao Apache gerar e anexar aos arquivos de log de aplicações web:
- sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
Em seguida, use o comando restorecon
para aplicar essas alterações e persisti-las entre as reinicializações:
- sudo restorecon -R -v /var/www/example.com/log
A flag -R
executa esse comando de maneira recursiva, o que significa que ele atualizará todos os arquivos existentes para usar o novo contexto. A flag -v
exibirá as alterações de contexto que o comando fez. Você receberá a seguinte saída confirmando as alterações:
OutputRelabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
Você pode listar os contextos mais uma vez para ver as alterações:
- sudo ls -dlZ /var/www/example.com/log/
A saída reflete o tipo de contexto atualizado:
Outputdrwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
Agora que o diretório /var/www/example.com/log
está usando o tipo httpd_log_t
, você está pronto para testar sua configuração de virtual host.
Assim que o contexto SELinux for atualizado com qualquer método, o Apache poderá escrever no diretório /var/www/example.com/log
. Agora, você pode reiniciar o serviço Apache com sucesso:
- sudo systemctl restart httpd
Liste o conteúdo do diretório /var/www/example.com/log
para ver se o Apache criou os arquivos de registro:
- ls -lZ /var/www/example.com/log
Você receberá a confirmação de que o Apache foi capaz de criar os arquivos error.log
e requests.log
especificados na configuração de virtual host:
Output-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log
Agora que você tem seu virtual host configurado e as permissões do SELinux atualizadas, o Apache agora irá servir seu nome de domínio. Você pode testar isso navegando para http://example.com
, onde você deve ver algo assim:
Isso confirma que seu virtual host está configurado e exibindo conteúdo. Repita os Passos 4 e 5 para criar novos virtual hosts com as permissões SELinux para domínios adicionais.
Neste tutorial, você instalou e gerenciou o servidor web Apache. Agora que você tem seu servidor Web instalado, você tem muitas opções para o tipo de conteúdo que você pode oferecer e as tecnologias que você quiser usar para criar uma experiência mais rica.
Se você quiser construir uma pilha de aplicação mais completa, você pode dar uma olhada neste artigo sobre como configurar uma pilha LAMP no CentOS 8.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Thank you for your help and time, the article is very useful.