mac安装apache的mod_wsgi模块错误总结以及hello world测试

mac系统版本为OS X EI Capitan 10.11.4

(其实系统已经安装好了管理员权限的apache,在/etc/apache2下,但是我们还是要安装用户权限的apache,方便更改文件不需要权限)

默认已经在mac上面安装好了用户权限的apache。(如果没有安装好的话,传送门:Apache Installing

apache安装的一些小问题

我简单说说在安装apache过程中遇到的问题:

  • 如果遇到OSError或者写入错误的话,一般是没有root目录下的写入权限,使用sudo命令获得权限就好。
  • configure: error: C compiler cannot create executables 解决方法传送门
  • 通常在安装的过程中会遇到各种各样的工具缺失,比如apr,pcre等,去官网下载源码下来解压,然后运行configure文件后编译就好了。命令如下:
./configure --prefix=安装地址
make
make install
#如果想清除之前的.o文件可以使用make distclean

安装好apache之后命令行进入bin目录下运行./apachectl start启动apache服务。

  • 启动过程中最常见的就是80端口被占用,体现为套接字无法绑定地址,为了省事,我直接将apache中conf目录下的httpd.conf文件中监听的端口改成了8000。
Listen 127.0.0.1:8000

开启浏览器输入localhost后返回it works之后apache则安装成功。

apache安装扩展模块mod_wsgi

安装方法传送门:mod_wsgi installation

第一种方法是传统的apache安装扩展模块的方法,先下载mod_wsgi源码,configure然后再编译安装,然而因为在make intall的时候出现了root权限问题(用sudo也无法解决,详细的情况讨论请参见这里),所以我选择了用第二种方法安装mod_wsgi模块。

第二种方法就是直接用pip安装mod_wsgi,安装好之后将mod_wsgi-py27.so的路径配置在httpd.conf文件中。命令如下:

[sudo] pip install mod_wsgi
mod_wsgi-express module-location
#将输出的路径复制到httpd.conf中,假设输出的路径为/user/local/mod_wsgi-py27.so
#在http.conf中写入以下命令:
LoadModule wsgi_module /user/local/mod_wsgi-py27.so

重新启动apache服务器,mod_wsgi模块就应该安装好了。

hello world example 与 mod_wsgi模块交互

接下来可以试一下用一个简单的hello world application来测试一下mod_wsgi模块的正常工作。

定义一个符合WSGI标准的application并保存该文件为hello.wsgi。(如果不太清楚WSGI标准的可以参看我的一篇博客:WSGI初探及wsgiref简单实现

#hello.wsgi
def application(environ, start_response):
    status = "200 OK"
    response_headers = [(‘Content-type‘, ‘text/plain‘)]
    output = "hello world!"
    start_response(status, response_headers)
    return [output]

我尝试用了两种方法来配置apache使其调用hello.wsgi返回hello world。

  1. 第一种方法就是直接将hello.wsgi放在apache的根目录下访问,比较简单。
  2. 第二种方法就是在apache上配置一个虚拟主机,通过自己设置的域名来访问hello.wsgi。

我们先来看第一种方法:

  1. 首先打开conf目录下的httpd.conf文件(就是apache的主服务器的配置文件),找到DocumentRoot变量,它的值就是apache服务器的根目录,把你的hello.wsgi文件拖到该目录下。(注意,在mac下应该已经确认在Finder中打开所有的文件后缀名,hello.wsgi的后缀名为.wsgi,当然,不一定要使用后缀名.wsgi,也可以使用.py后缀)
  2. 然后在DocumentRoot变量(假设为/Users/Apache/WWW)下设定WSGI脚本的别名:
WSGIScriptAlias /hello.wsgi /Users/Apache/WWW/hello.wsgi

在打开apache服务后,我们在浏览器中输入localhost :8000/hello.wsgi (监听的端口为8000),即可看到“hello world!”。

值得注意的是,如果WSGIScriptAlias设置成了:

WSGIScriptAlias / /Users/Apache/WWW/hello.wsgi

那么在WWW目录下的所有静态文件都会被屏蔽,对localhost:8000/*(*表示任意字符)的任意访问都会转换成对hello.wsgi的访问。如果我们还想要访问在WWW目录下的静态文件,则需要用到Alias指令。

第二种方法:

1.首先 在http.conf文件中设置可以引入包含虚拟主机的文件:

# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
将上面的#去掉就可以引入虚拟主机的配置文件了

2.在extra目录下找到http-ghosts.conf配置virtual host,基本跟配置主服务器一样:

(假设虚拟主机的根目录为/Users/Apache/VirtualHost,监听的端口为8001)

<VirtualHost *:8001>
    DocumentRoot "/Users/Apache/VirtualHost"
    ServerName www.virtualhost.com
    ServerAlias virtualhost.com
    WSGIScriptAlias /hello.wsgi /Users/Apache/VirtualHost/hello.wsgi
    DirectoryIndex index.html
    <Directory "/Users/Apache/VirtualHost">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

3.在设置完虚拟主机的配置文件之后,我们还不能在浏览器中立即测试我们的新域名,我们还要将新域名和127.0.0.1绑定起来。因此打开/etc/hosts文件,绑定域名和地址(修改文件需要权限):

127.0.0.1      virtualhost.com

那么/etc/hosts为什么要这样设定呢?

一般来说,当浏览器得到域名的时候,浏览器首先通过/etc/hosts文件查询它的ip地址,得不到ip的时候再向DNS服务器查询。因此,如果我们在mac上设置了shadowsocks的全局代理,所有的请求直接走代理,那么我们就获取不到这个我们自己创立的域名的ip地址了。(所以记得关闭你的翻墙工具)

此时,我们打开浏览器就可以输入virtualhost.com:8000/hello.wsgi就能看到“hello world!”了。

关于mod_wsgi模块的embedded mode(嵌入模式)与Daemon Process(守护进程)

mod_wsgi模块在加载WSGI应用程序的时候有两种不同的模式,默认使用的是嵌入模式,而另一种模式是守护进程,等会我们会讲述如何开启守护进程。

这两种模式有什么不同呢?嵌入模式将会直接在apache的子进程中加载WSGI Application,而守护进程则会在与apache进程的不同进程中加载,需要进行进程间的通信机制。因此,如果对WSGI Application的代码进行了修改,那么在嵌入模式下需要重启apache服务器,而在守护进程下则不需要重启服务器。

以及,如果多个django的项目布置在同一台apache服务器上,也是推荐用守护进程,否则进程中的settings module会相互错乱,具体参考这里:How to use Django with Apache and mod_wsgi

接下来是Daemon process的virtualhost配置代码:

这里写代码片
时间: 2024-10-14 15:17:53

mac安装apache的mod_wsgi模块错误总结以及hello world测试的相关文章

CentOS安装Apache的FastCGI模块(mod_fastcgi)

网上有很多篇关于Apache的fastcgi模块安装说明的文章,大部分都是基于Apache源码编译的,如果是通过yum install方式安装httpd的话,直接依葫芦画瓢必然会遇到各种各样的编译问题,通过查阅老外写的一些关于CentOS下Apache的FastCGI模块(mod_fastcgi)的安装文档,我大致重新整理了一下. 1. 安装编译相关的依赖包 # yum install httpd-devel apr apr-devel libtool 2. 下载mod_fastcgi源代码 #

在linux上安装apache是出现error1错误

正常安装apache,都make时,出现类似问题: make[1]: *** [shared-build-recursive] Error 1 make[1]: Leaving directory `/lamp/httpd-2.4.7' make: *** [all-recursive] Error 1 解决办法: 安装辅助软件zlib; 具体步骤如下: 下载zlib-1.2.3.tar.gz放在/usr/local目录下执行以下命令:tar -zxvf zlib-1.2.3.tar.gzcd

mac 安装 swoole 可能会出现的错误

请先看完之后再操作 一.用pecl安装swoole(没有安装起来) 2018年4月,由于homebrew的变动,导致无法使用brew install的方式安装php的扩展,现在改为用pecl安装,pecl安装swoole的方法为: pecl install swoole 出现在选项要填yes还是no,这篇文章有写:https://www.jianshu.com/p/14f542b7e5d0#comment-27164461 二.可能出现的报错及解决方法 2.1 fatal error: 'ope

mac 安装apache 配置虚拟主机

来源:http://blog.csdn.net/qianling3439/article/details/29410381 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v,(可能需要输入机器秘密).如下显示Apache的版本 接着输入 sudo apachectl start,这样Apache就启动了.打开Safari浏览器地址栏输入 “http://localhost”,可以看到内容为“It works!”的页面.其位于“/Library(资源库)

Mac 配置Apache Php编译ssl错误解决

终端 Php编译错误解决 //错误信息 unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /Users/huluo/Downloads/SimplePush/simplepush.php on line 21 出现此错误是Apache需要开启ssl模块 查看版本信息 sudo apachectl -v 启动 sudo apachectl start 打开浏览器输入 “http://l

Debian/Ubuntu下安装Apache的Mod_Rewrite模块的步骤

启用 Mod_rewrite 模块:sudo a2enmod rewrite 另外,也可以通过将 /etc/apache2/mods-available/rewrite.load 连接到 /etc/apache2/mods-enabled/rewrite.load 来打开 Mod_rewrite 模块:sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load 其实,当在De

Centos7源码安装Apache和PHP

源码安装Apache 安装需要的依赖 yum -y install gcc autoconf automake make pcre pcre-devel openssl openssl-devel?#pcre是正则表达式库#openssl是安全通信的库 安装apr和apr-until #apr是Apache可移植运行时#apr-until是Apache可移植运行时实用程序库?wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.7

1, 安装apache ?mod_WSGI

1, 安装apache  mod_WSGI   2, 安装 flask pip install Flask==0.9 3, 创建自己的 flask app 在 Flask 中的 "Hello, World" 现在在你的 microblog 文件夹中下有一个 flask 子文件夹,这里有 Python 解释器以及 Flask 框架以及我们将要在这个应用程序中使用的扩展. 是时候去编写我们第一个 web 应用程序! 在 cd 到 microblog 文件夹后,我们开始为应用程序创建基本的文

Linux 源码安装apache 与常见错误解决

文档原位置 一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级. 升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包(谨慎!小心).下面是使用源代码的方式行,它们的下载路径为:(~_~)这里不再说到那里下载了,相信你有能力找的到的,呵呵 2.安装依赖的软件包(当然这里可以认为成需要的编译环境咯!) yum -y install pcre-devel yum -y install  "Developmen