2016-07-12 8 views
0

自分のサーバーで2つのドメインを実行していて、NGINXはそれらをノードアプリケーションにプロキシします。私は証明書を持っていますが、もう一方はHTTPSを提供するのにcloudflareを使用しています。ユーザーがいずれかのドメインにアクセスしたときに、wwwがなくてもドメインのHTTPSバージョンに常にリダイレクトされるようにしたいと思います。これは、ドメイン2設定ファイルのブロックをコメント解除すると、両方のサイトを破るように見える、私の現在の設定です:(NGINX 2つのドメインが同じIP上にあり、両方をHTTPSにリダイレクトしたい

のdomain1設定ファイル:

upstream domain1.com { 
    server 127.0.0.1:8000; 
    keepalive 8; 
} 

server { 

    listen 0.0.0.0:80; 
    server_name domain1.com www.domain1.com; 
    return 301 https://domain1.com$request_uri; 

} 

server { 
    #listen 80; 
    listen 443 ssl http2; 
    server_name domain1.com; 
    access_log /var/log/nginx/domain1.com.log; 

    root /var/www/domain1.com/client/public; 

    include /etc/nginx/global/cloudflare-allow.conf; 

    ssl_certificate /etc/nginx/ssl/domain1.crt; 
    ssl_certificate_key /etc/nginx/ssl/domain1.key; 

    if ($bad_referer) { 
     return 444; 
    } 

    location/{ 
     proxy_http_version 1.1; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-NginX-Proxy true; 
     proxy_set_header Connection ""; 

     proxy_pass http://domain1.com; 
     proxy_redirect off; 
    } 

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|webp)$ { 
     expires 1M; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    # CSS and Javascript 
    location ~* \.(?:css|js)$ { 
     expires 1y; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    location ~* \.(?:rss|atom)$ { 
     expires 1h; 
     add_header Cache-Control "public"; 
    } 

    location ~* \.(?:manifest|appcache|html?|xml|json)$ { 
     expires -1; 
    } 

} 

server { 

    listen 443 ssl http2; 
    server_name www.domain1.com; 
    return 301 https://domain1.com$request_uri; 

} 

ドメイン2、configファイル:

upstream domain2.com { 
    server 127.0.0.1:9000; 
    keepalive 8; 
} 

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

server { 
    listen 80; 
    #listen 443 ssl http2; 
    server_name domain2.com; 
    access_log /var/log/nginx/domain2.com.log; 

    root /var/www/domain2.com; 

    include /etc/nginx/global/cloudflare-allow.conf; 

    if ($bad_referer) { 
     return 444; 
    } 

    location/{ 
     proxy_http_version 1.1; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-NginX-Proxy true; 
     proxy_set_header Connection ""; 

     proxy_pass http://domain2.com; 
     proxy_redirect off; 
    } 

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|webp)$ { 
     expires 1M; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    # CSS and Javascript 
    location ~* \.(?:css|js)$ { 
     expires 1y; 
     access_log off; 
     add_header Cache-Control "public"; 
    } 

    location ~* \.(?:rss|atom)$ { 
     expires 1h; 
     add_header Cache-Control "public"; 
    } 

    location ~* \.(?:manifest|appcache|html?|xml|json)$ { 
     expires -1; 
    } 

} 

答えて

1

SSLがCloudFlareのフレキシブルSSLモードで行われる場合、原点への通信はポート80経由のHTTPトラフィックです。

このトラフィックがHTTPSであるかどうかを検出するには、HTTPS環境変数を使用できないため、代わりにX-Forwarded-ProtoヘッダーがHTTPSに設定されているかどうかを確認する必要があります。

次のように、nginxの中でこれを行うことができます:

if ($http_x_forwarded_proto != "https") { 
    rewrite ^(.*)$ https://$server_name$1 permanent; 
} 

これを行うための簡単な方法は、単に"Always use HTTPS" Page Rule in CloudFlareを設定することです。

関連する問題