こんにちは。
今、WEBサーバの勉強していますが、アプリケーションが上手く実行できなかったのでここで質問させて頂きました。
質問内容としては、下記諸環境下でapacheにflaskアプリケーションを設置し、ブラウザからアクセスしてもブラウザには下記のような表記しか出ないことです。
NOT FOUND The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
最近の主流がHerokuなどであることは承知していますが、WEBサーバの動きやサーバプログラムを稼働させるためのインターフェイスの機能や動きを理解しようと考え、静的ファイルの表示から動的ファイル表示(CGI->FastCGI->mod_wsgi->WSGI)へという流れで勉強を進めようとしているところです。
下記に諸設定と私が推測する原因をまとめていますの解決方法(flaskを利用した簡易的なアプリケーションの実行とブラウザでの表示)をご教示頂ければと思います。
なお、ローカル環境を汚したくないのでdockerを利用し、また実際のセルフデプロイ、WEBサーバ構築を想定してubuntuからインストールする形をとっています(OSにubuntuを選んでいるのはLinux系のサーバOSのシェアが世界No.1なので、ubuntuやdebian系LinuxOSの使い方を知っておいて損はないだろうとの考えからです)。
(環境)
docker=18.0.9 ubuntu=18.04 apache=2.4.29(ubuntu)
(dockerの構築方法)
$ docker --name apache-test -it -p 2000:80 ubuntu:latest
(apacheの環境構築)
:/# apt install -y apache2 vim python3.6 python3-pip :/# pip3 install flask
(apache内の設定)
・mod_cgid有効化済み
・/etc/apache/conf-enabled/serve-cgi-bin.conf
apache
1<IfModule mod_alias.c> 2 <IfModule mod_cgi.c> 3 Define ENABLE_USR_LIB_CGI_BIN 4 </IfModule> 5 6 <IfModule mod_cgid.c> 7 Define ENABLE_USR_LIB_CGI_BIN 8 </IfModule> 9 10 <IfDefine ENABLE_USR_LIB_CGI_BIN> 11 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/index.cgi 12 <Directory "/usr/lib/cgi-bin"> 13 AllowOverride None 14 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 15 Require all granted 16 AddHandler cgi-script .cgi .py 17 </Directory> 18 </IfDefine> 19</IfModule>
・/etc/apache2/apache2.conf -> SERVERNAMEを追加したのみ(hogehoge)
・/etc/apache2/sites-enabled/000-default.conf -> 初期設定のまま
※他の設定ファイルについては、特にいじっていません。またどういう動き、機能であるかを理解することに主眼を置いているので、細かい事務的なような設定は今回施していません。
(アプリケーション関連のスクリプト)
・/usr/lib/cgi-bin/index.cgi
python
1!/usr/bin/python3.6 2import os 3from wsgiref.handlers import CGIHandler 4from flaskr import app 5 6if __name__=="__main__": 7 os.environ['SERVER_NAME'] = 'hogehoge' 8 os.environ['SERVER_PORT'] = "80" 9 os.environ['REQUEST_METHOD'] = "GET" 10 CGIHandler().run(app)
※os.environ部分はpycharmでエラーが出たので手動しています
・/usr/lib/cgi-bin/flaskr.py
python
1#!/usr/bin/python3.6 2# -*- coding: utf-8 -*- 3import flask 4 5app = flask.Flask(__name__) 6 7@app.route('/') 8def index(): 9 return 'Hello World' 10 11if __name__=="__main__": 12 app.run(debug=True)
※画面に'Hello World'が単純に表示されるものです。
以上が環境です。pycharmで実行コードの結果などを見ても、apacheの諸設定よりもflaskrのappかまたはCGIHandlerの実行結果が空か何も返さないので、結果的に404 Not Foundになるのかなと考えています。
実際、flaskr.pyでわざとエラーを起こすと500 Internal Errorに変わります。
mod_rewriteや.htaccessはURLの表示や実際のファイルへの移動などを行うものだと認識しており、ScriptAliasの設定だけでアプリの実行自体には影響はないのではないかと思い、設置していません(実際にflask公式サイトを参考に設置してもうまくいきませんでした)。
上記のように推測してはいるのですが、理由が全くわからず、四苦八苦しています。
flaskやApacheの公式ドキュメントを主に参照していますが、適宜ググって出て来たサイトも参考にしています。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。