APACHE中增加模块遇到的问题 http_proxy proxy_util

阿里巴巴内部推荐招聘,联系旺旺abacusli,[email protected]

在用apxs安装apache mod_proxy时候出现undefined symbol: ap_proxy_lb_workers的错误,原先用的是:

apxs -i -a -c mod_proxy.c错误信息:
httpd: Syntax error on line 19 of /opt/lamp/apache2/conf/httpd.conf: Cannot load /opt/lamp/apache2/modules/mod_proxy.so into server: /opt/lamp/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers原来需要加上proxy_util.c一起编译:
apxs -i -a -c mod_proxy.c proxy_util.c问题解决。因为proxy_util.c是基础模块,所以必须先安装。下面也是安装方法。 先安装基础模块:
# /usr/local/apache2/bin/apxs -c -i mod_proxy.c proxy_util.c
# /usr/local/apache2/bin/apxs -i -a -n proxy mod_proxy.la
再安装mod_proxy_http模块
# /usr/local/apache2/bin/apxs -c mod_proxy_http.c
# /usr/local/apache2/bin/apxs -i -a -n proxy_http mod_proxy_http.la 再去看httpd.conf时,已添加如下内容:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so 重新启动没有任何报错信息,证明mod_proxy_http模块加载成功。
注:我在安装proxy_http.c的时候,用的是
 /usr/local/apache2/bin/apxs -i -a -n http mod_proxy_http.la这样的一个命令,所以在配置文件中
LoadModule http_module modules/mod_proxy_http.so 为这样一条语句,
重启的提示为

[root@localh proxy]# /usr/local/apache2/bin/apachectl configtest
httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `http_module' in file /usr/local/apache2/modules/mod_proxy_http.so: /usr/local/apache2/modules/mod_proxy_http.so: undefined symbol: http_module
至于我为什么要/usr/local/apache2/bin/apxs -i -a -n 
http 这样写,

而不/usr/local/apache2/bin/apxs -i -a -n 
proxy_http mod_proxy_http.la 这样写(注意我说的是标红的地方)是因为我受到前面在加模块时看到的文章也出现过这样的提示,是因为我的不符合语法。所以才那样些,现在看来http的必须需要安装proxy_http 这样些至于原因等我找到答案后在做解释。(我怀疑因为proxy_http 是proxy的一个子模块,所以需要这样写的,如果直接的一个模块就不需要―了)

(二)编辑增加cache模块遇到的问题。下面是我引用的http://qbaok.blog.163.com/blog/static/10129265200981642957718/这里面的文章,再这里感谢作者的文章给我的帮助,这也是我在配置时遇到的问题,我也就直接都拿过来了,希望作者不要介意。
配apache mod_cache 后 httpd -k start
apache出现以下信息:
Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: cache_generate_key_default 
正规解决方案:

正规解决方案:
modules/cache下面有很多的.c文件,大致用途如:
mod_cache.c 编译得到mod_cache.so 主要用来控制整个apache的cache功能。
mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c这个三个文件编译后得到各自的cache支持模块。
mod_cache.c还需要其他的程序来进行工作,包括cache_*.c这些文件。因此apxs动态加载一个模块的时候,需要把这些文件和mod_cache.c 一起编译:perl /usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
上述是我遇到问题,照着上面作者的做法做后问题解决。
在这里我要对我上面的文章中标金黄的部分做一下解释。
在我仔细看了配置文件,详细的做了对比,
LoadModule logio_module  modules/mod_logio.so
LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule cache_module       modules/mod_cache.so
LoadModule mem_cache_module         modules/mod_mem_cache.so
LoadModule disk_cache_module        modules/mod_disk_cache.so
注意到这些modules/mod_proxy.so、modules/mod_proxy_http.so模块和前面的写法了没,proxy_module、proxy_http_module这些写法都是根据modules/mod_proxy.so、modules/mod_proxy_http.so这来的,如果这是mod_proxy.so,则在前面些proxy_module,如果是mod_proxy_http.so则在前面写proxy_http_module。所以我在写mod_mem_cache.so这个的时候,不用想就写了LoadModule mem_cache_module ,这样在检查配置文件的时候也没有提示错误,直接提示ok。以后写的时候,就可以这样写了,我认为是不会有错误的
原文网址:http://it.chinawin.net/internet/article-1aa1a.html

你可能感兴趣的:(apache,c)