2016-07-15 21 views
1

www以外のURLをwwwとhttpsにリダイレクトする際に問題があります。nginxはwwwとwwwとwwwとhttpsをdomain.comとサブドメインのためにリダイレクト

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

https://www.domain.comにリダイレクトする必要があります。私が欲しいもの

http://api.domain.com 

は、私はdomain.comとapi.domain.comためseperata SSLキーを持っているhttps://api.domain.com

にリダイレクトする必要があります。 api.domain.comのSSL設定はnode.jsアプリケーションで処理されます。さらに、domain.comは、ルート文書を使用し、api.domain.comは、私が試したどのポート1336

上のNode.jsアプリケーションにproxy_passを使用している:期待通りに働いている

# 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; 
    } 
} 

ルート: - >接続を確保していない

https://domain.com:動作していないhttps://www.domain.com http://domain.com http://www.domain.com

イオン、api.domain.comから証明書を使用しようとしているので(多分私が間違っていた別の方法で、前にそれを試してみましたので、これは、キャッシュすることができる)

https://api.domain.com->はhttps://domain.com

http://api.domain.comにリダイレクト - >https://domain.com

nginxのバージョンにリダイレクト:nginxの/ 1.4.6(Ubuntuの)

答えて

3

が、私はそれがノウハウを作業得ることができます。一つの問題は、

listen 443; 
server_name www.domain.com; 

https://domain.comのためにトリガされたためにそのnginxのルートでした。 Chrome Dev Consoleのキャッシュをテスト用に無効にすることも大きな助けとなりました。

全設定:

# 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; 
    } 
} 
関連する問題