O que é IIS?
Neste post, vamos dar uma olhada de perto no IIS (Internet Information Services). Vamos olhar para o que ele faz e como funciona. Você vai aprender como habilitá-lo no Windows. E depois de estabelecermos uma linha de base com o gerenciamento do IIS usando o GUI, você vai ver como trabalhar com ele usando o CLI. Vamos começar!
O que é um servidor Web IIS?
Um servidor Web IIS roda na plataforma Microsoft .NET no SO Windows. Embora seja possível executar o IIS em Linux e Macs usando Mono, ele não é recomendado e provavelmente será instável. (Há outras opções, que apresentarei mais tarde). É versátil e estável, e tem sido amplamente utilizado na produção por muitos anos. A versão 10 é a mais actual. Uma vez instalada, você verá esta página de boas-vindas no seu navegador. “Tervetuloa!”
Mas antes de nos debruçarmos sobre a ninharia do IIS, vamos começar por definir um servidor Web num sentido geral.
O que é um servidor Web?
A Internet é boa. E a internet não pode existir sem servidores web. Mas o que é exactamente um servidor web? Vamos definir isso em abstrato para que possamos ter algum contexto de como IIS preenche essa função.
Um servidor web é um processo para hospedar aplicações web. O servidor web permite que uma aplicação processe mensagens que chegam através de portas TCP específicas (por padrão). Por exemplo, a porta padrão para tráfego HTTP é 80, e a porta para HTTPS é 443.
Quando você visita um website no seu navegador, você normalmente não especifica o número da porta a menos que o servidor web esteja configurado para receber tráfego em outras portas que não a padrão. Visitar http://www.example.com irá enviar o seu pedido para a porta 80 implicitamente. Você pode especificar o número da porta se quiser http://www.example.com:80, e https://www.example.com:443 para TLS (Transport Layer Security).
Assumindo que a configuração padrão e TLS está configurada para a sua aplicação web, o servidor web receberá todo o tráfego de entrada para as portas 80 e 443. O que o servidor web faz com o tráfego de lá depende. Existem inúmeras opções de como o servidor web pode processar esses pedidos.
Como o IIS lida com os pedidos web?
Os dois principais modelos de processo para servidores web são lidar com todos os pedidos num único tópico, ou criar um novo tópico para cada pedido. Embora o modelo de thread única (Node.js, por exemplo) tenha alguns threads de trabalhadores disponíveis, ele normalmente os usa apenas para certos tipos de trabalho, como o acesso ao sistema de arquivos. O modelo thread-per-request que o IIS (e seu primo leve IIS Express) usa irá pegar uma thread de um pool de threads para cada requisição.
Servidores web normalmente lidam com requisições usando um padrão de resposta de requisição. O cliente envia uma requisição e recebe uma resposta se tudo correr bem. O protocolo HTTP é a escolha ubíqua quando se comunica entre um cliente e um servidor web pela Internet.
Features
IIS é rico em funcionalidades. Mais comumente, o IIS é usado para hospedar aplicações web ASP.NET e sites estáticos. Ele também pode ser usado como servidor FTP, hospedar serviços WCF, e ser estendido para hospedar aplicações web construídas em outras plataformas como PHP.
Existem opções de autenticação embutidas como Basic, ASP.NET, e Windows auth. Esta última é útil se você tiver um ambiente Windows Active Directory – os usuários podem ser automaticamente registrados em aplicativos web usando sua conta de domínio. Outros recursos de segurança incorporados incluem gerenciamento de certificados TLS e vinculação para habilitar HTTPS e SFTP em seus sites, filtragem de pedidos para tráfego de lista branca ou lista negra, regras de autorização, registro de pedidos e um conjunto rico de opções de segurança específicas de FTP.
Um dos principais recursos do IIS é o pool de aplicativos. Teremos que dar uma olhada mais de perto no pool de aplicações, pois ele é um componente crítico do modelo de processo do IIS.
Um recurso de valor inestimável é o gerenciamento remoto. O IIS também pode ser gerenciado através do CLI ou usando o PowerShell. Você pode scriptar tudo, o que é ótimo se você gosta da potência que vem com a possibilidade de fazê-lo.
Por enquanto, você deve ter uma boa impressão sobre a configurabilidade e versatilidade do IIS. Você também deve estar ciente de que ele pode ser estendido para servir (pun pretendido) muitos propósitos além de hospedar aplicações ASP.NET. Através da extensão, o IIS torna-se um servidor web altamente versátil e estável para a plataforma Windows. Vamos dar uma olhada em como instalar o IIS no Windows 10. (O mesmo processo se aplica ao Windows 7 e 8.)
Configurar IIS
Chamar-lhe “instalar” seria um pouco demais. Afinal, o IIS é uma funcionalidade no Windows. O que você realmente precisa fazer é habilitar o recurso. No Windows 10, você pode pressionar a tecla Windows e digitar “turn win”. Você deve ver “Ligar ou desligar recursos do Windows”
Selecione isso para abrir o diálogo “Recursos do Windows”. A partir daqui, você pode ativar todos os tipos de recursos adicionais, incluindo PowerShell 2.0, uma profunda árvore de diretórios de opções para Internet Information Services (IIS), e um subsistema para Linux. (Devo dizer que esta última já me veio a calhar inúmeras vezes, como quando uma aplicação Node tem alguns scripts shell como parte da compilação npm).
A opção Internet Information Services (IIS) é a que nós queremos!
>
Apenas clicando na caixa para ela lhe dará um bom ponto de partida. Você pode, no entanto, querer ir mais fundo. World Wide Web Services > Características de Desenvolvimento de Aplicações é onde você habilita ASP.NET, CGI, e WebSocket Protocol. Pode sempre voltar a isto se precisar de fazer ajustes.
Para activar o IIS no Windows Server, pode usar o PowerShell ou o Server Manager para instalar o “Web Role (IIS)”. Veja este passo para mais detalhes.
Após ter todas as funcionalidades desejadas do IIS seleccionadas, clique em OK e vá buscar uma chávena de café fresco. Quando a instalação estiver concluída, você pode chegar ao GUI IIS digitando “IIS” na busca do Windows ou executando “inetmgr.”
O GUI
Antes de entrarmos em detalhes, quero dar-lhe uma rápida introdução ao IIS Manager. Destaquei as áreas de interesse porque esta coisa é uma grande confusão. É preciso habituar-me, mas há algumas coisas que posso oferecer para ajudar, já que se trata de se deslocar por aqui.
Primeiro de tudo, há três painéis. A esquerda tem os servidores conectados. (Você também pode se conectar a servidores remotos.) O painel do meio é onde você encontra todos os recursos como segurança da aplicação, registro, filtragem e redirecionamento. Ou quando você seleciona “Content View”, você verá o conteúdo aqui no meio, em vez disso. À direita está o painel de ações. Isto muda dependendo do contexto selecionado.
Não tenho certeza porque aquele pequeno ícone extra no canto inferior direito está lá, mas você pode redimensionar a janela lá embaixo também.
TIP: você pode clicar com o botão direito na maioria dos ícones e usar o menu de contexto para executar as ações mais comuns.
Se você expandir a “conexão” no painel de conexões, a primeira coisa que você deve ver é “Application Pools,” seguido por “Sites”. Vamos focar naqueles das próximas duas seções.
Pols de aplicações…O que são e como funcionam?
Aqui está um olhar sobre os pools de aplicações que são configurados por padrão no IIS. Como você pode ver, existem combinações de v2.0 e v4.0, e de classic e integrated.
O pipeline integrado difere do pipeline clássico em que o ASP.NET está integrado no pipeline de requisição do IIS. No modo clássico, os pedidos tinham que passar por um pipeline para IIS e outro para ASP.NET. O modo integrado tem sido o preferido desde que o IIS 7 foi lançado com o Windows Server 2008 e Vista. Não use o modo clássico, a menos que seja necessário. O mesmo vale para a v2.0. Eles são apenas para suporte a legados. Na verdade, se você não precisa desses pools de aplicativos, você pode simplesmente ir em frente e removê-los. Nós não precisamos de nenhum cruft por aí!
Um único pool de aplicações tem zero para muitos processos de trabalhadores (w3wp.exe) rodando a qualquer momento. Os processos worker executam instâncias da sua aplicação.
Criar Piscinas de Aplicações
No painel “Ações” no lado direito da janela do IIS, clique em “Adicionar Pool de Aplicações…” para abrir o diálogo. É bastante simples. Você geralmente pode apenas digitar um nome e pressionar “enter” ou clicar em “OK”.”
Você também pode adicionar um pool de aplicativos clicando com o botão direito do mouse no nó “Application Pools” no painel “Connections”. A dica de antes já prova seu valor!
Utilizadores do pool de aplicativos
IIS cria um usuário virtual para cada pool de aplicativos (nomenclatura comum para pool de aplicativos). Estes processos de trabalhadores são executados como usuário virtual do pool de aplicativos por padrão. Eles podem ser executados como um usuário diferente (uma conta de domínio, por exemplo) se precisarem de permissões especiais.
Even embora eu tenha removido os pools de aplicativos do servidor, os usuários virtuais vivem em!
Estes usuários virtuais ainda recebem suas próprias pastas padrão, como “Desktop”, “Music” e “Pictures”. Eles não mastigam tanto espaço (110 MB), mas uma vez que o pool de aplicativos é removido, essas pastas de usuário são cruft e podem ser excluídas.
Reciclagem do pool de aplicativos
Uma característica chave dos pools de aplicativos é a reciclagem. Por padrão, os pools de aplicativos reciclam a cada 1740 minutos (29 horas), e quando o arquivo de configuração é alterado. Você pode configurar a reciclagem para atender às suas necessidades. A reciclagem de pools de aplicativos libera a memória consumida por aplicativos em execução em um pool de aplicativos. A reciclagem pode impedir que processos em execução mastiguem toda a memória do seu servidor.
Que tipos de coisas usam memória no seu processo? Tudo na pilha e variáveis e propriedades heap-static, qualquer coisa na cache de memória, quaisquer objetos que são referenciados por outro objeto, quaisquer blocos de memória esperando para serem coletados, você obtém a imagem.
Você pode escolher quais eventos você gostaria de logar (ou não logar). Como você pode ver, nem todas as opções são mostradas no diálogo anterior – “Runtime recycling events” (Eventos de reciclagem em tempo de execução) não parecem ser configuráveis. Isto não é inteiramente verdade.
A reciclagem inicia um novo processo e depois gira para baixo o processo actual. O novo processo terá, como você esperaria, um novo PID. Você pode mudar este comportamento assim como outros comportamentos de reciclagem em “Configurações Avançadas…”. Na verdade, você pode editar qualquer uma das configurações de reciclagem neste menu. O diálogo “Reciclagem…” é redundante a esse respeito. No entanto, você pode desativar a reciclagem para alterações de configuração aqui. Você provavelmente não quer, no entanto. Sua aplicação em execução não obteria as atualizações de configuração.
Nota que “reciclagem sobreposta” implica que é possível ter mais de uma instância da aplicação. Você deve desabilitar isso somente se a sua aplicação requerê-la. A reciclagem sobreposta evita perturbações que ocorreriam se a reciclagem esperasse pelo processo atual para drenar os pedidos antes de iniciar o novo processo. Em outras palavras, nenhuma nova requisição seria tratada até que as requisições atuais fossem completadas ou o período de tempo limite configurável tivesse passado (90 segundos por padrão).
Configuração Avançada
Existem demasiadas configurações de pool de aplicativos para iterar em detalhes neste post. Por enquanto, uma breve visão geral terá que ser suficiente. Rapidamente eu vou chacoalhar alguns pontos sobre cada uma das áreas de “Configurações Avançadas”, como mostrado abaixo.
- A configuração “Geral” vai permitir que você
- Altere .NET CLR versões
- Alterar 32-bit applications
- Alterar modo pipeline
- Definir comprimento da fila (1000 pedidos por padrão)
- Definir para executar sempre ou sob demanda
- A opção “CPU” cobre
- Ajuste da CPU
- Afinidade do processador
- “Process model” permitirá que você escolha as configurações para
- Identidade
- Tempo de espera
- Processos de trabalhadores máximos
- Monitorização da saúde (Deve desligar isto localmente para depuração porque um depurador parado não responde ao ping)
- “Process Orphaning” é útil para depuração de processos não responsivos
- “Rapid-Fail Protection” é bom para quando você quer configurar respostas de balanceamento de carga a falhas
Sites
“Sites” é o nó próximo a “Application Pools” no nó servidor do gerenciador IIS. É aqui que você adiciona e gerencia sites e sites FTP (se instalado). Enquanto os pools de aplicativos têm um diálogo de configurações avançadas, os sites têm muito mais opções de configuração! Sites têm muitas funcionalidades, cada um com suas próprias configurações.
Estas funcionalidades se enquadram em três cabeçalhos no gerenciador IIS:
- ASP.NET (se você tiver instalado)
- IIS
- Gerenciamento
Menu de contexto
Você pode alternar entre “Funcionalidades” e “Conteúdo” quando você tem um site selecionado. Você pode clicar com o botão direito do mouse no site e abrir a pasta no menu de contexto, selecionando “Explorar”. Há outras coisas que você pode fazer a partir deste menu de contexto, tais como editar permissões.
Isso na verdade apenas traz à tona as propriedades da pasta do site. A partir daí, você terá que mudar para a aba “Segurança” para realmente editar as permissões.
>Em típica moda Windows, há várias outras formas de editar permissões. Veja seus sites favoritos de ajuda do Windows para mais informações sobre como definir permissões de pastas.
Você pode executar várias tarefas comuns a partir do menu de contexto. Dentro do item “Gerenciar site”, você pode iniciar e parar o site, abri-lo no seu navegador e ir para configurações avançadas. Nós definitivamente vamos querer olhar para elas, mas primeiro, vamos falar sobre o que você vai ver quando você selecionar “Edit Bindings…”, que também está disponível no painel “Action” como “Bindings…”.
Bindings
Você vai precisar adicionar uma encadernação de site no diálogo “Bindings…” se você estiver habilitando HTTPS para o seu site. Você também pode definir lá o nome do host e os números das portas. Se você tiver ligações adicionais para o seu site, você pode adicioná-las aqui também. Talvez você esteja usando o net.tcp ou um net.pipe bindings (se você adicionou os recursos no servidor e ativou-os para o site). Ou você pode definir um endereço IP aqui.
É possível rodar mais de um site escutando na mesma porta. Para fazer isso, você usará nomes de host diferentes. Por exemplo, você pode ter admin.example.com vinculado ao seu site de administração e blog.example.com vinculado ao seu blog. Todo o tráfego do site example.com iria para o mesmo IP (load-balancer/servidor), mas o IIS usaria o cabeçalho do host para direcionar o tráfego para o site apropriado. Estes são úteis também para aplicativos white-label: acme.example.com, foo.example.com, bar.example.com.
Basic settings
“Basic Settings…” é o mesmo diálogo que você obtém quando você configura o site pela primeira vez. Você provavelmente não precisará ir lá a menos que queira mudar o pool de aplicativos ou a localização do site ou se quiser se conectar como um usuário diferente, em vez de IUSR (pass through). Se você precisar usar uma conta de serviço para acessar o diretório do site, você pode escolher “Connect as…” no diálogo “Edit Site”.
Note: você deve ter o cuidado de proteger quaisquer diretórios que você usar no IIS. Você pode se beneficiar da leitura sobre como o diretório padrão inetpub é protegido.
Sub-sites e diretórios virtuais
Você pode hospedar várias aplicações e diretórios virtuais sob um site. Os aplicativos podem ser executados em seus próprios pools de aplicativos, mas os diretórios virtuais não podem. Como mostrado abaixo, eu configurei um aplicativo administrativo e um diretório virtual de blog sob Site2. Eles podem ser acessados usando http://localhost/admin e http://localhost/blog. Ambos responderão com páginas de erro incorporadas a menos que haja algo nos diretórios.
Os diretórios de origem para sub-aplicações e diretórios virtuais não precisam ser subdiretórios do site pai. Você pode manter esses diretórios onde você desejar. Você pode querer mapear alguns recursos comuns da web (imagens ou arquivos JS) para um caminho relativo para vários sites. Os directórios virtuais são perfeitos para isto.
Documentos por defeito e de erro
Quando um utilizador visita a raiz do seu site (www.example.com/), ser-lhe-á apresentado um documento por defeito. Os valores por defeito são mostrados abaixo. Você pode adicionar seus próprios documentos, remover documentos, ou desabilitá-los completamente. Se os desactivar, o utilizador terá um ecrã de erro 403 feio, a não ser que tenha dado permissão para listar o conteúdo das pastas (não recomendado). É melhor ter um documento padrão no lugar.
Pus um documento de índice em cada diretório: o site, a aplicação, e o diretório virtual.
- Site2
- Admin
- index.html
- Blog
- index.html
- index.html
- Admin
- http://localhost/ irá carregar o documento padrão no Site2/index.html
- http://localhost/admin/ irá carregar o documento padrão no Site2/Admin/index.html
- http://localhost/blog/ irá carregar o documento padrão no Site2/Blog/index.html
Se você está preocupado com o IIS ocupando memória e CPU na sua máquina, não o faça. A menos que os processos do trabalhador estejam rodando (e tratando de pedidos com processamento pesado), ele fica ocioso. Se você estiver vendo uso pesado de CPU, este guia de solução de problemas pode ajudar, desde que você esteja usando ASP.NET.
CLI e gerenciamento remoto
AppCmd.exe
AppCmd é a ferramenta CLI embutida para configuração e gerenciamento do IIS. Você pode usá-la para criar sites e pools de aplicativos, vincular diretórios virtuais e editar configurações. Vamos ver algumas coisas que ele pode fazer.
Primeiro de tudo, adicione %systemroot%\system32\inetsrv\ ao seu caminho para que você possa executar o appcmd a partir de um prompt de comando em qualquer local.
Executar o prompt de comando como administrador.
setx PATH "%PATH%;%systemroot%\system32\inetsrv\"
Executar os seguintes comandos para explorar appcmd:
- Executar appcmd /? para ver o texto de ajuda
- Ver que aplicativos estão rodando com appcmd list app
- Utilizar appcmd list backups para ver backups da sua configuração IIS
>
Adicionar site
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81:
Agregar aplicativos da lista novamente. Você não verá o novo site que você adicionou porque ele não é considerado um aplicativo. Se você for ao GUI e atualizar seus sites, você verá o novo site lá, mas ele estará quebrado. Precisamos adicionar um aplicativo usando appcmd.
appcmd add app /site.name:"Dummy Site" /path:"/"
Isso só adicionará o aplicativo ao site na raiz. Ele irá criar um aplicativo chamado “Dummy Site/”. Ainda precisamos ligar o aplicativo a um diretório virtual e então apontar isso para um caminho físico.
appcmd add vdir /app.name:"Dummy Site/" path:"/"appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"
Esta é a maneira verbosa de usar o appcmd para criar um site IIS. Há uma maneira mais fácil.
O caminho EZ
Você pode salvar muitas teclas ao criar o site se você definir o parâmetro physicalPath no primeiro comando. Isto fará tudo de uma só vez:
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"
Mas conhecer os outros comandos dá-lhe uma melhor ideia de como uma aplicação IIS realmente funciona debaixo do capô. No passado, eu usei o appcmd no script pós-construção dos arquivos de projeto ASP.NET para garantir que o site fosse configurado localmente em novas máquinas de desenvolvedores. Você também pode fazer um backup e restauração da configuração do IIS usando appcmd.
Desenvolvendo atualizações
Para lhe dar mais uma idéia sobre o uso do appcmd, considere fazer o seguinte:
- Criar uma pasta “sites”.
- Criar uma subpasta para cada site.
- Displantar versões para subpastas sob cada uma delas.
- Etapa novas versões.
- Utilizar appcmd para atualizar o site para usar a nova pasta.
Dar um app chamado “Hello World” apontando para C:\Sites\HelloWorld\1.0.0 e um novo build “1.0.1” que foi encenado em C:\Sites\HelloWorld\1.0.1 , quando for hora de ir ao ar, então você pode usar o seguinte comando para inverter o site para a nova versão:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.1"appcmd recycle apppool /apppool.name:defaultapppool
E se você precisar reverter o seu site, execute o seguinte:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.0"appcmd recycle apppool /apppool.name:defaultapppool
Aqui está um ótimo guia da Microsoft com mais informações sobre o uso do AppCmd.
IIS reset
“iisreset” é um executável separado usado para parar, iniciar, reiniciar o IIS ou evento para reiniciar o computador (/REBOOT). Você pode passar-lhe um parâmetro “computername” para que ele controle o IIS em outro computador. Você precisará executá-lo como administrador. Muitos desenvolvedores e administradores de sistema gostam de usar isto após uma implementação, e isso também não é uma má idéia!
PowerShell
PowerShell tem um poderoso conjunto de ferramentas para gerenciar o IIS. Também pode enviar o comando iisreset remotamente usando Invoke-Command -ComputerName “computername” -ScriptBlock {iisreset}, desde que permita a invocação remota de comandos arbitrários nos seus servidores – e isso geralmente não é uma boa ideia!
Apesar das minhas próprias preocupações de segurança em enviar comandos remotos arbitrários usando o PowerShell, o cmdlet de administração do IIS são realmente úteis para a administração do servidor web ao estilo DevOps. Pode verificar esta documentação para administração do IIS usando o PowerShell para ter uma ideia do que pode fazer.
Desactivar
Embora todas as funcionalidades, configurações, e comandos que cobrimos neste post, apenas riscamos a superfície. Cada recurso tem suas próprias configurações, e há muitas extensões que podem ser adicionadas instalando a extensão Web Platform Installer.
E com isso, vamos concluir este post e o servidor IIS:
iisreset /stop
Com APM, métricas de saúde do servidor e integração de log de erros, melhore o desempenho da sua aplicação com Stackify Retrace. Experimente hoje mesmo a sua versão de avaliação gratuita de duas semanas