Linux安装apache环境及遇到的问题解决

最近工作之外接了一些项目,都是Linux下apache环境的,本来想直接跑nginx,无奈,都用了很多rewrite,apache和nginx在rewrite上有些语法不太一样,不太想去改这些规则,于是就在同一台服务器上再装了一套apache的环境。

最先想到的是偷懒的方式,让一套php同时支持apache和php-fpm,但在configure的时候会报错。报错的大体内容是说只能二选一。于是保留之前的nginx一套环境不去动她。

http://httpd.apache.org/ 下了httpd2.2,
./configure --prefix=/usr/local/httpd
make && make install

apr那些可以不装。

然后在到之前的php目录重新编译php。
php的版本还是之前nginx的那套版本,更多参考:http://www.webyang.net/Html/web/article_129.html

修改编译参数
./configure --prefix=/usr/local/php_httpd --with-config-file-path=/usr/local/php_httpd/etc --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml  --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt=/usr/local/mcrypt --with-gd  --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --with-pear   --enable-pdo --with-pdo-mysql --with-gettext --enable-exif --enable-wddx --enable-calendar --enable-ftp  --enable-dba --enable-sysvmsg  --enable-sysvshm --enable-debug --enable-maintainer-zts  --with-pcre-regex --enable-gd-jis-conv --enable-sockets

去掉 --enable-fpm --enable-embed --with-fpm-user=www --with-fpm-group=www
--enable-embed=TYPE     建立内嵌的SAPI库。参数为shared、static

make && make install

至此,apache的一套环境已经搭好。mysql共用nginx的那套。

/usr/local/httpd/bin/apachectl start
然后改端口,让apache跑起来。

ok,一切安好。centos。

不过本地centos却并不顺利。显示php文件没被解析。
添加下面三句:
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .phtml .php3
LoadModule php5_module modules/libphp5.so

重启,报错libphp5.so找不到,find / -name 'libphp5.so'
cp 查找的so的路径 module/libphp5.so
再次重启报错。没有权限。
chcon -t textrel_shlib_t libphp5.so
selinux引起的,可以直接关闭selinux。

再次重启,ok。如果设置端口号过大,也会报错。
还是selinux引起的。设置81吧,如果selinux开启的。

结果发现apache没有mod_rewrite模块。
find / -name mod_rewrite.c //在apache的源码安装目录中寻找mod_rewrite.c文件
cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录
/usr/local/httpd/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你当前正在使用apache的bin目录里
/usr/local/httpd/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。

编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,
LoadModule mod_rewrite_module modules/mod_rewrite.so
修改为:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了。
不修改会报错:
Can't locate API module structure 'mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: Undefined symbol "mod_rewrite_module"

问题总是千奇百态,给有需要的人提供帮助。

更多请支持:http://www.webyang.net/Html/web/article_188.html

相关推荐