最近工作之外接了一些项目,都是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"
问题总是千奇百态,给有需要的人提供帮助。
已有1条评论