AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 688795
Accepted
Drifter104
Drifter104
Asked: 2015-05-06 08:30:35 +0800 CST2015-05-06 08:30:35 +0800 CST 2015-05-06 08:30:35 +0800 CST

Nginx 301 redireciona https para http

  • 772

Eu tenho um problema estranho com um / à direita

Estou usando o nginx e está funcionando corretamente com uma pequena exceção.
Eu tenho a seguinte configuração de site

    server {
listen         80;
return         301 https://$server_name$request_uri/;
server_name    sub1.sub2.domain.com;
}
    server {
 listen              443 ssl; # The ssl directive tells NGINX to decrypt
                              # the traffic
 server_name         sub1.sub2.domain.com;
 ssl_certificate     /etc/nginx/ssl/sub1.sub2.domain.com/server.crt; # This is the certificate file
 ssl_certificate_key /etc/nginx/ssl/sub1.sub2.domain.com/server.key; # This is the private key file
 location / {
            proxy_pass http://1.1.1.1:8880;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    }
}

Eu tenho um serviço de autenticação externa executando e protegendo uma subpasta chamada segura, portanto, se uma solicitação de /secure ou /secure/ for solicitada, ela será enviada para o serviço de autenticação externa. Depois de autenticados, eles são redirecionados de volta para o url solicitado inicialmente. Se após a autenticação eles solicitarem /secure/ tudo funcionará perfeitamente. Se eles digitarem /secure (sem / à direita), o nginx fará um redirecionamento 301 após a autenticação e substituirá https por http, para que eles acessem http://sub1.sub2.domain.com/secure e, em seguida, façam outro redirecionamento de volta para https

Pelo que li aqui http://nginx.org/en/docs/http/ngx_http_core_module.html#location este é o comportamento correto, mas a solução para definir /secure/ e /secure como arquivos de localização separados não parece funcionar e também não menciona nada nesse exemplo sobre a mudança de https para http. Qualquer ajuda seria muito apreciada.

nginx
  • 3 3 respostas
  • 3608 Views

3 respostas

  • Voted
  1. Michael Hampton
    2015-05-06T09:51:25+08:002015-05-06T09:51:25+08:00

    Você está adicionando explicitamente a barra final em seu redirecionamento:

    return         301 https://$server_name$request_uri/;
    

    Isso obviamente não é o que você quer.

    Portanto, não adicione uma barra à direita:

    return         301 https://$server_name$request_uri;
    
    • 2
  2. Best Answer
    Xavier Lucas
    2015-05-06T09:17:43+08:002015-05-06T09:17:43+08:00

    Seu aplicativo é responsável por isso e isso porque você precisa encaminhar o esquema atual com cabeçalhos extras, como X-Forwarded-Protodesde que você desativou , o proxy_redirectque significa que os redirecionamentos são deixados intactos de seu servidor upstream e enviados diretamente aos visitantes sem que o nginx o torne relativo ao contexto de localização ou ao esquema sendo usado no bloco de servidor atual.

    Portanto, corrija-o ou use o nginx de proxy_redirectuma maneira relevante.

    • 1
  3. Drifter104
    2015-05-07T02:06:23+08:002015-05-07T02:06:23+08:00

    Acontece que a documentação estava certa (quem diria), eu introduzi mais problemas ao tentar resolver o primeiro problema do trailing /

    Consegui corrigir o problema fazendo as seguintes alterações.

    return         301 https://$server_name$request_uri;
    

    (Removendo o / à direita para o redirecionamento http)

    location = /secure {
                return  301 https://$server_name$request_uri/;
    }  
    

    Isso realiza um redirecionamento para quem não colocar / no final do seguro antes de ir para o serviço de autenticação.

    proxy_redirect http:// $scheme://;  
    

    Isso reescreve cada redirecionamento http do aplicativo para https

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve