2

問題

私がヒットするとkevinsuttle.com、私は得る

"No data received ERR_EMPTY_RESPONSE".

を押すとhttps://kevinsuttle.com、サイトが表示されます。

ゴースト 0.7.5
nginx 1.4 => 1.9.9
letsencrypt 0.2.0

Digital Ocean : Ubuntu 14.04 Ghost ワンクリック ドロップレット

Networking > Domainsの下に、サーバーの IP アドレス ( ) を指すレコードとしてkevinsuttle.comとの両方があります。www.kevinsuttle.comA@

DNS簡易レコード

| | タイプ | 名前 | TTL | コンテンツ |
|------ |--------------------- |--------------- |---- -------------------- |
| | URL | www.kevinsuttle.com | 3600 (1 時間) | http://kevinsuttle.com |  

Ghost の config.js で唯一変更された部分は、私のドメインです。

url: 'http://kevinsuttle.com',

ニンクス 1.9

nginx 1.9 は、デフォルトでは次のディレクトリを作成しません:
/etc/nginx/sites-available
/etc/nginx/sites-enabled

通常のdefaultconf は、これらのディレクトリのいずれにも作成されません。

代わりに、etc/nginx/conf.d/default.confと重要ながありetc/nginx/conf.d/nginx.confます。default.conf を削除するように指示する多くのチュートリアルが表示されますが、これは問題ないように思われますが、何をするにしても、.conf を削除しないでくださいnginx.conf

ghost.confまた、ディレクトリに移動/作成する必要があります/etc/nginx/conf.d/etc/nginx/conf.d/nginx.confの最後の行がディレクトリを検索し、/conf.d/そこにファイルが含まれているため、それが私の問題の1つを修正したものです。include /etc/nginx/conf.d/*.conf;

これが私の/etc/nginx/conf.d/ghost.confファイルです:

  server {
  root /usr/share/nginx/html;
  index index.html index.htm;

  listen 443 ssl http2;

  server_name kevinsuttle.com www.kevinsuttle.com;
    ssl_certificate /etc/letsencrypt/live/kevinsuttle.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kevinsuttle.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

  location ~ /.well-known {
      allow all;
      root /var/www/;
  } 

  location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:2368;
        proxy_redirect off;
        root /var/www/;
    }
      location /.well-known/ {
        root /var/www/;
    }
}

server {
    listen 80 ssl http2;
    server_name kevinsuttle.com;
    return 301 https://$host$request_uri;
}

これですべて正常に動作し、http/2 経由でサービスを提供するために、nginx を 1.9+ にアップグレードしようとしました。DigitalOcean のワンクリック ゴースト ドロップレットは、デフォルトで nginx 1.4 を使用します。

簡単に言えば、私はこのエラーを受け取り続けました:

dpkg: error processing archive /var/cache/apt/archives/nginx_1.9.9-1~trusty_amd64.deb (--unpack):

そして私が見つけた唯一の解決策は

apt-get purge nginx nginx-common

/etc/apt/source.listファイルに次の行を追加することで、nginx 1.9 をインストールできました。

deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

listen 80 ssl http2;これで、 andを追加するだけlisten 443 ssl http2;で、http/2 が正常に動作するようになりました。ただし、https://URL が明示的に入力されている場合のみ。

が をサポートしていないという事実を示すいくつかの証拠を見つけましたが、私はそれについて 100% ではありません。expresshttp/2

どんなアイデアでも大歓迎です。

4

1 に答える 1

6

これは Ghost の問題でも DNS の問題でもないと思います。

www と not-www の両方が構成された IP に解決されるため、DNS を除外できます。

➜  ~  dig kevinsuttle.com +short
162.243.4.120
➜  ~  dig www.kevinsuttle.com +short
162.243.4.120

DNS プロトコルは HTTP よりも低いレベルで動作し、HTTP のバージョンや、HTTP と HTTPS のどちらを使用するかは気にしません。したがって、DNS を除外して、より高いレベルのプロトコルを調べることができます。

また、HTTPS を使用すると HTTP/2 リクエストをブログに送信できるため、Ghost/Express の問題も除外します。

➜  ~  curl --http2 -I https://kevinsuttle.com/
HTTP/2.0 200
server:nginx/1.9.9
date:Sun, 24 Jan 2016 19:34:30 GMT
content-type:text/html; charset=utf-8
content-length:13594
x-powered-by:Express
cache-control:public, max-age=0
etag:W/"351a-fflrj9kHHJyvRRSahEc8JQ"
vary:Accept-Encoding

サイトの HTTP バージョンを使用している限り、HTTP 1.1 にフォールバックすることもできます。

➜  ~  curl -I https://kevinsuttle.com/
HTTP/1.1 200 OK
Server: nginx/1.9.9
Date: Sun, 24 Jan 2016 19:35:36 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 13594
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"351a-fflrj9kHHJyvRRSahEc8JQ"
Vary: Accept-Encoding

したがって、問題は Nginx の構成です。具体的には、問題は HTTP のみのブロックの Nginx 構成です。

今は試すことができませんが、個人的には問題は次の行にあると思います。

listen 80 ssl http2;

そのはず

listen 80;

このsslディレクティブは、リスニング ソケットが理解するよう強制するために使用されますssl。ただし、あなたの場合、HTTPS を使用するためにソケットを 80 でリッスンするのは意味がありません。さらに、使用するソケットにsslは、関連付けられた SSL 構成が宣言されている必要があります (別名、少なくとも有効な証明書とキー)。

通常、sslHTTP と HTTPS の両方のリクエストを処理する単一のサーバーを構成するために使用します。

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

また、Nginxのドキュメントで説明されているように

したがって、最新バージョンでの ssl ディレクティブの使用はお勧めできません。

https 以外のソケットとのhttp2併用もトラブルの原因となります。

この記事を引用:

この仕様では、HTTP/2 over TLS の実装を強制するものではなく、クリア テキスト TCP を介した実装を許可していますが、Firefox と Chrome の両方の開発チームの代表者は、TLS を介した HTTP/2 のみを実装する意向を表明しています。これは、これらのブラウザーで HTTP/2 を有効にできるのは HTTPS:// URL だけであることを意味します。

したがって、それが可能であると仮定すると、HTTP/2 経由で非 https サイトを提供することは役に立たない可能性があります。実際、このチケットに記載されている問題があなたの問題と一致しているように見えることを考えると、今日の時点でそれが可能であるとは思えません.

要約すると、単に変更する

server {
    listen 80 ssl http2;
    server_name kevinsuttle.com;
    return 301 https://$host$request_uri;
}

server {
    listen 80;
    server_name kevinsuttle.com;
    return 301 https://$host$request_uri;
}
于 2016-01-24T19:44:48.067 に答える