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

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

ただいまの
回答率

89.99%

Apache→Nginx→Mattermost

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,695

dnnksk

score 6

前提・実現したいこと

http://hiromode.hatenablog.com/entry/2016/11/09/151039を参考に,
Apache(80番ポートでListen)→nginx(8080番ポートでListen)→Mattermost(8065番ポートでListen)を実現しようとしています.

発生している問題・エラーメッセージ

http://localhost:8065にアクセスすると,http://localhost:8065/loginにリダイレクトされ,mattermostのログイン画面が表示されます.http://localhost:8065も同様です.http://localhost/mattermostにアクセスすると空白のページ,http://localhost/mattermost/loginにアクセスすると,このアドレスへのリクエストに対するサーバーの自動転送設定がループしています。というエラーが表示されました. 

該当のソースコード

/etc/httpd/conf.d/mattermost.conf

<IfModule mod_proxy.c>
    ProxyRequests off
    ProxyPass /mattermost http://localhost:8080/mattermost
    ProxyPassReverse /mattermost http://localhost:8080/mattermost
</IfModule>


/etc/nginx/conf.d/default.conf

upstream backend {
   server 127.0.0.1:8065;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
   listen 8080;
   server_name localhost;


   location /api/v3/users/websocket {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_pass http://localhost:8065;
   }

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_pass http://localhost:8065;
   }
}

試したこと

$curl http://localhost/mattermost
を実行すると
$curl http://localhost:8080
または
$curl http://localhost:8065
と同じ結果が返ってきます.

<!DOCTYPE html> <html> <head> <meta http-equiv=X-UA-Compatible content="IE=edge"> <meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"> <meta name=robots content="noindex, nofollow"> <meta name=referrer content=no-referrer> <title>Mattermost</title> <meta name=apple-mobile-web-app-capable content=yes> <meta name=apple-mobile-web-app-status-bar-style content=default> <meta name=mobile-web-app-capable content=yes> <meta name=apple-mobile-web-app-title content=Mattermost> <meta name=application-name content=Mattermost> <meta name=format-detection content="telephone=no"> <link rel=apple-touch-icon sizes=57x57 href=/static/files/787db8d8b82538cc1d5e8bcb8c21722d.png> <link rel=apple-touch-icon sizes=60x60 href=/static/files/cd9987714f4d92336c3ab203ff150a9a.png> <link rel=apple-touch-icon sizes=72x72 href=/static/files/1728fd5a009aabc77654b1f958c6f596.png> <link rel=apple-touch-icon sizes=76x76 href=/static/files/17cb12b7fc37d8229a6e72f3d6da0949.png> <link rel=apple-touch-icon sizes=144x144 href=/static/files/fba6362db1d8b3e27c9fb02fd0695c85.png> <link rel=apple-touch-icon sizes=120x120 href=/static/files/08959a08dc2488dfeb8660fc4630b145.png> <link rel=apple-touch-icon sizes=152x152 href=/static/files/bca263be9acd1df84b988b02c621b8ca.png> <link rel=icon type=image/png sizes=16x16 href=/static/files/532142b052832f94ffc35860545a7e5c.png> <link rel=icon type=image/png sizes=32x32 href=/static/files/c220e89731c31367c0f4e86e3442bee0.png> <link rel=icon type=image/png sizes=96x96 href=/static/files/173682cef105829829a008f1fc97e980.png> <link rel=icon type=image/png sizes=192x192 href=/static/files/0d367a00a16bde58f7e87c4481516a68.png> <link rel=manifest href=/static/files/fee9721a6305a49662a40ffd052a7965.json> <link rel=stylesheet class=code_theme> <script type="text/javascript" src="/static/main.598ce99103ba6aaf3db4.js"></script></head> <body> <div id=root> <div class=loading-screen style=position:relative> <div class=loading__content> <div class="round round-1"></div> <div class="round round-2"></div> <div class="round round-3"></div> </div> </div> </div> <script>window.setup_root()</script> <noscript> To use Mattermost, please enable JavaScript. </noscript> </body> </html>

http://localhost/mattermostに接続した際のエラーログです.

[Mon Apr 03 18:23:26.280899 2017] [authz_core:debug] [pid 19622] mod_authz_core.c(835): [client XXX.XXX.XX.XXX:56324] AH01628: authorization result: granted (no directives) 
[Mon Apr 03 18:23:26.292102 2017] [proxy:debug] [pid 19622] mod_proxy.c(1117): [client XXX.XXX.XX.XXX:56324] AH01143: Running scheme http handler (attempt 0) 
[Mon Apr 03 18:23:26.292131 2017] [proxy_ajp:debug] [pid 19622] mod_proxy_ajp.c(713): [client XXX.XXX.XX.XXX:56324] AH00894: declining URL http://localhost:8080/mattermost/ 
[Mon Apr 03 18:23:26.292876 2017] [proxy_fcgi:debug] [pid 19622] mod_proxy_fcgi.c(963): [client XXX.XXX.XX.XXX:56324] AH01076: url: http://localhost:8080/mattermost/ proxyname: (null) proxyport: 0 
[Mon Apr 03 18:23:26.292889 2017] [proxy_fcgi:debug] [pid 19622] mod_proxy_fcgi.c(966): [client XXX.XXX.XX.XXX:56324] AH01077: declining URL http://localhost:8080/mattermost/ 
[Mon Apr 03 18:23:26.294088 2017] [proxy:debug] [pid 19622] proxy_util.c(2203): AH00942: HTTP: has acquired connection for (localhost) 
[Mon Apr 03 18:23:26.294115 2017] [proxy:debug] [pid 19622] proxy_util.c(2256): [client XXX.XXX.XX.XXX:56324] AH00944: connecting http://localhost:8080/mattermost/ to localhost:8080 
[Mon Apr 03 18:23:26.298185 2017] [proxy:debug] [pid 19622] proxy_util.c(2422): [client XXX.XXX.XX.XXX:56324] AH00947: connected /mattermost/ to localhost:8080 
[Mon Apr 03 18:23:26.298723 2017] [proxy:debug] [pid 19622] proxy_util.c(2798): AH02824: HTTP: connection established with XXX.XXX.XX.XXX:8080 (localhost) 
[Mon Apr 03 18:23:26.298766 2017] [proxy:debug] [pid 19622] proxy_util.c(2923): AH00962: HTTP: connection complete to XXX.XXX.XX.XXX:8080 (localhost) 
[Mon Apr 03 18:23:26.314379 2017] [proxy:debug] [pid 19622] proxy_util.c(2218): AH00943: http: has released connection for (localhost) 
[Mon Apr 03 18:23:26.693932 2017] [authz_core:debug] [pid 19622] mod_authz_core.c(809): [client XXX.XXX.XX.XXX:56324] AH01626: authorization result of Require all granted: granted 
[Mon Apr 03 18:23:26.693964 2017] [authz_core:debug] [pid 19622] mod_authz_core.c(809): [client XXX.XXX.XX.XXX:56324] AH01626: authorization result of <RequireAny>: granted 
[Mon Apr 03 18:23:26.694016 2017] [core:info] [pid 19622] [client XXX.XXX.XX.XXX:56324] AH00128: File does not exist: /var/www/html/static/main.598ce99103ba6aaf3db4.js 
[Mon Apr 03 18:23:26.766116 2017] [authz_core:debug] [pid 19622] mod_authz_core.c(809): [client XXX.XXX.XX.XXX:56324] AH01626: authorization result of Require all granted: granted 
[Mon Apr 03 18:23:26.766153 2017] [authz_core:debug] [pid 19622] mod_authz_core.c(809): [client XXX.XXX.XX.XXX:56324] AH01626: authorization result of <RequireAny>: granted 
[Mon Apr 03 18:23:26.766205 2017] [core:info] [pid 19622] [client XXX.XXX.XX.XXX:56324] AH00128: File does not exist: /var/www/html/static/files/0d367a00a16bde58f7e87c4481516a68.png

補足情報(言語/FW/ツール等のバージョンなど)

Cent OS 7.1
Apache 2.4.6
nginx 1.10.3
MariaDB 10.1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ikedas

    2017/04/04 13:14

    エラーログが全部1行につながっていて読みにくいです。できれば修正下さい。なお、アクセスを試したURLはパスまで正確に記述いただけませんか。

    キャンセル

  • dnnksk

    2017/04/04 15:15 編集

    エラーログを修正しました.http://localhost:8065にアクセスすると,http://localhost:8065/loginにリダイレクトされます.http://localhost:8065も同様です.http://localhost/mattermostにアクセスすると空白のページ,http://localhost/mattermost/loginにアクセスすると,このアドレスへのリクエストに対するサーバーの自動転送設定がループしています。というエラーが表示されました.

    キャンセル

  • ikedas

    2017/04/04 16:26

    その情報も質問にお書きいただけますか。当サイトではコメントは検索にひっかからないようなのです。

    キャンセル

回答 1

checkベストアンサー

0

Mattermost 側や Nginx 側でのログイン URL が http://localhost:(8080|8065)/login に対して、 Apache 側で期待したいログイン URL が http://localhost/mattermost/login であるならば、 ProxyPass(Reverse) の設定は /mattermost/ http://localhost:8080/ であるべきだとは思います。

ただ、そういった設定の齟齬以前の問題として、残念ながら Mattermost はサーバのドキュメントルート以外の、サブディレクトリをホームとしての動作には対応していないようです。つまり、 http://example.com/ をトップページ URL とした動作はできても、http://example.com/mattermost/ や http://example.com/very/deep/subdir/ をトップページ URL とした動作は出来ないということです。

このことは、以下の URL で確認できます。もともとは GitHub 上で Issue として登録され、その後本格的な議論が必要ということで JIRA 上に PLT-200 として登録されましたが、今も Status は OPEN のままで作業は完了していません。なので、どうしてもご希望の構成で Mattermost を使いたいのであれば、 PLT-200 の実装が完了されるのを待つか、自分で実装する以外に無いのではないでしょうか。

Feature Request: Enable relative paths to statics in HTML @GitHub
PLT-200: Allow hosting of MM at any route like http://www.example.com/chat @JIRA

あるいは、 dnnksk さんがこういった構成にしたい詳しい理由は分かりませんが、とにかく 「既に構成済みの表側の Apache に追加設定する形で、 Mattermost へのアクセスだけを裏に投げたい」 というのであれば、何らかのドメインを切るなりして Virtual Host 設定をかけるという方法はあり得るかもしれません。つまり、 mattermost.example.com などのドメインを使って Virtual Host 設定を追加して、そこで ProxyPass(Reverse) / http://localhost:8080/ と設定するという方法です。
このようにすれば、 http://mattermost.example.com/ というサーバのドキュメントルートを Mattermost のトップページ URL にすることができるので、ちゃんと動作するようになるはずです。

 参考: 空白のページで起こっていること

因みに、「なぜドキュメントルートでしか動作できないのか?」については、空白のページを表示したという URL である http://localhost/mattermost に対する curl の結果が参考になります。
この curl 結果の HTML をよく見ると、画像や JavaScript ファイルへのパスがすべて /static という絶対パスで始まっています。そのため、 http://localhost/static という URL で該当ファイルにアクセスできなければならないのですが、もちろんこの URL は ProxyPass を行っていないため、必要な画像や JavaScript を読み込むことができず、真っ白のまま動作しないわけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/07 12:03

    ありがとうございました.

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる