質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。

受付中

Nginx\+GolangのアプリケーションにHTTP2を導入したい

Zousan
Zousan

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。

1回答

0評価

0クリップ

3664閲覧

投稿2016/06/21 12:06

NginxとGoの[Echoフレームワーク](https://github\.com/labstack/echo\)を使ったアプリケーションにHTTP2での通信を実装したいです。そこでNginxとアプリケーションサーバの設定を以下のようにしました。

**nginx.conf**

nginx

user nginx; worker_processes auto; error_log /var/log/nginx/error\.log warn; pid /var/run/nginx\.pid; events { worker_connections 1024; } http { include /etc/nginx/mime\.types; default_type application/octet-stream; log_format main '\$remote_addr - \$remote_user \[\$time_local\] "\$request" ' '\$status \$body_bytes_sent "\$http_referer" ' '"\$http_user_agent" "\$http_x_forwarded_for"'; access_log /var/log/nginx/access\.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; include /etc/nginx/conf\.d/\*\.conf; server_tokens off; }

**default.conf**

nginx

server { listen 80; listen \[::\]:80; return 301 https://\$host\$request_uri; } server { listen 443 ssl http2; listen \[::\]:443 ssl http2; ssl_protocols TLSv1 TLSv1\.1 TLSv1\.2; server_name ドメイン; ssl_certificate /etc/letsencrypt/live/ドメイン/fullchain\.pem; ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey\.pem; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE\+RSAGCM:ECDH\+AESGCM:DH\+AESGCM:ECDH\+AES256:DH\+AES256:ECDH\+AES128:DH\+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS; ssl_dhparam /etc/nginx/ssl/dhparam\.pem; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;'; client_max_body_size 64M; # OCSP Staplingを有効にする ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/ドメイン/fullchain\.pem; # OCSP StaplingのためにはDNSリゾルバを指定する必要がある resolver 8\.8\.8\.8; # Deny access to any files with a \.php extension in the uploads directory location ~\* /\(\?:uploads|files\)/\.\*\\\.php\$ { deny all; } location / { proxy_set_header Host \$http_host; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP \$remote_addr; proxy_redirect http:// https://; proxy_pass http://127\.0\.0\.1:ポート; } location \^~ /\.well-known/acme-challenge/ { root /home/user1/public; } location ~ \.\*\\\.\(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO\) { root /home/user1/public; } }

**アプリケーションサーバの起動部分**

go

e\.Run\(standard\.WithConfig\(engine\.Config{ Address: ":" \+ os\.Getenv\("PORT"\), TLSCertfile: os\.Getenv\("CERT"\), TLSKeyfile: os\.Getenv\("KEY"\), }\)\)

しかし、Golangのサーバ単体でローカルでテストしたところHTTP2で通信出来ましたが、本番環境のNginxをリバースプロキシとして実行するとHTTP2ではなくなってしいます。
SSL通信はできています。pemファイルへのパーミッションの問題かと考えアプリケーションサーバをroot権限で実行してみたりもしましたができませんでした。

ローカルで動いていたのでNginxの設定ではないかと考えていますが、設定の不備などがわかりません。どのようにすればHTTP2での通信を実現できるのでしょうか。

ちなみにGolangでの設定例は[このサイト](https://echo\.labstack\.com/recipes/http2\)を参考にしました。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。