Force www. and https in nginx.conf (SSL)

前端 未结 4 1136
梦谈多话
梦谈多话 2021-02-05 20:48

After purchasing a SSL certificate I have been trying to force all pages to secured https and to www.

https://www.exampl.com is working and secure but only if type it i

4条回答
  •  情书的邮戳
    2021-02-05 21:06

    The following solution seems to be clear and simple, everything defined in one server block. So with this setup I force everything to https://www.domain.tld, so both handlers are here non-HTTPS and non-WWW on HTTPS. There are two IF's but if you don't want to duplicate entire SSL block two times to handle it... this is the way to do it.

    server {
        listen 80;
        listen 443 ssl;
    
        server_name domain.tld www.domain.tld;
    
        # global HTTP handler
        if ($scheme = http) {
            return 301 https://www.domain.tld$request_uri;
        }
    
        # global non-WWW HTTPS handler
        if ($http_host = domain.tld){
            return 303 https://www.domain.tld$request_uri;
        }
    }
    

    And even better solution to avoid IF's:

    # Redirect all traffic from HTTP to HTTPS
    server {
        listen 80;
    
        server_name example.com www.example.com;
    
        # Destination redirect base URI
        set $RURI https://www.example.com;
    
        location / {return 301 $RURI$request_uri;}
    }
    
    # Redirect non-WWW HTTPS traffic to WWW HTTPS
    server {
        listen 443 ssl;
        # NOTE: SSL configuration is defined elsewhere
        server_name example.com;
        return 301 $scheme://www.$host$request_uri;
    }
    
    # MAIN SERVER BLOCK
    server {
        listen 443 ssl;
        # NOTE: SSL configuration is defined elsewhere
        server_name www.example.com;
    }
    

提交回复
热议问题