Melhor maneira de redirecionar todos os HTTP para HTTPS no IIS

26

Queremos que TODOS os sites em nosso servidor da Web (IIS 10) imponham o SSL (ou seja, redirecionem o HTTP para HTTPS).

No momento, estamos 'exigindo SSL' em cada site e configurando um 403 errormanipulador para executar um 302 redirectendereço https no site específico.

Isso funciona muito bem. Mas é uma dor de se fazer em todos os sites, há muito espaço para erros humanos.

Idealmente, eu gostaria de criar uma permanente 301 redirectem todas HTTP://*aHTTPS://*

Existe uma maneira simples de fazer isso no IIS?

userSteve
fonte
Você não pode escrever um script para fazer essa alteração em todos os sites, o que reduziria a carga administrativa e também ajudaria a evitar erros de digitação?
Todd Wilcox
1
O título está incorreto. Eu acho que ele tinha a intenção de ler "Melhor maneira de redirecionar todo HTTP para HTTPS no IIS"
Mick
@ToddWilcox, você pode dar um exemplo desse script?
usar o seguinte comando
Não use IIS

Respostas:

40

O IIS URL Rewrite Module 2.1 para IIS7 + pode ser seu amigo. O módulo pode ser baixado a partir do IIS URL Rewrite . Usando o URL Rewrite Module e a URL Rewrite Module 2.0 Reference Reference explicam como usar o módulo.

Após a instalação do módulo, você pode criar um redirecionamento para todo o host usando o Gerenciador do IIS. Selecione Regravação de URL , Adicionar Regra (s) ... e Regra em branco .

Nome:
Redirecionar para HTTPS

URL de correspondência URL
solicitado: Matches the Pattern
Uso: Wildcards
Padrão: *
Ignorar maiúsculas e minúsculas: Verificado

Condições
Agrupamento lógico: Match Any
Entrada da condição : {HTTPS}
Verifique se a sequência de entrada: Matches the Pattern
Padrão: OFF
Ignorar maiúsculas e minúsculas: Verificado
Rastrear grupos de captura nas condições: Não verificado

Variáveis ​​do servidor
Deixe em branco.

Ação
Tipo de ação: Redirect
URL de redirecionamento: https://{HTTP_HOST}{REQUEST_URI}
anexar sequência de consultas: Não marcado
Tipo de redirecionamento: Permanent (301)

Aplique a regra e execute IISReset (ou clique em Reiniciar no Gerenciador do IIS)

Como alternativa, após a instalação do módulo, você pode modificar o arquivo applicationHost.config da seguinte maneira:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>
sippybear
fonte
Isso funcionará para redirecionamentos 301 permanentes?
usar o seguinte comando
@userSteve conforme a resposta acima, você pode escolher o tipo de redirecionamento.
BE77Y
@userSteve gritos, sim você deve ser capaz de mudar o tipo de redirecionamento para 301 e obter os mesmos resultados
sippybear
1
@sippybear mais uma pergunta - o que significa input = "{HTTPS}"? Deve ser {HTTP}, pois essa será a entrada e HTTP a saída?
usar o seguinte comando
3
{HTTPS} é uma variável que você consulta para descobrir se a conexão está protegida. Você pode ler mais sobre isso aqui: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… Nesse caso, estamos verificando se {HTTPS} está "desativado" e, em seguida, redirecionando se é
sippybear
1

Minha pesquisa mostra que essa pode ser uma maneira melhor de redirecionar:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>
Anjo caído
fonte
1
Você pode explicar por que isso é melhor?
userSteve
Me desculpe, eu não posso explicar isso sozinho, basta ler em alguns lugares que a sintaxe é melhor.
Fallen Angel
1
você tem alguma fonte?
dangel
1
Essa é exatamente a mesma regra de serverfault.com/a/893804/7184 , mas escrita usando expressões regulares e o agrupamento Match All. Uma vantagem é que a expressão de regra usa padrões de regra e é terser.
bzlm
Estou no IIS 10 e a resposta selecionada não funcionou para mim. Por alguma razão, o IIS não reconheceu a sintaxe como uma regra válida. Colei seu código e ele funcionou imediatamente, obrigado por compartilhar.
Jordan