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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

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

nginx

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

3556閲覧

GoのEchoサーバとNginxをリバースプロキシで連携したい(Docker)

mask_mus

総合スコア37

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

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

nginx

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/11/15 16:41

EchoのAPIサーバと、ページ配信のNginxサーバを繋げたいと思っています。
EchoではAPIの配信のみで、Nginxはページ配信のみ。それぞれ別々のコンテナです。
Nginxのlocationが/api/の時だけリバースプロキシとしてEchoのコンテナ宛てに飛ばしたいと考えています。
nginx.confのhttpディレクティブの中に以下のような設定を書いたdefault.confをincludeしたのですが、以下のようなエラーが出ました。
"stream" directive is not allowed here in /etc/nginx/conf.d/default.conf:1
一番初めにこの設定でNginxを動かしたときはエラーが出ずにうまくいったのですが、SSLの設定を書き足しているうちに上記の動かなくなり、元に戻しても動かなくなってしまいました。要件を満たせる設定方法を教えていただきたいです。よろしくお願いします。

Nginx

1stream{ 2 upstream tcp_target { 3 server 127.0.0.1:8080; 4 } 5 6 server { 7 listen 80; 8 server_name www.example.com; 9 root /var/www/html; 10 11 12 location /api/ { 13 proxy_pass tcp_target; 14 } 15 16 location / { 17 # root /usr/share/nginx/html; 18 # index index.html index.htm; 19 root /var/www/html; 20 index index.php index.html index.htm; 21 } 22 23 error_page 500 502 503 504 /50x.html; 24 location = /50x.html { 25 # root /usr/share/nginx/html; 26 root /var/www/html; 27 } 28 } 29}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

streamを使わずに設定することで実現できました。

Nginx

1server { 2 listen 80 default_server; 3 listen [::]:80 default_server; 4 5 server_name www.example.com 6 location /api/ { 7 proxy_http_version 1.1; 8 proxy_set_header Upgrade $http_upgrade; 9 proxy_set_header Connection "upgrade"; 10 proxy_set_header Host $host; 11 12 proxy_pass http://golang:8080/; 13 } 14 15 location / { 16 root /var/www/html; 17 index index.html; 18 } 19}

投稿2020/11/16 03:28

編集2020/11/16 07:12
mask_mus

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

同じエラーメッセージでの質疑結果です。

https://serverfault.com/questions/883073/nginx-emerg-stream-directive-is-not-allowed-here

stream側をincludeする文がhttp {}の内部に書かれていたのがエラーの原因とのこと。おそらく質問者様の状況もこれと一緒ではないでしょうか。

投稿2020/11/15 17:12

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mask_mus

2020/11/15 18:00

streamの中でlocationディレクティブが使えないのですが、どのように設定すればhttp://www.example.com/api/のときのみEchoサーバに飛ばせるのでしょうか?
toast-uz

2020/11/15 22:25

http/s以外のプロトコルでは、そもそもリクエストにサーバ名が含まれないか、含まれていたとしてもそれをnginxのstreamディレクティブは認識できませんし、httpディレクティブで受けることもできません。よってechoプロトコルのサーバー名を判断して何かをする、という動作はできません。
toast-uz

2020/11/16 03:58

通信の世界でechoというとhttpではない専用のプロトコルを示します。そもそもリクエストURLというものは存在しないです。クライアント側で名前解決されて、サーバにはIPアドレスでアクセスがきます。httpディレクティブで処理できません。streamしか使えません。 一方、Ehcoと言われているのがhttpで実装されたechoっぽい機能なのであれば、それはhttpの世界なのでそもそもstreamを使わなくてよいです。こちらが今回の解決ですね。
mask_mus

2020/11/16 07:14

EchoサーバというのはEchoフレームワークのことでした。言い方を間違えてしまいました、すみませんでした。
toast-uz

2020/11/16 08:49

いえいえ、私も確認不足でした。また何かありましたら、遠慮なく質問ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問