Ubuntu 14.04 (Trusty Tahr)安装配置Apache mod_wsgi

WSGI规范为动态Web应用程序与Web服务器通信提供了一种标准和高效的方法。 mod_wsgi提供了一个用Apache简单部署WSGI应用程序的方法。 WSGI用于部署使用框架和工具(如Django,Web.py,Werkzug,Chery.py,TurboGears和Flask)编写的应用程序。

安装依赖

执行如下命令安装依赖

  1. 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:

  1. import os
  2. import sys
  3.  
  4. sys.path.append(‘/var/www/html/example.com/application’)
  5.  
  6. os.environ[‘PYTHON_EGG_CACHE’] = ‘/var/www/html/example.com/.python-egg’
  7.  
  8. def application(environ, start_response):
  9.     status = ‘200 OK’
  10.     output = ‘Hello World!’
  11.  
  12.     response_headers = [(‘Content-type’, ‘text/plain’),
  13.                         (‘Content-Length’, str(len(output)))]
  14.     start_response(status, response_headers)
  15.  
  16.     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:

  1. import web
  2.  
  3. urls = (
  4.     ‘/(.*)’, ‘hello’
  5. )
  6.  
  7. class hello:       
  8.     def GET(self, name):
  9.         if not name:
  10.             name = ‘World’
  11.         return ‘Hello, ‘ + name + ‘!’
  12.  
  13. if __name__ == "__main__":
  14.     app.run()
  15.  
  16. app = web.application(urls, globals(), autoreload=False)
  17. application = app.wsgifunc()

Django WSGI配置

以下示例的application.wsgi文件为Django应用程序的配置:
/var/www/html/example.com/application/application.wsgi:

  1. import os
  2. import sys
  3.  
  4. sys.path.append(‘/var/www/html/example.com/application’)
  5.  
  6. os.environ[‘PYTHON_EGG_CACHE’] = ‘/var/www/html/example.com/.python-egg’
  7.  
  8. os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘settings’
  9.  
  10. import django.core.handlers.wsgi
  11. application = django.core.handlers.wsgi.WSGIHandler()

在使这个例子能正常工作之前,你的系统必须已经安装有一个正常工作的Django应用程序。 DJANGO_SETTINGS_MODULE指向您的应用程序的“settings.py文件”,在本示例的情况下,该文件位于/var/www/html/example.com/application/settings.py。

配置Apache

部署以下虚拟主机配置并修改路径和域名以符合你应用程序的要求:

  1. <VirtualHost *:80>
  2.    ServerName example.com
  3.    ServerAlias www.example.com
  4.    ServerAdmin [email protected]
  5.  
  6.    DocumentRoot /var/www/html/example.com/public_html
  7.  
  8.    ErrorLog /var/www/html/example.com/logs/error.log
  9.    CustomLog /var/www/html/example.com/logs/access.log combined
  10.  
  11.    WSGIScriptAlias / /var/www/html/example.com/application/application.wsgi
  12.  
  13.    Alias /robots.txt /var/www/html/example.com/public_html/robots.txt
  14.    Alias /favicon.ico /var/www/html/example.com/public_html/favicon.ico
  15.    Alias /images /var/www/html/example.com/public_html/images
  16.    Alias /static /var/www/html/example.com/public_html/static
  17. </VirtualHost>

在这个例子中,WSGIScriptAlias指令告诉Apache VirtualHost,所有请求由指定的WSGI脚本处理。 四个Alias指令允许Apache直接从DocumentRoot提供robots.txt和favicon.ico文件以及/ images和/ static位置下的所有资源,而无需WSGI应用程序的参与。 您可以根据需要添加任意数量的Alias配置参数。
虚拟主机配置好后,重启Apache

  1. service apache2 restart

每次application.wsgi文件更改时,您都需要重新启动Web服务器。 但是,对应用程序的所有其他修改不需要重新启动Web服务器。 恭喜! 您现在已经使用mod_wsgi成功部署了WSGI应用程序。