Problemas ao redirecionar URLs de sites antigos para URLs de novos sites com o NGINX

0

Eu tenho tentado alterar os URLs de base em minha pilha Atlassian com pouco sucesso. Servidor Ubuntu 16.04LTS com proxy reverso Nginx. IPs internos e externos são atribuídos a diferentes NICs. Sim, esta mesma pergunta foi postada no stackoverflow, mas eu imaginei que eu tentaria obter a exposição máxima nessa.

Exemplo de arquivo do servidor Nginx:

server {
  listen                80;
  listen                443 ssl;
  server_name           projects.old-site.com;
  access_log            off;
  return 301 $scheme://projects.new-site.com;
}

server {
  listen                80;
  server_name           projects.new-site.com;
  access_log            off;

  client_max_body_size  100M;

  return 301 https://$host$request_uri;
}

server {
  listen                443 ssl;
  server_name           projects.new-site.com;

  client_max_body_size  100M;

  ssl_certificate       /path/to/new-site.crt;
  ssl_certificate_key   /path/to/new-site.key;

location /
...output omitted

O que funciona: redirecionamentos HTTP e redirecionamentos HTTP para HTTPS. O link redireciona corretamente para o link . Acesso direto digitando apenas o link (também redireciona corretamente para HTTPS).

O que não é: link para o link redirecionamento.

Ainda mais estranho, ao tentar acessar o link para testar o redirecionamento, os navegadores ainda não estão sendo veiculados .old-site. com, mas eles estão recebendo o certificado SSL expirado para esse domínio.

Em nenhum lugar do meu sistema os certificados expirados estão acessíveis neste servidor. Eu segui o guia de atualização de URL da Atlassian, alterando apenas os arquivos server.xml e de dentro das telas de administração do aplicativo (quando eles estão acessíveis). Todos os servidores DNS estão apontando para os IPs corretos. Eu definitivamente estou sentindo falta de algo, mas estou perdido. Isso foi repetido em dois servidores Ubuntu 16.04 diferentes com o Nginx e as mesmas versões do software Atlassian instaladas.

Por favor ajude.

    
por jrea 15.12.2017 / 18:10

1 resposta

1

Você tem alguns problemas com suas configurações.

Vamos passar por cada bloco de servidor individual aqui individualmente.

Bloco 1: projects.old-site.com - > redireccionamento de projects.new-site.com

Isso é o que você nos forneceu:

server {
    listen                80;
    listen                443 ssl;
    server_name           projects.old-site.com;
    access_log            off;
    return 301 $scheme://projects.new-site.com;
}

Você está perdendo um lote das coisas aqui para configuração:

  • ssl_certificate directive - necessário saber o que o certificado SSL serve para o domínio.
  • ssl_certificate_key directive - o arquivo de chave de certificado SSL que corresponde ao certificado SSL para o site de projetos 'antigo'.

Você está fazendo um redirecionamento 301 para corresponder ao esquema, mas por que está fazendo isso se direcionar o não-SSL para SSL no bloco de servidores 2? Apenas redirecione para o site HTTPS, e inclua o $request_uri por razões óbvias (você não passa o mesmo URI de solicitação até que as coisas não funcionem corretamente).

Seu bloco de servidores correto deve ficar mais parecido com isto:

server {
    listen 80;
    listen 443 ssl;
    server_name projects.old-site.com;

    ssl_certificate /path/to/valid/projects.old-site.com/certificate;
    ssl_certificate_key /path/to/valid/projects.old-site.com/certificate.key;

    access_log off;
    return 301 https://projects.new-site.com$request_uri;
}

Bloco # 2: http - > Redirecionamento de https para projects.new-site.com

Você nos deu isto:

server {
    listen                80;
    server_name           projects.new-site.com;
    access_log            off;

    client_max_body_size  100M;

    return 301 https://$host$request_uri;
}

Você não tem muitos problemas aqui, mas vamos não aceitar $host globalmente aqui (não precisamos disso, sabemos onde queremos que acabe), e nós não precisa de client_max_body_size . Redirecionamentos 301 não respeitam isso de qualquer maneira.

Você deve acabar com isso:

server {
    listen                80;
    server_name           projects.new-site.com;
    access_log            off;

    return 301 https://projects.new-site.com$request_uri;
}

Bloco 3: https://projects.new-site.com

Agora, para o seu terceiro bloco. * Sem o bloco de servidores inteiro e todas as diretivas de configuração, não podemos ajudar adequadamente na configuração do bloco.

Você nos deu isto:

server {
    listen                443 ssl;
    server_name           projects.new-site.com;

    client_max_body_size  100M;

    ssl_certificate       /path/to/new-site.crt;
    ssl_certificate_key   /path/to/new-site.key;

    ...
}

Não há nada realmente errado com esse bloco, no entanto, a menos que você precise da diretiva client_max_body_size do seu aplicativo de back-end, provavelmente deverá removê-lo.

    
por Thomas Ward 15.12.2017 / 18:31