2016-07-15 9 views
1

Ich habe Probleme beim Umleiten meiner nicht www URLs zu www und https.nginx Umleitung nicht www zu www und https für domain.com und subdomain

Was ich will:

http://domain.com 
http://www.domain.com 
https://domain.com 

zu https://www.domain.com umleiten soll.

http://api.domain.com 

sollte umleiten zu https://api.domain.com

I seperata ssl Schlüssel für domain.com und api.domain.com haben. Die SSL-Einstellungen für api.domain.com werden über die node.js-App gehandhabt. Außerdem domain.com verwendet ein Root-Dokument und api.domain.com ist mit einer node.js Anwendung auf Port proxy_pass 1336

Was ich versucht:

# route non ssl api to ssl 
server { 
    listen 80; 
    server_name api.domain.com; 
    return 301 https://api.domain.com; 
} 

# main ssl route for api.domain.com 
server { 
    listen 443 ssl; 

    server_name api.domain.com; 

    location/{ 
     proxy_pass https://localhost:1337; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 

# route non ssl to www ssl 
server { 
    listen  80; 
    server_name www.domain.com domain.com; 
    return  301 https://www.domain.com; 
} 

# route non www ssl to ssl 
server { 
    listen  443 ssl; 
    server_name domain.com; 
    return  301 https://www.domain.com; 
} 

# main ssl route for domain.com 
server { 
    listen 443 ssl; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; 

    server_name www.domain.com; 

    location/{ 
     root /var/www/domain.com/www; 
    } 
} 

Routen, die wie erwartet arbeiten: https://www.domain.comhttp://domain.com http://www.domain.com

Problem:

https://domain.com -> ungesichert verbinden Ion, weil es versucht, das CERT von api.domain.com zu verwenden (diese, im Cache gespeichert werden könnten, weil vielleicht habe ich versucht, es vor einer anderen Art und Weise, die nicht in Ordnung war)

https://api.domain.com-> Umleitungen an https://domain.com

http://api.domain.com -> Umleitungen an https://domain.com

nginx Version: nginx/1.4.6 (Ubuntu)

Antwort

3

ich daran zu arbeiten kennen lernen kann. Ein Problem war, dass nginx Route für

listen 443; 
server_name www.domain.com; 

wurde auch Auslösung für https://domain.com. Auch das Deaktivieren des Cache in der Chrome Dev Console zum Testen war eine große Hilfe.

Voll config:

# main ssl route for www.domain.com 
server { 
    listen 443; 
    server_name www.domain.com; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; 

    root /var/www/domain.com/www; 
} 

# non-www ssl route 
server { 
    listen 443; 
    server_name domain.com; 

    return 301 https://www.domain.com$request_uri; 
} 

# route non ssl to www ssl 
server { 
    listen  80; 
    server_name www.domain.com domain.com; 
    return  301 https://www.domain.com$request_uri; 
} 

# route non ssl api to ssl 
server { 
    listen 80; 
    server_name api.domain.com; 
    return 301 https://api.domain.com$request_uri; 
} 

# main ssl route for api.domain.com 
server { 
    listen 443 ssl; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/api.domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/api.domain.com/privkey.pem; 

    server_name api.domain.com; 

    location/{ 
     proxy_pass http://localhost:1337; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
}