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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1890閲覧

Load Module wsgi_modulesとWSGIScriptAliasを設定すると動かなくなる。

ASAPBYAF

総合スコア2

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/16 05:36

編集2021/09/16 06:52

#apacheとmod_wsgiの連携をして、ブラウザからアクセスした際に、pythonのファイルを実行して返すサーバーを実装したいです。フレームワークは使用していません。
apacheは2.4.48でmod_wsgiは4.9.0のバージョンを使っています。
#まずmod_wsgiを使わず、apacheのHostとVirtualHostそれぞれにアクセスし、htmlのファイルを返すこと確認しました。
具体的には、curl localhost:80,curl localhost:81を入力して、設定したindex.htmlが表示されました。

#次の段階として、mod_wsgiを連携させたいと考えています。
mod_wsgiは、ソースコードからダウンロードanaconda4.10.1において仮想環境を構築し、その仮想環境の中にpipを使ってインストールしました。
また、この仮想環境にはpython3.9.6もインストールしました。

#このような環境の下で、以下のような4つの設定をしました。
###(1)WSGIScriptAliasの設定(/usr/local/apache2/conf/extra/httpd-vhosts.conf)

Listen 81 <VirtualHost *:81> ServerName wsgiapp.example.com DocumentRoot "/usr/local/vhosts" <Directory "/usr/local/vhosts"> AllowOverride All Require all granted </Directory> Alias /vhalias "/usr/local/vhalias" <Directory "/usr/local/vhalias"> AllowOverride All Require all granted </Directory> WSGIScriptAlias /myapp "/usr/local/www/myapp.wsgi" <Directory "/usr/local/www"> AllowOverride All Require all granted </Directory> </VirtualHost>

###(2)Load moduleの設定(/usr/local/apache2/conf/httpd.conf)

LoadModule wsgi_module /home/vagrant/anaconda3/envs/gaia/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so

このディレクトリはmod_wsgi-express module-configによって確認したものを使っています。
###(3)Include conf/extra/httpd-vhosts.confはコメントアウトを解除(/usr/local/apache2/conf/httpd.conf)

# Virtual hosts Include conf/extra/httpd-vhosts.conf

###(4)myapp.wsgiの設定(/usr/local/www/myapp.wsgi)

def application(environ, start_response): status = '200 OK' output = b'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]

#このように設定し、apacheを再起動すると、curl localhost:80,curl localhost:81,curl localhost:81/myappと打っても何も反応がないです。エラーが発生するわけでもないです。

また設定の方法はいろいろ試しており、
(1)httpd-vhosts.conf側にLoad moduleの設定、httpd-vhosts.conf側にWSGIScriptAlias
(2)httpd.confとhttpd-vhosts.conf側の両方にLoad moduleの設定、httpd-vhosts.conf側にWSGIScriptAlias
のどの場合も同じように動作しないことがわかっています。

#設定方法のわかる方がいらっしゃれば教えていただければと思います。よろしくお願いします。

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

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

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

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

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

yukky1201

2021/09/16 07:13

サーバが動作していれば何も反応がない。ということはないはずです。 「apacheを再起動すると」という事ですが、何を実施して、何を確認しているでしょうか。もしかしたら、起動に失敗したりしてないでしょうか。apacheのstauts確認結果も提示ください。
ASAPBYAF

2021/09/16 07:21 編集

まず、systemctl restart apache2をしました。 そのあと、systemctl status apache2とすると、 --- apache2.service - Apache httpd daemon Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; vendor preset: disabled) Active: active (running) since 木 2021-09-16 16:15:24 JST; 4s ago Process: 27620 ExecStart=/usr/local/apache2/bin/apachectl -k start (code=exited, status=0/SUCCESS) Main PID: 27623 (httpd) Tasks: 5 CGroup: /system.slice/apache2.service └─27623 /usr/local/apache2/bin/httpd -k start --- が得られました。 その後、curl localhostとすると、何も返ってきません。 固まるわけではなく、Ctrl+Cで抜けることはできます。 よろしくお願いします。
holy_

2021/09/16 08:49

/var/log/httpd/error_logはエラーログ出力されていますか?
ASAPBYAF

2021/09/16 09:13 編集

起動していることを確認した後、curl localhostとすると、動かなくなりました。 以下は、その直後に確認したerror_logファイルの対応個所になります。 (/usr/local/apache2/logs/error_log) =============================================== Current thread 0x00007fb7af645740 (most recent call first): <no Python frame> [Thu Sep 16 18:03:55.609686 2021] [wsgi:warn] [pid 10330:tid 140426898331456] (13)Permission denied: mod_wsgi (pid=10330): Unable to stat Python home /home/vagrant/anaconda3/envs/gaia. Python interpreter may not be able to be initialized correctly. Verify the supplied path and access permissions for whole of the path. Python path configuration: PYTHONHOME = '/home/vagrant/anaconda3/envs/gaia' PYTHONPATH = (not set) program name = 'python3' isolated = 0 environment = 1 user site = 1 import site = 1 sys._base_executable = '' sys.base_prefix = '/home/vagrant/anaconda3/envs/gaia' sys.base_exec_prefix = '/home/vagrant/anaconda3/envs/gaia' sys.platlibdir = 'lib' sys.executable = '' sys.prefix = '/home/vagrant/anaconda3/envs/gaia' sys.exec_prefix = '/home/vagrant/anaconda3/envs/gaia' sys.path = [ '/home/vagrant/anaconda3/envs/gaia/lib/python39.zip', '/home/vagrant/anaconda3/envs/gaia/lib/python3.9', '/home/vagrant/anaconda3/envs/gaia/lib/python3.9/lib-dynload', ] Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state: core initialized ModuleNotFoundError: No module named 'encodings' Current thread 0x00007fb7af645740 (most recent call first): <no Python frame> ============================================= よろしくお願いします。
guest

回答2

0

自己解決

error_log(/usr/local/apache2/logs/error_log)の

######(13)Permission denied: mod_wsgi (pid=10330): Unable to stat Python home /home/vagrant/anaconda3/envs/gaia. Python interpreter may not be able to be initialized correctly. Verify the supplied path and access permissions for whole of the path.

の部分にヒントがありました。
特にVerify the supplied path and access permissions for whole of the path.の部分が改善の具体策を与えてくれたと考えています。
この部分は「与えられているpythonのパス
/home/vagrant/anaconda3/envs/gaia
のパスがあっているか、またアクセス権限があるかを確認してください。」という意味だと考えました。

###そこで以下の2点を見直しました。
(1)実行ユーザーは誰か?
(2)(1)で確認したユーザーは適切な権限を持っているか?
###なぜこの2点だと考えたか
apacheを起動するのはrootだが、ブラウザからのアクセスに対応しているのは実行ユーザという者らしいと知り、実行ユーザが適切な権限を持って、レスポンスに必要なファイルおよびディレクトリにアクセスできる必要があると考えたから。(正直、正確な理解はできてないです。http://honana.com/apache/apache_22/userとhttps://qiita.com/100/items/ab31e57fcc66ac661d5cを参考にしました。)
###(1)について
(/usr/local/apache2/conf/httpd.conf)でhttpd.confファイルの以下を確認。

User daemon Group daemon

###(2)について
/home/vagrant/anaconda3/envs/gaiaの各ディレクトリの権限を確認。各ディレクトリの上のディレクトリでls -laを使うことで、確認しました。

drwxr-xr-x. 3 root root 21 5月 13 2020 home drwx------. 8 vagrant vagrant 258 9月 17 14:08 vagrant drwxrwxr-x. 28 vagrant vagrant 4096 9月 15 12:11 anaconda3 drwxrwxr-x. 3 vagrant vagrant 46 9月 15 12:17 envs drwxrwxr-x. 11 vagrant vagrant 173 9月 15 12:17 gaia

vagrantのディレクトリにアクセス権限がないことが問題のように思えました。
(アクセス権限の見方はhttps://qiita.com/shizen-shin/items/453e408f78483d391930を参考にしました。)
そこで、chmod o+r vagrantとchmod o+x vagrantを使って、権限を与えました。
コマンドの詳細はhttps://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95を参考にしました。
その後、homeでls -laとすると、

drwx---r-x. 8 vagrant vagrant 258 9月 17 14:08 vagrant

となっており、権限が確認されました。
###再起動して実際にアクセスすると、出力が返ってきました。
再起動。

systemctl restart apache2

リクエスト

curl localhost:81/myapp/

出力

Hello World!

投稿2021/09/17 05:25

編集2021/09/17 05:46
ASAPBYAF

総合スコア2

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

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

0

https://teratail.com/questions/151960と同様の問題な気がします。
WSGIPythonHomeに使用したいpythonを指定して
LoadModuleでwsgi_module modules/mod_wsgi.soを指定する必要がありそうです

投稿2021/09/16 09:26

編集2021/09/16 09:27
holy_

総合スコア364

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

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

ASAPBYAF

2021/09/17 08:44 編集

コメントありがとうございます。 解決しました。 自己解決において、holy_さんの「/var/log/httpd/error_logはエラーログ出力されていますか?」という助言がとても役に立ち、解決に役立てることができました。 本当にありがとうございました。 問題は回答で指摘された点とは別のところにありました。(詳細は自己解決欄に述べます。) 指摘していただいた点に関しては以下の理由から問題ないと考えています。 変更はしていませんが、結果としてapacheは起動しています。 (理由) ”WSGIPythonHomeについて”  本文に書き忘れていたのですが、httpd.confにWSGIPythonHomeの設定をした状態で上のようなエラーログとなっていました。 ”LoadModuleについて”  公式サイトhttps://pypi.org/project/mod-wsgi/に記述されているmod_wsgi-express module-      configというコマンドを用いて行っており問題はないと考えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問