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

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

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

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

Docker

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

Q&A

2回答

10812閲覧

Docker+Nginxでリバースプロキシをやりたい

Takashi

総合スコア8

nginx

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

Docker

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

0グッド

0クリップ

投稿2016/12/09 03:36

###前提・実現したいこと
Dockerで立てたNginxで、nginx-proxyを使わずURLのパスによってDockerで立てた複数のWebサービスにアクセスできるようにしたいと思っています。

OSはMacOS Sierra、Dockerは1.12.3です。

###発生している問題・エラーメッセージ
JSやCSSファイルのリクエストURLがhttp://IPアドレス/red/ファイルのパスhttp://IPアドレス/blue/ファイルのパスではなくhttp://IPアドレス/ファイルのパスとなっています。一応、rewriteでリダイレクトさせましたが、複数のWebサービスを動かすと一方がJSやCSSファイルを読み込んでくれません。
rewriteの正規表現だけで無理やり解決することも可能でしょうが、Webサービスを増やす可能性もあるので違う方法で解決したいです。
どうしたら複数のWebサービスを正常に動かすことができますか?
解決策をご教示ください。

###該当のソースコード

yaml

1# docker-compose.yml 2nginx: 3 image: "nginx" 4 ports: 5 - "80:80" 6 links: 7 - "redmine:redmine" 8 - "rhodecode:rhodecode" 9 volumes: 10 - "$PWD/conf.d:/etc/nginx/conf.d" 11rhodecode: 12 image: "codingtony/rhodecode" 13 ports: 14 - "5000:5000" 15db: 16 image: postgres:9.5 17 environment: 18 - POSTGRES_PASSWORD=secret 19 - POSTGRES_USER=redmine 20redmine: 21 image: redmine:2.6.8 22 links: 23 - db 24 ports: 25 - "3000:3000" 26 volumes: 27 - /srv/docker/redmine/redmine:/home/redmine/data 28

nginx

1# default.conf nginx.confは未編集です。 2server { 3 listen 80; 4 server_name localhost; 5 6 location / { 7 rewrite ^/(.+)$ /red$uri redirect; 8 rewrite ^/(.+)$ /blue$uri redirect; 9 10 root /etc/nginx/conf.d; 11 index index.html; 12 } 13 14 location /red/ { 15 proxy_pass http://192.168.99.100:3000/; 16 } 17 18 location /blue/ { 19 proxy_pass http://192.168.99.100:5000/; 20 } 21 22 23 error_page 404 /404.html; 24 25 error_page 500 502 503 504 /50x.html; 26 location = /50x.html { 27 root /usr/share/nginx/html; 28 } 29}

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

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

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

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

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

guest

回答2

0

JSやCSSファイルのリクエストURLがhttp://IPアドレス/red/ファイルのパスやhttp://IPアドレス/blue/ファイルのパスではなくhttp://IPアドレス/ファイルのパスとなっています。

となってる場合はどっちのサーバに行かせるべきかわからないので無理ですよ。

通常は、css/jsもred/blueの下にします。

blue.css
red.css
になってるとしたら、ファイ名で切り替えることになります。

投稿2018/07/22 06:12

asakawaya

総合スコア45

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

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

0

default.conf内、proxy_passの最後の「/」を削除すれば、意図された挙動になると思いますがいかがでしょうか?

Nginx

1#default.conf 2server { 3 listen 80; 4 server_name localhost; 5 6 location / { 7 root /etc/nginx/conf.d; 8 index index.html; 9 } 10 11 location /red/ { 12 proxy_pass http://192.168.99.100:3000; 13 } 14 15 location /blue/ { 16 proxy_pass http://192.168.99.100:5000; 17 } 18 19 20 error_page 404 /404.html; 21 22 error_page 500 502 503 504 /50x.html; 23 location = /50x.html { 24 root /usr/share/nginx/html; 25 } 26}

以下公式です。
「URIで指定されていれば」というのが、「/」がついた状態のことですね。
http://mogile.web.fc2.com/nginx/http/ngx_http_proxy_module.html#proxy_pass

・proxy_passディレクティブがURIで指定されていれば、リクエストがサーバに渡された時に locationに一致したnormalizedリクエストがディレクティブで指定されたURIと置き換えられます:

・proxy_passがURIで指定されていなければ、元のリクエストが処理される時にリクエストURIはクライアントから送信された同じ形式でサーバに渡されます。

投稿2016/12/29 00:23

tomoeine

総合スコア127

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問