Apache と WSGI の連携

ApacheWSGI の連携設定

Flask のアプリを Apache の mod_wsgi から動作させる設定。Python2.6 の CentOS 6 くらいです。古めかしいですね。

メモ1

メモ2

workon XXXX
sudo easy_install pip
sudo pip install flask
sudo yum install httpd-devel python-devel
cd /usr/local/src
sudo wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
sudo tar xzvf mod_wsgi-3.3.tar.gz
cd mod_wsgi-3.3
sudo ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python
sudo make
sudo make install
ls /etc/httpd/modules
vim /var/www/flask.wsgi

なかみ

# -*coding:utf-8 -*-

# virtualenv を使う場合
activate_this = '/home/user/.virtualenvs/work_name/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
# Flaskアプリケーショントップのパスをpathに追加
import sys, os
sys.path.append('/home/user/flask_apl')
# sys.pathで追加したアプリケーションのpythonスクリプトを指定。
# ここでは、app.py 内に「app = Flask(__name__)」があるため、次のように指定。
# モジュール名が main.py であれば from main import app as application などとする。
from app import app as application

ローカルで動作させてたサーバスクリプトをサーバにアップ

sudo vim /etc/httpd/conf/httpd.conf

なかみ

LoadModule wsgi_module modules/mod_wsgi.soa

WSGISocketPrefix /var/run/wsgi
<VirtualHost *:80>
    ServerName example.com

    WSGIDaemonProcess example.com user=apache group=apache threads=5
    WSGIScriptAlias / /var/www/flask.wsgi←WSGIスクリプトがあるところ!権限にきをつける
    WSGIScriptReloading On

    <Directory /home/foo/flask>←実際に動作するサーバスクリプトがあるところ!これも権限注意。
        WSGIProcessGroup example.com
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>   
</VirtualHost>

ログ周りちゃんとしとかんと、なんで動いてないのかよくわからなくなってしまう。 print の標準出力は /var/log/httpd/error_log に出力されてました。 /var/log も権限注意。

WSGIScriptAlias ほそく

http://hogehoge/api/wsgiアプリケーションに振り分けたいときは、

WSGIScriptAlias /api/ /var/www/flask.wsgi

ではなく、

WSGIScriptAlias /api /var/www/flask.wsgi

とすること。

こうすれば、

となる。

あと、同じ VirtualHostディレクティブで複数WSGIアプリケーションを動作させるときは、

WSGIScriptAlias /api1 /var/www/flask1.wsgi
WSGIScriptAlias /api2 /var/www/flask2.wsgi

こんな感じにするといいです。