Page 1

Sirva ASP.NET pelo Apache com mod_mono

REDES

ASP.NET no Apache O mod_mono permite hospedar aplicações .NET em seu servidor Apache 2. por Juliet Kemp

O

que fazer se a sua empresa investiu em algumas aplicações web elaboradas baseadas em ASP.NET antes de descobrir o GNU/Linux? E se o seu ambiente heterogêneo exige que essas mesmas páginas dinâmicas funcionem em múltiplas plataformas? Você precisa se desfazer do seu servidor web Apache simplesmente para poder servir conteúdo web desenvolvido no framework .NET da Microsoft? O Projeto Mono [1] tem trabalhado arduamente no problema de suporte ao framework .NET no GNU/Linux, e parte desta atenção foi dedicada à questão do ASP.NET. O Mono já oferece um módulo do Apache conhecido como mod_mono para hospedar aplicações na linguagem ASP baseadas em aplicações web .NET a partir de servidores Apache [2]. Este artigo fornece uma rápida análise de como configurar o servidor Apache para o suporte a ASP.NET. Naturalmente, esta discussão não pretende ser um tutorial completo de como configurar o Apache – um tema que poderia facilmente preencher um livro bem grande – porém, se você já tem conhecimentos básicos de configuração do Apache, continue a ler este artigo para mais informações sobre como trazer o .NET para o seu ambiente web. Para instalar o mod_mono, é importante dar preferência à utilização

Linux Magazine #59 | Outubro de 2009

do pacote disponibilizado pela sua própria distribuição GNU/Linux. Em sistemas Ubuntu e Debian, procure o pacote libapache2-mod-mono, e no Fedora instale os pacotes mod_mono e mono-web. Além disso, será necessário o pacote XSP. No Fedora, é preciso instalar o XSP direto dos fontes. No Ubuntu e demais distribuições baseadas em Debian, o pacote pode ser diretamente instalado como uma dependência do pacote (se preferir, você pode instalar o mod_mono pelo código-fonte [2], mas tenha em mente que assim aumentam as chances de problemas de compatibilidade). Ative o módulo inserindo sua respectiva seção no arquivo apache2. conf. No Ubuntu/Debian, o módulo é habilitado como parte da instalação. Porém, se isso não ocorrer, execute o comando sudo a2enmod mod_mono para habilitá-lo. Como alternativa, con-

sulte um exemplo de configuração na listagem 1. Depois de efetuar as alterações necessárias, recarregue o Apache com o comando /etc/init.d/ apache2 force-reload. Agora que a configuração básica já está pronta, o servidor já consegue lidar corretamente com páginas ASP. NET. Para testá-lo, crie uma pasta no diretório raiz do site com um de seus aplicativos ASP.NET ou instale o pacote asp.net-examples e acesse a pasta samples/ na raiz do servidor (algo como http://seu.servidor.net/ samples) para ver algumas aplicações de demonstração em funcionamento (figura 1). Se você instalou a partir do códigofonte, copie o diretório de teste do XSP (/lib/xsp/test/ ou /usr/lib/xsp/ test/, normalmente) para o diretório do Apache. Certifique-se de ter as permissões definidas corretamente

Listagem 1: Configuração de módulos do Apache 01 02 03 04 05 06 07 08 09 10 11 12

# Talvez seja preciso alterar isto de acordo com sua instalação LoadModule mono_module /usr/lib/apache2/modules/mod_mono.so <IfModule mod_mono.c> MonoUnixSocket /tmp/.mod_mono_server MonoServerPath /usr/lib/mono/1.0/mod‑mono‑server.exe MonoAutoApplication enabled AddType application/x‑asp‑net .aspx .ashx .asmx .ascx .asax .config DirectoryIndex index.aspx default.aspx MonoApplicationsConfigDir /etc/mono‑server MonoPath /usr/lib/mono/1.0:/usr/lib:/usr/lib/mono/1.0 </IfModule>

67


REDES  | Mod_mono

Figura 1 Teste a sua configuração com uma das aplicações exemplo de ASP.NET.

Figura 2 O painel de controle (bem básico) do servidor Mono.

(o usuário Apache deve ser capaz de ler esses diretórios e arquivos). A versão para Debian/Ubuntu fornece automaticamente uma configuração similar ao arquivo de configuração de exemplo contido na listagem 1. Primeiramente, o Apache carrega o módulo, e então cria um socket para o servidor e faz com que seu caminho seja executável. A linha MonoAutoApplication significa que não é preciso especificar de forma explícita as linhas MonoApplications para adicionar um aplicativo ao servidor (veja mais adiante como fazer com que as aplicações não sejam tratadas automaticamente), ao passo que a linha AddType diz ao Apache para definir o tipo de aplicação correta para os arquivos com as extensões dadas.

Listagem 2: Configuração do Painel de Controle Web 01 <Location /mono> 02 SetHandler mono‑ctrl 03 Order deny,allow 04 Deny from all 05 Allow from 127.0.0.1 06 </Location>

68

A linha DirectoryIndex diz ao Apache para tratar os arquivos com os nomes especificados, como um índice. Este comando significa que, ao visitar, digamos, o endereço local http://seu.servidor.net/teste/, caso exista um arquivo default.aspx no diretório, esse arquivo será servido ao navegador. Com essas configurações, o mod_mono iniciará automaticamente o mod_mono_server e assim executará o aplicativo web requisitado quando uma requisição for enviada pelo navegador.

Painel de Controle Web Um painel de controle básico via Web distribuído com o mod_mono permite reiniciar o servidor do mod_mono, o que é útil quando há necessidade de recarregar os conjuntos modificados (figura 2). O painel de controle também fornece informações sobre os pedidos em processamento. Para usar o painel de controle, adicione as linhas na listagem 2 à configuração do Apache. Em sistemas

que utilizam o estilo de configuração do Debian, com a configuração do mod_mono em /etc/apache2/modsavailable/mod_mono.conf, provavelmente é melhor adicionar o código ao arquivo referido nele: /etc/monoserver/mono-server-hosts.conf. Caso contrário, será necessário colocar este código na seção mod_mono do arquivo de configuração do Apache. Na listagem 2, substitua 127.0.0.1 pelo endereço IP do computador cujo painel você deseja acessar (se não for o próprio localhost, claro). Esteja ciente de que o endereço IP é a única restrição. Em outras palavras, qualquer usuário com uma conta na máquina especificada será capaz de usar o painel de controle. Agora recarregue o Apache e dê uma olhada em http://meu.dominio. com/mono (ou http://localhost/mono caso se trate da própria máquina local). Há várias outras opções para ajustar a configuração do mod_mono. Por exemplo, para limitar o número de requisições simultâneas, use: MonoMaxActiveRequests 20 MonoMaxWaitingRequests 20

A diretiva ThreadPool do Apache limita o número de pedidos que o servidor de back-end mod_mono poderá tratar ao mesmo tempo. Se muitos pedidos chegarem de uma só vez, poderão ocorrer bloqueios. As diretivas anteriores evitam esse problema limitando o número de solicitações passadas de uma só vez. O valor 20 é o padrão. Altere-o de acordo com seu limite de ThreadPool (0 desabilita os limites). Os comandos a seguir reiniciam o servidor Mono a cada três horas (o formato de tempo é DD[:HH[:MM[:SS]]]): MonoAutoRestartMode Time MonoAutoRestartTime 00:03

Se o processo do servidor Mono estiver crescendo com o tempo, tal-

http://www.linuxmagazine.com.br


Mod_mono | REDES

vez seja preciso reiniciar o sistema periodicamente. Além disso, você pode marcar para reiniciar a partir do número de requisições servidas em vez de se basear no tempo: MonoAutoRestartMode Requests MonoAutoRestartRequests 10000

Outra possibilidade é configurar o servidor para escutar em uma porta específica: MonoListenPort 8080

Esse recurso permite executar o servidor Mono ASP.NET em uma porta diferente da porta padrão do Apache, embora provavelmente seja preciso modificar as configurações do firewall para que isso funcione.

Múltiplas aplicações

Para a maioria das pessoas, simplesmente habilitar o MonoAutoApplication no arquivo de configuração (listagem 1) já deverá funcionar. No entanto, se você preferir registrar as aplicações de forma explícita, poderá editar a configuração do Apache para que a seção mod_mono se pareça com o código da listagem 3 (mas é necessário deixar a linha LoadModule intacta). A listagem 3 desativa o autohosting, adiciona o manipulador do Mono para esses tipos de arquivos e define dois locais onde os aplicativos do Mono podem ser encontrados. Cada um deles está especificado como local_ virtual:local_no_disco. Recarregue o Apache e tente a página de exemplo novamente – ela ainda deve estar funcionando corretamente. No caso de aplicações diferentes, também é possível executar múltiplas instâncias independentes no servidor, cada uma com um nome – talvez para separar servidores em testes daqueles de produção, ou talvez para limitar a utilização por parte de cada usuário de forma independente. Além disso, será preciso

Linux Magazine #59 | Outubro de 2009

Listagem 3: Mono sem configuração automática 01 MonoAutoApplication disabled 02 AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd 03 MonoApplications “/:/home/username/www,/samples:/usr/share/asp. net‑demos”

Listagem 4: Múltiplos servidores 01 02 03 04 05 06 07 08 09

MonoApplications meu teste “/ my-teste: / usr / share / mono / test” <Location /my-test> testes MonoSetServerAlias </ Location> MonoApplications minha casa “/ nos-aqui: / home / user / mono” <Location /my-home> home MonoSetServerAlias </ Location>

ter as linhas LoadModule e AddHandler, citadas anteriormente, e então verificar na listagem 4 um exemplo de configuração para dois servidores. Novamente, este código deve ser incluído na seção mod_mono da configuração do Apache 2. O argumento adicional de MonoApplications é um “apelido” (alias) de uma instância específica do servidor, que então é associada a um determinado diretório. Ao adicionar o alias do servidor como segundo argumento, é possível aplicar qualquer uma das opções discutidas anteriormente. Por exemplo, a diretiva MonoListenPort nos-aqui 8080 faz o servidor nos-aqui escutar na porta 8080. Novamente, esta abordagem pode ser útil para separar os servidores e também porque diferentes aplicativos podem ter requisitos distintos.

ASP.NET Versão 2

O servidor Mono padrão é o da versão 1.1, discutida neste artigo. Para usar a versão 2, é preciso instalá-la (os pacotes já estão disponíveis) e então editar sua configuração de acordo – as diretivas que precisam ser editadas para a versão 2 são MonoServerPath e MonoPath. Em seguida, recarregue o Apache. No caso do Debian/Ubuntu, os detalhes da configuração se encontram no arquivo mod_mono.conf.

Solução de problemas

O primeiro lugar para procurar em caso de problemas é o log de erros do Apache (/var/log/apache2/error_log). Verifique também se as permissões de arquivos estão definidas corretamente; em especial, garanta que o usuário sob o qual o Apache está em execução possua as permissões adequadas para acessar o(s) diretório(s) dos aplicativos em Mono. No caso de erros de “Service Temporarily Unavailable” (Serviço temporariamente indisponível), tente alterar a diretiva MonoServerPath para apontar para /usr/bin/mod-mono-server (o diretório /usr/lib/mono/ também parece funcionar em algumas configurações, mas não em todas).  n

Mais informações [1] Projeto Mono: http://mono-project.com [2] Projeto mod_mono: http://www.mono-project.com /Mod_mono

Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/3047

69

Revista Linux Magazine  

Artigo da Revista Linux Magazine

Read more
Read more
Similar to
Popular now
Just for you