Neste artigo
Pré-requisitos
Publicar e copiar o aplicativo
Configurar um servidor proxy
Monitorar o aplicativo
Proteção de dados
Proteger o aplicativo
Sugestões adicionais do Apache
Recursos adicionais
Por Shayne Boyer
Usando este guia, saiba como configurar o Apache como um servidor proxy reverso no CentOS
7 para redirecionar o tráfego HTTP para um aplicativo Web ASP.NET Core em execução
no Kestrel servidor. A extensão mod_proxy e os módulos relacionados criam o proxy reverso do
servidor.
Pré-requisitos
Servidor que executa o CentOS 7 com uma conta de usuário padrão com privilégio sudo.
Instale o runtime do .NET Core no servidor.
A qualquer momento no futuro após atualizar a estrutura compartilhada, reinicie o ASP.NET Core
hospedados pelo servidor.
Se o aplicativo for executado localmente e não estiver configurado para fazer conexões seguras
(HTTPS), adote uma das seguintes abordagens:
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 1/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Configure o aplicativo para lidar com conexões seguras locais. Para obter mais informações,
veja a seção Configuração de HTTPS.
Remova https://localhost:5001 (se houver) da propriedade applicationUrl no
arquivo Properties/launchSettings.json.
O aplicativo também poderá ser publicado como uma implantação autossuficiente se você preferir
não manter o runtime do .NET Core no servidor.
Copie o aplicativo ASP.NET Core para o servidor usando uma ferramenta que se integre ao fluxo de
trabalho da organização (por exemplo, SCP, SFTP). É comum para localizar os aplicativos Web no
diretório var (por exemplo, var/www/helloapp).
Observação
Um servidor proxy encaminha solicitações de cliente para outro servidor em vez de atender às
solicitações em si. Um proxy reverso encaminha para um destino fixo, normalmente, em nome de
clientes arbitrários. Neste guia, o Apache é configurado como o proxy reverso em execução no
mesmo servidor que está atendendo Kestrel ao aplicativo ASP.NET Core.
Como as solicitações são encaminhadas por proxy reverso, use o Middleware de Cabeçalhos
Encaminhados do pacote Microsoft.AspNetCore.HttpOverrides. O middleware atualiza
o Request.Scheme usando o cabeçalho X-Forwarded-Proto , de forma que URIs de redirecionamento
e outras políticas de segurança funcionam corretamente.
O middleware de cabeçalhos encaminhados deve ser executado antes de outro middleware. Essa
ordenação garantirá que o middleware conte com informações de cabeçalhos encaminhadas que
podem consumir os valores de cabeçalho para processamento. Para executar o middleware de
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 2/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
C# Copiar
// using Microsoft.AspNetCore.HttpOverrides;
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
C# Copiar
// using System.Net;
services.Configure<ForwardedHeadersOptions>(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
Para obter mais informações, consulte Configure o ASP.NET Core para trabalhar com servidores
proxy e balanceadores de carga.
Instalar o Apache
Atualize os pacotes CentOS para as respectivas versões estáveis mais recentes:
Bash Copiar
Bash Copiar
Bash Copiar
Downloading packages:
httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-40.el7.centos.4.x86_64 1/1
Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 1/1
Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.4
Complete!
Observação
Neste exemplo, o resultado reflete httpd.86_64, pois a versão do CentOS 7 é de 64 bits. Para
verificar o local em que o Apache está instalado, execute whereis httpd em um prompt de
comando.
Configurar o Apache
Os arquivos de configuração do Apache estão localizados no diretório /etc/httpd/conf.d/ .
Qualquer arquivo com a extensão .conf é processado em ordem alfabética, além dos arquivos de
configuração do módulo em /etc/httpd/conf.modules.d/ , que contém todos os arquivos de
configuração necessários para carregar os módulos.
Copiar
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.example.com
ServerAlias *.example.com
ErrorLog ${APACHE_LOG_DIR}helloapp-error.log
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 4/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Aviso
Salve o arquivo e teste a configuração. Se tudo passar, a resposta deverá ser Syntax [OK] .
Bash Copiar
Reinicie o Apache:
Bash Copiar
Monitorar o aplicativo
O Apache agora está definido para encaminhar solicitações feitas para http://localhost:80 o
ASP.NET Core em execução no Kestrel http://127.0.0.1:5000 . No entanto, o Apache não está
definido para gerenciar o Kestrel processo. Use systemde crie um arquivo de serviço para iniciar e
monitorar o aplicativo Web subjacente. systemd é um sistema de inicialização que fornece muitos
recursos poderosos para iniciar, parar e gerenciar processos.
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 5/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Bash Copiar
Copiar
[Unit]
Description=Example .NET Web API App running on CentOS 7
[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
No exemplo anterior, o usuário que gerencia o serviço é especificado pela User opção . O usuário
( apache ) deve existir e ter a propriedade adequada dos arquivos do aplicativo.
Use TimeoutStopSec para configurar a duração do tempo de espera para o aplicativo desligar
depois de receber o sinal de interrupção inicial. Se o aplicativo não desligar nesse período, o
SIGKILL será emitido para encerrá-lo. Forneça o valor como segundos sem unidade (por
exemplo, 150 ), um valor de duração (por exemplo, 2min 30s ) ou infinity para desabilitar o tempo
limite. TimeoutStopSec é revertido para o valor padrão de DefaultTimeoutStopSec no arquivo de
configuração do gerenciador (systemd-system.conf, system.conf.d, systemd-user.conf e user.conf.d). O
tempo limite padrão para a maioria das distribuições é de 90 segundos.
Copiar
Alguns valores (por exemplo, cadeias de conexão de SQL) devem ser escapadas para que os
provedores de configuração leiam as variáveis de ambiente. Use o seguinte comando para gerar
um valor corretamente com caracteres de escape para uso no arquivo de configuração:
Console Copiar
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 6/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
systemd-escape "<value-to-escape>"
Separadores do tipo dois-pontos ( : ) não são compatíveis com nomes de variáveis de ambiente.
Use um sublinhado duplo ( __ ) no lugar de dois-pontos. O provedor de configuração de Variáveis
de Ambiente converte caracteres de sublinhado duplo em dois-pontos quando as variáveis de
ambiente são lidas na configuração. No exemplo a seguir, a chave de cadeia de
conexão ConnectionStrings:DefaultConnection está definida no arquivo de definição de serviço
como ConnectionStrings__DefaultConnection :
Copiar
Environment=ConnectionStrings__DefaultConnection={Connection String}
Bash Copiar
Bash Copiar
Com o proxy reverso configurado e Kestrel gerenciado por meio do sistema, o aplicativo Web é
totalmente configurado e pode ser acessado em um navegador no computador local
em http://localhost . Inspecionar os cabeçalhos de resposta, o cabeçalho do servidor indica que
o aplicativo ASP.NET Core é servido por Kestrel :
Copiar
HTTP/1.1 200 OK
Date: Tue, 11 Oct 2016 16:22:23 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 7/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Exibir logs
Como o aplicativo Web usando o Kestrel é gerenciado usando o sistema, eventos e processos são
registrados em um diário centralizado. No entanto, esse diário contém todas as entradas para
todos os serviços e processos gerenciados por systemd. Para exibir os itens específicos de kestrel-
helloapp.service , use o seguinte comando:
Bash Copiar
Para filtragem de hora, especifique opções de tempo com o comando. Por exemplo, use --since
today para filtrar o dia atual ou --until 1 hour ago para ver as entradas da hora anterior. Para
obter mais informações, confira a página de manual para journalctl.
Bash Copiar
Proteção de dados
A ASP.NET Core pilha de proteção de dados é usada por vários ASP.NET Core middleware,
incluindo o middleware de autenticação (por exemplo, cookie middleware) e as proteções de
solicitação entre sites forjada (CSRF). Mesmo se as APIs de Proteção de Dados não forem chamadas
pelo código do usuário, a proteção de dados deverá ser configurada para criar um repositório de
chaves criptográfico persistente. Se a proteção de dados não estiver configurada, as chaves serão
mantidas na memória e descartadas quando o aplicativo for reiniciado.
Para configurar a proteção de dados de modo que ela mantenha e criptografe o token de
autenticação, consulte:
Proteger o aplicativo
Configurar o firewall
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 8/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Firewalld é um daemon dinâmico para gerenciar o firewall com suporte para zonas de rede. Portas
e filtragem de pacote ainda podem ser gerenciados pelo iptables. Firewallddeve ser instalado por
padrão. yum pode ser usado para instalar o pacote ou verificar se ele está instalado.
Bash Copiar
Use firewalld para abrir somente as portas necessárias para o aplicativo. Nesse caso, as portas 80
e 443 são usadas. Os comandos a seguir definem permanentemente as portas 80 e 443 para
estarem abertas:
Bash Copiar
Bash Copiar
Bash Copiar
Configuração de HTTPS
Configurar o aplicativo para conexões seguras (HTTPS) locais
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 9/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Aviso
A configuração de segurança nesta seção é uma configuração geral a ser usada como ponto
de partida para personalização adicional. Não podemos fornecer suporte para ferramentas,
servidores e sistemas operacionais de terceiros. Use a configuração nesta seção por sua conta e
risco. Para obter mais informações, acesse os seguintes recursos:
Bash Copiar
Para impor o HTTPS, instale o módulo mod_rewrite para habilitar a regravação de URL:
Bash Copiar
Observação
Copiar
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 10/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:443>
Protocols h2 http/1.1
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /var/log/httpd/helloapp-error.log
CustomLog /var/log/httpd/helloapp-access.log common
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-
SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-
POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-
SHA384
</VirtualHost>
Observação
O Apache HTTP Server versão 2.4.43 ou mais recente é necessário para operar um servidor
Web TLS 1.3 com OpenSSL 1.1.1.
Observação
O exemplo anterior desabilita o OCSP (Protocolo de Status de Certificado Online). Para obter
mais informações e diretrizes sobre como habilenciar o OCSP, consulte Stapling do OCSP
(documentação do Apache).
Bash Copiar
Reinicie o Apache:
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 11/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Bash Copiar
Cabeçalhos adicionais
Para proteger contra ataques mal-intencionados, há alguns headers que devem ser modificados ou
adicionados. Verifique se o módulo mod_headers está instalado:
Bash Copiar
1. Edite o arquivo httpd.conf:
Bash Copiar
2. Salve o arquivo.
3. Reinicie o Apache.
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 12/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Edite o arquivo httpd.conf:
Bash Copiar
Adicione a linha Header set X-Content-Type-Options "nosniff" . Salve o arquivo. Reinicie o Apache.
Balanceamento de carga
Este exemplo mostra como configurar o Apache no CentOS 7 e Kestrel no mesmo computador de
instância. Para não ter um único ponto de falha; usar mod_proxy_balancer e modificar
o VirtualHost permitiria gerenciar várias instâncias dos aplicativos Web por trás do servidor proxy
do Apache.
Bash Copiar
No arquivo de configuração mostrado abaixo, uma instância adicional do helloapp é configurada
para ser executada na porta 5001. A seção Proxy é definida com uma configuração de balanceador
com dois membros para balancear carga de byrequests.
Copiar
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ProxyPass / balancer://mycluster/
ProxyPassReverse / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5001/
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:5000
BalancerMember http://127.0.0.1:5001
ProxySet lbmethod=byrequests
</Proxy>
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 13/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
<Location />
SetHandler balancer
</Location>
ErrorLog /var/log/httpd/helloapp-error.log
CustomLog /var/log/httpd/helloapp-access.log common
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>
Limites de taxa
Usando mod_ratelimit, que está incluído no módulo httpd, a largura de banda de clientes pode ser
limitada:
Bash Copiar
Copiar
<IfModule mod_ratelimit.c>
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 600
</Location>
</IfModule>
Aviso
Não aumente o valor padrão de LimitRequestFieldSize a menos que necessário. Aumentar
esse valor aumenta o risco de estouro de buffer (estouro) e ataques de DoS (negação de
serviço) por usuários mal-intencionados.
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 14/15
17/05/2021 Hospedar o ASP.NET Core no Linux com o Apache | Microsoft Docs
Recursos adicionais
Pré-requisitos para o .NET Core no Linux
Solucionar problemas e depurar ASP.NET principais projetos
Configure o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
https://docs.microsoft.com/pt-br/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0 15/15