Configuração de Hospedagem Compartilhada do ASP.NET 2.0/3.5
Introdução
O IIS oferece aprimoramentos para conteúdo dinâmico, especialmente ASP.NET. No IIS 7 e versões posteriores, o modelo de extensibilidade de runtime do ASP.NET está integrado ao servidor principal. Isso permite que os desenvolvedores estendam completamente o IIS com a funcionalidade avançada do ASP.NET 2.0 ou versões posteriores e o .NET Framework, em vez de usar APIs C++ de nível inferior. Os aplicativos existentes do ASP.NET usufruirão da integração mais próxima, podendo usar os recursos existentes, como autenticação de formulários, funções e cache de saída, para todos os tipos de conteúdo, não apenas páginas .aspx.
Para saber mais sobre alguns dos principais recursos e benefícios da integração do ASP.NET com o IIS, confira a Visão Geral do Servidor Web Principal. Para obter informações sobre e como instalar o .NET Framework 3.5, confira https://www.microsoft.com/net/ ou o site da comunidade do ASP.NET.
As configurações a seguir foram usadas no servidor Web como parte da arquitetura de hospedagem compartilhada mencionada no artigo "Planejamento da Arquitetura de Hospedagem Compartilhada" em Diretrizes de Hospedagem. Para saber mais sobre por que essas configurações são recomendadas e para obter detalhes adicionais sobre como configurá-las, baixe o Guia de Implantação de Hospedagem do ASP.NET 4.
Configuração dos Níveis de Confiança
Os níveis de confiança permitem definir as regras de segurança para ASP.NET. Eles definem quais tipos de operações um aplicativo pode executar, como ler do disco ou acessar o registro. O nível de confiança recomendado é Médio, que permite muitas operações comuns, mas restringe muitos dos aplicativos perigosos. Se você precisar permitir mais operações do que a confiança de nível Médio permite, crie um nível de confiança personalizado.
Para configurar um nível de confiança personalizado e configurar permissões adicionais
Navegue até o diretório
%windir%\Microsoft.NET\Framework \{version}\ CONFIG
.Copie o arquivo de política de confiança de nível Média, web_mediumtrust.config, para criar um novo arquivo de política no mesmo diretório
%windir%\Microsoft.NET\Framework\{version}\ CONFIG\
.Renomeie o arquivo para indicar que ele é um nível de confiança personalizado, por exemplo, web_CustomTrust.config.
Abra o novo arquivo, web_CustomTrust.config e localize a seção WebPermission.
...
<IPermission class="WebPermission"
version="1" <ConnectAccess> <URI uri="$OriginHost$" /> </ConnectAccess> </IPermission>
...
Edite WebPermission para que o elemento ConnectAccess seja removido e Irrestrito esteja definido como true.
...
<IPermission class="WebPermission"
version="1" Unrestricted="true"/>
...
Comente PrintingPermission e EnvironmentPermission, a menos que você saiba que eles são necessários para o ambiente de hospedagem compartilhado.
Adicione o novo elemento
<trustLevel>
à seção<securityPolicy>
do arquivo Web.config, conforme mostrado abaixo:<location allowOverride="true">
<system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> <trustLevel name="Custom" policyFile="web_CustomTrust.config" /> </securityPolicy> <trust level="Custom" originUrl="" /> </system.web> </location>
Bloqueie o nível de confiança para que não possa ser alterado por aplicativos no servidor, definindo o elemento allowOverride do local como false.
<location allowOverride="false"> <system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> <trustLevel name="Custom" policyFile="web_CustomTrust.config" /> </securityPolicy> <trust level="Custom" originUrl="" /> </system.web> </location>
Configuração do Conteúdo a Ser Fornecido por um Servidor de Arquivos Remoto
Ao configurar o ASP.NET para trabalhar com o conteúdo armazenado em um servidor de arquivos remoto, algumas etapas adicionais são necessárias.
Quando o IIS recebe o conteúdo de um servidor de arquivos remoto, ele representa o usuário autenticado. Esse é o usuário definido especificamente como o usuário do diretório virtual ou, se não for especificado, o usuário anônimo. As diretrizes do IIS estabelecem que o usuário do pool de aplicativos deve ser usado como o usuário anônimo. Portanto, nesse caso, a identidade representada é a identidade do pool de aplicativos. Usar uma identidade para todo o acesso (anônimo, pool de aplicativos e diretório virtual) simplifica muito uma implantação.
Para executar alguns aplicativos do ASP.NET em um servidor de arquivos remoto, o usuário representado deve ter acesso ao Windows temp e aos diretórios de compilação temporários.
Para fornecer o conteúdo do ASP.NET de um compartilhamento de servidor de arquivos
Conceda permissão para todas as identidades do pool de aplicativos para o diretório
%windir%\Temp
editando as ACLs da pasta.Adicione uma política de CAS (Segurança de Acesso do Código) para permitir o acesso apropriado do ASP.NET ao compartilhamento do servidor de arquivos. Para fazer isso, abra um prompt de comando e execute o seguinte comando:
%windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag 1. -url "file://\\remotefileserver\content$\*" FullTrust
Configuração do Coletor de Lixo
A estrutura do .NET usa a coleta de lixo automática para gerenciar a memória de todos os aplicativos. Quando o GC (coletor de lixo) decide que lixo suficiente foi acumulado e que é eficiente fazer isso, ele executa uma coleta para liberar alguma memória. Esse processo é totalmente automático, mas há configurações que podem tornar o processo mais eficiente.
Para obter mais informações sobre o GC, confira "Capítulo 5 – Como Aprimorar o Desempenho do Código Gerenciado" e examine a seção Explicação da Coleta de Lixo.
Como Habilitar o Coletor de Lixo da Estação de Trabalho
Por padrão, o GC do Servidor é usado pelo .NET Framework para otimizar a velocidade e a carga da CPU. Para hospedagem compartilhada, em que a memória é mais frequentemente a restrição de vários sites ativos, o GC da Estação de Trabalho deve ser usado. O GC da Estação de Trabalho é otimizado para memória.
Para saber mais sobre essa configuração, confira o artigo KB: "Você poderá receber uma mensagem de erro ou o computador parará de responder, quando você hospedar aplicativos Web que usam o ASP.NET em um computador que está executando o Windows Server 2003" (https://support.microsoft.com/kb/911716
).
Como Desabilitar o Coletor de Lixo Simultâneo
Há três versões do GC: Servidor, Estação de Trabalho com a simultaneidade habilitada e Estação de Trabalho com a simultaneidade desabilitada. O GC simultâneo da Estação de Trabalho destina-se a cenários do cliente. Assim como o GC do Servidor prioriza a taxa de transferência e a escalabilidade a um custo de memória, o GC simultâneo da Estação de Trabalho prioriza a capacidade de resposta a um custo de memória. Para otimizar a memória, desabilite a coleta de lixo simultânea ao usar o GC da Estação de Trabalho.
Como habilitar a configuração gcTrimCommitOnLowMemory
Como o GC retém a memória para alocações futuras, seu espaço confirmado pode ser superior ao que é estritamente necessário. Esse espaço pode ser reduzido para se adaptar a situações em que houver uma carga pesada na memória do sistema. Quando essa configuração está habilitada, o GC avalia a carga de memória do sistema e entra em um modo de corte, quando a carga atinge 90%. Ele mantém o modo de corte até que a carga fique abaixo de 85%. Quando as condições permitirem, o GC poderá decidir que a configuração não ajudará o aplicativo e poderá ignorá-lo.
Para definir as configurações do GC
Navegue até o diretório
%windir%\Microsoft.NET\Framework\{version}
.Abra o arquivo aspnet.config e localize o elemento
<gcServer>
. Se o elemento não existir, crie uma entrada usando a Etapa 3....
<configuration> <runtime> <gcServer enabled="true"/> </runtime> </configuration> ...
Adicione os seguintes elementos na seção
<runtime>
:...
<configuration> <runtime> <gcServer enabled="false" />
<gcConcurrent enabled="false" /> <gcTrimCommitOnLowMemory enabled="true" /> </runtime> </configuration> ...
Salve o arquivo e feche-o.