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

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

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

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

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

4751閲覧

AWS環境+Nginxでのmastodonのリバースプロキシが上手く行かない

pratula

総合スコア16

nginx

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

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/04/24 13:28

編集2017/04/24 23:32

流行のマストドンを構築しています。
http://qiita.com/tsuitta_dayo/items/dfd659ec68435653d16a
この記事を参考にインスタンスを立てる所まで行ったのですが、

http://<ドメイン名>
にアクセスしても、SSL接続にはリダイレクトされるのですが、
Nginxのデフォルトトップページに飛んでしまいます。

デフォルトのNginxのコンフィグファイルでは動きませんでした。

ProxyPassあたりがおかしいと思うのですが
設定でおかしい場所が分かりません。

どなたが御指南お願いします。

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

Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.

このトップページに飛んでしまいます。
Http接続がリダイレクトされて、port3000で動いているdocker内(?)のマストドンに飛んでほしいです。
###該当のソースコード
/etc/nginx/conf.d/mastodon.conf

map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name msdnaart.net; # Useful for Let's Encrypt location /.well-known/acme-challenge/ { allow all; } #SSL証明書はELBに置いています。 #なのでリダイレクトループ回避の設定を書いています。 location / { if ($http_x_forwarded_proto != https){ rewrite ^ https://$host$request_uri? permanent; } } } server { listen 443 ssl; listen [::]:443 ssl; server_name msdnaart.net; ssl_protocols TLSv1.2; ssl_ciphers EECDH+AESGCM:EECDH+AES; ssl_ecdh_curve prime256v1; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ssl_dhparam /etc/ssl/certs/dhparam.pem; keepalive_timeout 70; sendfile on; client_max_body_size 0; root /home/mastodon/live/public; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security "max-age=31536000"; location / { try_files $uri @proxy; } location /assets { add_header Cache-Control "public, max-age=31536000, immutable"; } location @proxy { proxy_set_header Host $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 https; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_pass http://127.0.0.1:3000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } location /api/v1/streaming { proxy_set_header Host $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 https; proxy_set_header Proxy ""; proxy_pass http://localhost:4000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } error_page 500 501 502 503 504 /500.html; }

また、インスタンスのNATテーブルです。
qiitaで書かれている通りに

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

するとNginxに飛ぶ前にport3000に飛び、http接続がリダイレクトされません。
また、「連合」も動きませんでした。

現在のiptables -t natです

Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- ip-172-18-0-0.ap-northeast-1.compute.internal/16 anywhere MASQUERADE all -- ip-172-17-0-0.ap-northeast-1.compute.internal/16 anywhere MASQUERADE tcp -- ip-172-18-0-5.ap-northeast-1.compute.internal ip-172-18-0-5.ap-northeast-1.compute.internal tcp dpt:4000 MASQUERADE tcp -- ip-172-18-0-6.ap-northeast-1.compute.internal ip-172-18-0-6.ap-northeast-1.compute.internal tcp dpt:3000 Chain DOCKER (2 references) target prot opt source destination RETURN all -- anywhere anywhere RETURN all -- anywhere anywhere DNAT tcp -- anywhere anywhere tcp dpt:4000 to:172.18.0.5:4000 DNAT tcp -- anywhere anywhere tcp dpt:3000 to:172.18.0.6:3000

###環境
AWS

EC2インスタンス 1
VPC 1
サブネット 1
ELB
リスナー
HTTP(port80) -> HTTP(port80)
HTTP(port443) -> HTTP(port80)

####追記
Nginxから443番ポートに飛ばされた後、
また80番に飛ぶんだからリダイレクトループするよな、と思い、
リスナーの設定を変更しました。

HTTP(port80) -> HTTP(port80)
HTTP(port443) -> HTTP(port443)

そうすると、今度はタイムアウトしていしまいます。
”curl http://127.0.0.1:443”は
「curl: (52) Empty reply from server」です。
"http://127.0.0.1:3000”はちゃんとトップページが帰ってくるので、
やはりポートの割振りの問題だと思います。

ここから先に進めないです・・・

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しました。

何回かやり直したので、きちんと原因は特定出来てないのです。
おそらく、iptables に PREROUTINGで80portを3000portでリダイレクトするように設定したことと、
Nginxの設定をconf.dではなく、/etc/nginx/site-enabled/defaultを編集するようにするべきだったかと。

一連の手順をまとめました。
これで大丈夫かと思います。

http://qiita.com/shibafu/items/6f3646115acc16c748ad

投稿2017/05/08 06:24

pratula

総合スコア16

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

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

0

以下、実際のFQDNに合わせて変更してください。

server_name msdnaart.net;

よくわからなければ以下でもいいです。

server_name _;

投稿2017/04/25 00:39

moonphase

総合スコア6621

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

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

pratula

2017/04/26 10:49 編集

ありがとうございます! 以下の設定ファイルで これでhttp → httpsからport3000番に飛ぶ!までが出来ました。 ですが、まだ「連合」機能が動いていません。 連合はport4000を通して動作するらしいので、やはりNginxのプロキシの問題だと思うのですが、 何かご存じないでしょうか? 御指南いただけると幸いです。 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name msdnaart.net.; # Useful for Let's Encrypt location /.well-known/acme-challenge/ { allow all; } location / { if ($http_x_forwarded_proto != https){ rewrite ^ https://$host$request_uri permanent; } } } server { # listen 443 ssl; # listen [::]:443 ssl; listen 401; listen [::]:401; server_name msdnaart.net.; # ssl_protocols TLSv1.2; # ssl_ciphers EECDH+AESGCM:EECDH+AES; # ssl_ecdh_curve prime256v1; # ssl_prefer_server_ciphers on; # ssl_session_cache shared:SSL:10m; # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ssl_dhparam /etc/ssl/certs/dhparam.pem; keepalive_timeout 70; sendfile on; client_max_body_size 0; root /home/ubuntu/mastodon/live/public; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security "max-age=31536000"; location / { try_files $uri @proxy; } location /assets { add_header Cache-Control "public, max-age=31536000, immutable"; } location @proxy { proxy_set_header Host $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 https; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_pass http://127.0.0.1:3000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } location /api/v1/streaming { proxy_set_header Host $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 https; proxy_set_header Proxy ""; proxy_pass http://localhost:4000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } error_page 500 501 502 503 504 /500.html; } .env.production のドメイン部分です ~ # Federation LOCAL_DOMAIN=msdnaart.net. LOCAL_HTTPS=false ~
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問