質問nginx(centos 6)でhttp2プロトコルを有効にします。

質問nginx(centos 6)でhttp2プロトコルを有効にします。

ロードバランシングされたサーバー(nginx)があります。トラフィックはロードバランシングサーバーに到達し、それを内部Webサーバー(アップストリームを含む)に転送します。 (私の内部Webサーバーもnginxです。)

以下の設定ファイルがあります。私のロードバランサーにはこのような多くの設定ファイルがあります。 (他のサブドメインの場合)

「http2」プロトコルに準拠した80および443トラフィックを実行したいと思います。私のWebサーバーでhttp2プロトコルを有効にしたいです。 「listen 80」または「listen 443」コマンドの後に「http2」パラメータを追加します。この部分まではすべてが正常です。 (たぶんこれが正常かもしれません。)

このセクションの後にいくつかの質問があります。

  • 1:インターネット上のすべての記事はポート443についてです。ポート80に対してこれを行うことができない特別な理由はありますか?

  • 2: 以下のように "/etc/nginx/conf.d" ディレクトリの複数の設定ファイルに "http2" パラメータを追加すると、Web サイトを開くことができません。サイトを更新するたびにページをダウンロードしようとします。ただし、http2パラメータを削除すると問題が解決します。なぜこのようなことをするのですか?また、nginx configtestではエラーは発生しません。

  • 3:この分野で私に推奨できる情報はありますか?

#

[root@lbserver1 ~]# nginx -v

nginx バージョン: nginx/1.12.0

[root@lbserver1~]# cat /etc/redhat-release

Red Hat Enterprise Linuxサーバーバージョン6.7(サンディエゴ)

upstream k-testserver-pool  {
   # ip_hash;
   server testserver.k.local;
}

server {
   listen 80 http2;
   server_name test.www.example.com test.example.com;
   error_log /var/log/nginx/test.www.example.com.80.error.log;

   set $mobile_rewrite_status D;

   large_client_header_buffers 4 16k;

   add_header Set-Cookie "device_type=desktop; Path=/; Domain=test.www.example.com";

   location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://k-testserver-pool;
      proxy_intercept_errors on;

      fastcgi_read_timeout 600;
      proxy_connect_timeout 600;
      proxy_send_timeout 600;
      proxy_read_timeout 600;
      send_timeout 600;
   }

   location ~* \.(pdf|css|js|png|gif|jpg|jpeg|ico|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://k-testserver-pool;
      expires 7d;
      add_header Cache-Control "public";
   }

   location ~ /\.ht {
      deny all;
   }
}


server {
   listen 80 http2;
   server_name test.m.example.com test.webapp.example.com;
   error_log /var/log/nginx/test.www.example.com.80.error.log;

   large_client_header_buffers 4 16k;
   add_header Set-Cookie "device_type=mobile; Path=/; Domain=test.m.example.com";

   location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://k-testserver-pool;
      proxy_intercept_errors on;
      fastcgi_read_timeout 300;
   }

   location ~* \.(pdf|css|js|png|gif|jpg|jpeg|ico|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://k-testserver-pool;
      expires 7d;
      add_header Cache-Control "public";
   }

   location ~ /\.ht {
      deny  all;
   }
}

server {
    listen 443 ssl http2;
    server_name test.www.example.com test.example.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/www.example.com.crt;
    ssl_certificate_key etc/nginx/ssl/www.example.com.key;
    ssl_ciphers  ...+3DES:DH+3DES:RSA+AES:RSA:!aNULL:!MD5:!DSS;....
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    large_client_header_buffers 4 16k;

    location / {
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-Proto https;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_pass http://k-testserver-pool;
       proxy_intercept_errors on;
       fastcgi_read_timeout 300;
    }

    location ~* \.(pdf|css|js|png|gif|jpg|jpeg|ico|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://k-testserver-pool;
       expires 7d;
       add_header Cache-Control "public";
    }
}

答え1

ALPNプロトコルを含むOpenSSLバージョンでコンパイルされたNginxバージョンが必要です。 (NPNはまだFirefoxで動作します)。次のコマンドを使用すると、nginxでコンパイルされたOpenSSLのバージョンを確認できますnginx -V。 HTTP/2 互換性には少なくとも OpenSSL 1.0.2d が必要です。

OpenSSLのバージョンが良好であることを確認--with-http_v2_moduleすることもできますnginx -V

これらの前提条件に従わない場合は、nginxを直接再コンパイルするか、HTTP / 2と互換性があるように事前に構築されたバイナリを使用する必要があります。

ポート443関連:ほとんどのブラウザ(およびnginx実装自体)は実際にHTTP / 2のポート80をサポートしていません。

関連情報