実現したいこと
- curlで自分の作ったWebコンテンツを表示したい
前提
FlaskとApache(httpd)、WSGI、amazon linux2でWebアプリ製作の練習をしようとしていました。Flaskの設定等を完了し、以下のようにWebページに文字を出力することはできました。
参考にしたのは以下のサイトです。(サイトではCloud9を使用していますが、私は使用しておらずそれ以外の設定の部分のみ参考にさせてもらっています。)
https://wellknowledge.org/flask0625/
発生している問題・エラーメッセージ
しかし、いざこれをcurlで見ようと思ったらタイムアウトしてしましました。
- curlコマンドのコマンドの内容 curl http://39.79.***.**:80 - curlコマンドの実行結果のログそのもの curl: (28) Failed to connect to 39.79.***.** port 80 after 129623 ms: Connection timed out
telnetで出力してみたら以下のようにタイムアウトとの表示が…
$ telnet 39.79.***.** 80 Trying 39.79.***.**... telnet: connect to address 39.79.***.**: Connection timed out
試しにpingで調べても応答なしで、パケロスは100%でした。
ためしにAmazon linux2上でflaskを起動し、ローカルIPをAmazon linux2上でcurlでみてみると、結果を正しく返してくれました。
$ python3 main.py $ curl http://127.0.0.1:5000 Hello World!!!
一体なぜローカルPCのWebには表示することができて、ローカルPCのcurl等ではHello World!!!を表示できないのでしょうか。
該当のソースコード
[main.py] from flask import Flask app= Flask(__name__) @app.route("/") def hello(): return "Hello World!!!" if __name__ == "__main__": app.run()
[flask.conf] LoadModule wsgi_module /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so ServerName flask DocumentRoot /var/www/cgi-bin/flask WSGIScriptAlias / /var/www/cgi-bin/flask/adapter.wsgi options -Indexes +FollowSymLinks +ExecCGI
[adapter.wsgi] # cording: utf-8 import sys sys.path.insert(0,'/var/www/cgi-bin/flask') from main import app as application
試したこと
以下のページでは、タイムアウトの原因はファイアーウォールにある可能性があると書かれていました。実際、応答がないので、その可能性が高いです。
https://blogs.itmedia.co.jp/komata/2011/03/post-1225.html
しかし、実際にどのポートを許可すればいいのかもまだまだ知識がなく、滞っています。
コメントより、telnetはポート番号は必要とのことで調べてみました。
実際にIPアドレス:80でChromeに入れてみたら、Hello World!!!のページにいけました。curl google.comを打てばちゃんとHTMLが表示されます。
補足情報(FW/ツールのバージョンなど)
Pythonは3.7、フレームワークはFlask、サーバーはapache、アプリケーションサーバーにはWSGIを使用しています。
- サーバがどこにあるのか。
Amazon Linux2にapacheを立てています。
- ブラウザはどこのマシンで動かしているか
表示しているブラウザはローカルの自分のラップトップです。FlaskのコードはAmazon Linux2にあります。
- telnetコマンドを動かしているマシンはどこにあるのか
(telnetでの確認は難しいのでこの段階ではお勧めしない)
Amazon Linux2上で実行しています。
- curlコマンドを動かしているマシンはどこにあるのか
Amazon Linux2上で実行しています。
- curlコマンドのコマンドの内容
- curlコマンドの実行結果のログそのもの
curl: (28) Failed to connect to 39.79.*. port 80 after 129623 ms: Connection timed out
どのような構造なのか、絵を描いて提示いただけると、回答者にも分かり易いと思います。
承知しました。
curlコマンドですが、「Amazon Linux2」で動かしていると質問文にありますが、これはApacheが動いているマシンと同じマシンですか?
そうです。また、他の方のコメントより、自分のローカルPCでも「curl http://39.79.***.**」を実行しましたがだめでした。
ローカルの自分のラップトップのブラウザからは、「http://39.79.***.**」にアクセスして、表示できているということでしょうか?
そうです。
curlは、FlaskコードやApacheが動いているAmazon Linux2のコンソールあたりから、「http://39.79.***.**:80」でアクセスできないということですか?
そうです。また、他の方のコメントより、自分のローカルPCでも「curl http://39.79.***.**:80」を実行しましたがだめでした。
Amazon Linux2から、「curl http://localhost:80」(curl http://127.0.0.1:80)は何か反応があるのでしょうか?
「Hello World!!!」が出力されました。












回答2件
あなたの回答
tips
プレビュー