nGinx Redirecionando para https: // em todo URL

2

Estou tentando fazer com que o seguinte funcione para que, independentemente do que você digitar na barra de URL, você sempre vá para " https://www. ". Até agora www. não vai para https://www. e https:// não vai para https://www.

Abaixo está o meu código. O que precisa ser feito?

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

    server {
        listen       80;
        server_name  www.example.com;
        #rewrite ^(.*) https://www.example.com$1 permanent;
        root /home/knownsrv/public_html;

        listen       443 ssl;
        #server_name  example.com www.example.com;
        #root /home/knownsrv/public_html;
        ssl_certificate      /root/knownsrv.crt;
        ssl_certificate_key  /root/knownsrv.key;
        #ssl_client_certificate /root/chain.cer;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /home/knownsrv/public_html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
location ~ \.php$ {
            root           /home/knownsrv/public_html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}
}
    
por K Mack 18.05.2013 / 04:14

2 respostas

1

Você está supercomplicando isso ...

Para redirecionar o HTTP com ou sem www para HTTPS com www:

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

Isso deixa apenas a situação do HTTPS sem www, que pode ser abordada da seguinte forma:

server {
    listen 443 ssl;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
    ssl_certificate /root/knownsrv.crt;
    ssl_certificate_key /root/knownsrv.key;
}

Em seguida, basta adicionar seu vhost SSL para www.example.com . Tudo o resto (ou seja, faltando www, e / ou não-ssl) será redirecionado para ele. Não há necessidade de if (o que pode degradar seriamente o desempenho do nginx).

    
por 31.01.2015 / 19:37
-1

No bloco do servidor, adicione:

if ($host !~* ^www\.) {
        rewrite ^(.*)$ https://www.website.com$1 permanent;
}

Portanto, sua configuração deve ser parecida com:

server {
    listen  80;
    server_name website.com www.website.com;
    rewrite ^(.*) https://www.website.com$1 permanent;
}

server {
    listen 443 ssl;
    server_name website.com www.website.com;
    root /home/knownsrv/public_html;

    if ($host !~* ^www\.) {
        rewrite ^(.*)$ https://www.website.com$1 permanent;
    }

    ssl_certificate /root/knownsrv.crt;
    ssl_certificate_key /root/knownsrv.key;

    location / {
        root /home/knownsrv/public_html;
        index index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    location ~ \.php$ {
        root            /home/knownsrv/public_html;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}
    
por 18.05.2013 / 06:13

Tags