ubuntu下安装apache2.2 mod_wsgi django(二)

ubuntu下安装apache2.2 mod_wsgi django(二)   

 

在上一篇博文:

ubuntu下安装apache2.2+mod_wsgi+django(一)

中已经建立了一个apache2.2+mod_wsgi_python+django的完整环境,并且建立了一个简单的网站,使用一个main.wsgi的python脚本生成动态的内容。今天接上次的实验,我继续讨论python开发web。

 

这次我们另外新建一个虚拟主机,在

/etc/apache2/sites-availabe/

下面创建一个配置文件-testserver

配置如下:

<VirtualHost 127.0.0.4:80> 

  

    ServerName 127.0.0.4 

    DocumentRoot /var/www/test 

    WSGIScriptAlias /dynamic /var/www/test/dynamic

    <Directory />

       Options indexes

       AllowOverride None

       Order deny,allow

       Allow from all

    </Directory>

    <Directory /var/www/test/dynamic> 

        Options FollowSymLinks ExecCGI

        Order allow,deny 

        Allow from all 

    </Directory> 

   

    <Directory /var/www/test/static>

       Options indexes

       AllowOverride None

       Order deny,allow

       Allow from all

    </Directory>

   

</VirtualHost>

好了,解释一下上述配置文件的作用。

虚拟主机对应url为127.0.0.4:80

虚拟主机虚拟目录为/var/www/test

其中有2个子目录,dynimic和static,下面一行告诉apache,/var/www/test/dynamic下面视为python脚本程序。

WSGIScriptAlias /dynamic /var/www/test/dynamic

 

所以你要是在这个文件放一个静态的html文件,那么访问的时候就会出错,查看apache给出的error日志

 

/var/log/apache2/error.log

 

就会告诉你类似这样的错误:

:15:32 2012] [error] [client 127.0.0.4] mod_wsgi (pid=1444, process='', application='127.0.0.4|/static/index.html'): Failed to parse WSGI script file 'C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/test/static/index.html'.

[Tue Jan 17 13:15:32 2012] [error] [client 127.0.0.4] mod_wsgi (pid=1444): Exception occurred processing WSGI script 'C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/test/static/index.html'.

[Tue Jan 17 13:15:32 2012] [error] [client 127.0.0.4]   File "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/test/static/index.html", line 1

[Tue Jan 17 13:15:32 2012] [error] [client 127.0.0.4]     <html><body><h1>It works! 127.0.0.2</h1></body></html>

[Tue Jan 17 13:15:32 2012] [error] [client 127.0.0.4]     ^

[Tue Jan 17 13:15:32 2012] [error] [client 127.0.0.4] SyntaxError: invalid syntax

看到了吧,语法错误,那是因为apache把你的html文件视为python解释执行。

 

本人曾今就犯了这样的错误,希望也能犯这个错误,为什么? 我是不是有病? 不是。因为我觉得很多东西,你犯了错误,你才能明白这个东西是怎么工作的,如果所有的东西都是别人告诉你怎么做是对的,那么你其实没有真正的了解这个东西,当下次出现一些错误时你就不知道怎么办了。或者你要做的东西发生了点变化,同样你又不知道怎么办了。好了,扯得有点远了,回到正题吧。

 

上面根目录下还有一个子目录就是static,这里我们打算放一些静态的html网页,收到客户端请求这些页面时,直接返回这些网页给客户端就好。所以我们的static这个目录不需要下面这句:

WSGIScriptAlias /static /var/www/test/static

如果你写了这句就会产生上面的那个错误。 

 

同样我们的dynamic不可以把WSGIScriptAlias这行去掉,否则,即使你的dynamic中的文件是以py为后缀的文件,它不会因为你是py后缀的文件就去调用python解释器去执行这个脚本。但是不会像前面那样出现错误,而是直接把脚本中内容直接返回给浏览器,这个比较危险,因为你的程序代码就被公布于众了。

 

有了前面的解释你知道接下给做些什么了吧。

首先创建目录:

 

sudo mkdir /var/www/test

sudo mkdir /var/www/test/dynamic

sudo mkdir /var/www/test/static

 

在static 下面新建一个index.html,输入下面内容

<html>

<body>

<h1>It works! static web

</h1>

</body>

</html>

让后去dynamic下面新建一个文件test,不用什么后缀,你要是想加一个也无所谓,内容如下:

 

def application(environ, start_response):

    status='200 OK'

    output=‘<html><head>’ +

           '<br></head><body>' +

           '<p align=center>Hello world.</p>' +

           '<p align=center>' +

           showtime() +

           '</p></body></html>'

    response_headers=[('Content-type', 'text/plain'),

                     ('Content-Length', str(len(output)))]

    start_response(status, response_headers)

    return [output]

 

from time import gmtime, strftime

def showtime():

    t = strftime("%Y-%m-%d %H:%M:%S", gmtime())

    return t

 

激活我们的网站:

sudo a2ensite testserver 

加载我们的网站:

sudo service apache2 reload 

 

现在,你打开浏览器,输入

http://127.0.0.4/static/index.html,

你就可以看到It works! static web。

 

输入

http://127.0.0.4/dynamic/test

你就可以看到hello world, 下面一行显示当前的时间。

 

今天到此为止。

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

2 thoughts on “ubuntu下安装apache2.2 mod_wsgi django(二)

  1. lampercqy

    您好,很高兴认识您!
    我这几天刚接触python,配置apache+django+mod_wsgi服务器的时候碰到和你说的这个完全一样的错误,我看了您的文章还是看不懂啊,能指导下如何解决吗?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *