Nginx http redirecionar para https

1

Eu tenho configuração assim:

server {
    listen 80;
    server_name example.pl *.example.pl;
    rewrite ^/(.*)$ http://www.example.pl/$1 permanent;

}

server {
    listen 80;

    listen 443 ssl;

    ssl on;
    ssl_certificate /opt/nginx/ssl/server.pem; 
    ssl_certificate_key /opt/nginx/ssl/server.key;

    server_name www.example.pl;
    root /var/www/example/public/;   # <--- be sure to point to 'public'!
}

Agora, todos os subdomínios, como xx234.example.pl, são reescritos para o link

Agora eu tento definir https. O link funciona bem, mas não consigo redirecionar o tráfego de http para https. Quando faço isso:

server {
    listen 80;
    server_name example.pl *.example.pl;
    #rewrite ^/(.*)$ http://www.example.pl/$1 permanent;
    return         301 https://$server_name$request_uri;
}

É redirecionado, mas para o link sem www. Como redirecionar corretamente. Eu quero ter essa mesma configuração, mas com https.

Isso também não funciona:

server {
    listen 80;
    server_name example.pl *.example.pl;
    rewrite ^/(.*)$ https://www.example.pl/$1 permanent;

}
    
por Wordica 12.06.2017 / 15:11

2 respostas

1

Você tem dois problemas:

Primeiro você mudou de www.example.pl para $server_name (é por isso que o www. desapareceu).

Em segundo lugar, seu outro bloco de servidor já está manipulando http://www.example.pl .

Remova o listen 80; do segundo bloco server , para que ele manipule somente https de conexões. Use return 301 https://www.example.pl$request_uri; para executar o redirecionamento para o esquema e o nome do servidor corretos.

Por exemplo:

server {
    listen 80;
    server_name example.pl *.example.pl;
    return 301 https://www.example.pl$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.pl;
    ...
}
    
por 12.06.2017 / 16:14
1

server_name Sets names of a virtual server, for example:

server {
    server_name example.com www.example.com;
}

The first name becomes the primary server name.

Agora, como você tem server_name example.pl *.example.pl; , o example.pl se tornou o nome do servidor principal que você está usando em

return 301 https://$server_name$request_uri;

Não é surpresa que isso redirecione para example.pl em vez de www.example.pl . Para alterá-lo, basta adicionar www.example.pl no começo:

server {
    listen 80;
    server_name www.example.pl example.pl *.example.pl;
    return 301 https://$server_name$request_uri;
}

Agora, você também pode remover a seção listen 80; do seu SSL server{} , já que se tornou desnecessária.

    
por 12.06.2017 / 16:24

Tags