WSGI规范为动态Web应用程序与Web服务器通信提供了一种标准和高效的方法。 mod_wsgi提供了一个用Apache简单部署WSGI应用程序的方法。 WSGI用于部署使用框架和工具(如Django,Web.py,Werkzug,Chery.py,TurboGears和Flask)编写的应用程序。
安装依赖
执行如下命令安装依赖
- apt-get install apache2 python-setuptools libapache2-mod-wsgi
配置WSGI处理器
为了使mod_wsgi能够对您的应用程序提供访问支持,您需要在应用程序目录中创建一个application.wsgi文件。 应用程序目录应位于DocumentRoot外部。 以下三个部分每个呈现一个不同的application.wsgi示例文件,以说明此文件的基本结构:
Hello World WSGI配置
在此示例中,应用程序存储在/var/www/html/example.com/application目录中。 修改此示例和所有以下示例以符合部署中使用的实际文件和位置。
/var/www/html/example.com/application/application.wsgi:
- import os
- import sys
-
- sys.path.append('/var/www/html/example.com/application')
-
- os.environ['PYTHON_EGG_CACHE'] = '/var/www/html/example.com/.python-egg'
-
- def application(environ, start_response):
- status = '200 OK'
- output = 'Hello World!'
-
- response_headers = [('Content-type', 'text/plain'),
- ('Content-Length', str(len(output)))]
- start_response(status, response_headers)
-
- return [output]
您必须将应用程序的路径追加到系统路径。 PYTHON_EGG_CACHE变量的声明是可选的,但在使用Web服务器的权限执行WSGI脚本时,某些应用程序可能需要声明。
Web.py WSGI配置
在此示例中,Web.py应用程序嵌入在application.wsgi文件中。 必须安装Web.py Framework才能使以下应用程序成功运行。
/var/www/html/example.com/application/application.wsgi:
- import web
-
- urls = (
- '/(.*)', 'hello'
- )
-
- class hello:
- def GET(self, name):
- if not name:
- name = 'World'
- return 'Hello, ' + name + '!'
-
- if __name__ == "__main__":
- app.run()
-
- app = web.application(urls, globals(), autoreload=False)
- application = app.wsgifunc()
Django WSGI配置
以下示例的application.wsgi文件为Django应用程序的配置:
/var/www/html/example.com/application/application.wsgi:
- import os
- import sys
-
- sys.path.append('/var/www/html/example.com/application')
-
- os.environ['PYTHON_EGG_CACHE'] = '/var/www/html/example.com/.python-egg'
-
- os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
-
- import django.core.handlers.wsgi
- application = django.core.handlers.wsgi.WSGIHandler()
在使这个例子能正常工作之前,你的系统必须已经安装有一个正常工作的Django应用程序。 DJANGO_SETTINGS_MODULE指向您的应用程序的“settings.py文件”,在本示例的情况下,该文件位于/var/www/html/example.com/application/settings.py。
配置Apache
部署以下虚拟主机配置并修改路径和域名以符合你应用程序的要求:
- <VirtualHost *:80>
- ServerName example.com
- ServerAlias www.example.com
- ServerAdmin username@example.com
-
- DocumentRoot /var/www/html/example.com/public_html
-
- ErrorLog /var/www/html/example.com/logs/error.log
- CustomLog /var/www/html/example.com/logs/access.log combined
-
- WSGIScriptAlias / /var/www/html/example.com/application/application.wsgi
-
- Alias /robots.txt /var/www/html/example.com/public_html/robots.txt
- Alias /favicon.ico /var/www/html/example.com/public_html/favicon.ico
- Alias /images /var/www/html/example.com/public_html/images
- Alias /static /var/www/html/example.com/public_html/static
- </VirtualHost>
在这个例子中,WSGIScriptAlias指令告诉Apache VirtualHost,所有请求由指定的WSGI脚本处理。 四个Alias指令允许Apache直接从DocumentRoot提供robots.txt和favicon.ico文件以及/ images和/ static位置下的所有资源,而无需WSGI应用程序的参与。 您可以根据需要添加任意数量的Alias配置参数。
虚拟主机配置好后,重启Apache
每次application.wsgi文件更改时,您都需要重新启动Web服务器。 但是,对应用程序的所有其他修改不需要重新启动Web服务器。 恭喜! 您现在已经使用mod_wsgi成功部署了WSGI应用程序。