公司服务器迁移至阿里云,openapi 模块需要 apache + php;
一、简单的 yum 安装
安装 Apache、PHP 组件
yum install httpd php
安装 apache 扩展
yum install httpd-manual mod_ssl mod_perl
安装 PHP 扩展
yum install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc
至此简单的 apache 和 php 环境便安装完成:
systemctl start httpd
firewall-cmd --add-port=80/tcp
即可在浏览器中访问 apache 主页;
yum 安装的版本一般较低,阿里云中 yum 仓库中 apache 最新的为 2.4.23、PHP 的最新版本为 5.6.23,yum 安装只加载了默认的模块,所以往往需要再次编译添加需要的模块,然后用编译好的文件替换 httpd 和 php 包。。。
编译安装前准备
yum install gcc gcc-c++ make wget
二、编译安装 Apache
yum install zlib-devel openssl-devel
yum install perl perl-devel
1)编译安装 apr、apr-util
APR ( Apache portable Run-time libraries,Apache 可移植运行库)主要为上层的应用程序提供一个可跨越多操作系统平台使用的底层支持接口库,在早期 的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着Apache的进一步开 发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。
wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gz
tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apache/apr
#configure 报错
rm: cannot remove 'libtoolT': No such file or directory
直接打开/usr/local/src/apr-1.4.6/configure 把 $RM “$cfgfile” 注释掉
make && make install
wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apache/apr-util --with-apr=/usr/local/apache/apr
make && make install
2)编译安装 pcre
PCRE(Perl Compatible Regular Expression)是一个 Perl 库,包括 perl 兼容的正则表达式库。
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
tar zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make && make install
3)编译安装 Apache
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.23.tar.gz
tar zxvf httpd-2.4.23.tar.gz
cd httpd-2.4.23
./configure --prefix=/usr/local/apache --with-apr=/usr/local/apache/apr/bin/apr-1-config --with-apr-util=/usr/local/apache/apr-util/bin/apu-1-config --enable-module=so --enable-mods-shared=all --enable-deflate --enable-expires --enable-headers --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache --enable-mime-magic --enable-authn-dbm --enable-vhost-alias --enable-so --enable-rewrite --enable-ssl --with-mpm=prefork
make && make install
添加软连接至安装目录:
ln -s /usr/local/apache/conf /etc/httpd
ln -s /usr/local/apache/bin/* /usr/sbin/
httpd -k start
浏览器访问 http://ip
二、编译安装 PHP
1)安装库文件
yum install libxml2-devel curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel net-snmp net-snmp-devel
wget http://ftp.gun.org/pub/gnu/libiconv/libiconv-1.14.tar.gz http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
编译 libiconv 报错:./stdio.h:1010:1: 错误: ‘gets’未声明(不在函数内)
vim srclib/stdio.h
找到 1010 行,注释掉:
_GL_CXXALIASWARN (gets);
/* It is very rare that the developer ever has full control of stdin,
so any use of gets warrants an unconditional warning. Assume it is
always declared, since it is required by C89. */
//_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
即可
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
分别解压并执行 ./configure && make && make install
2)编译安装 PHP
wget http://cn2.php.net/distributions/php-5.6.23.tar.gz
tar zxvf php-5.6.23.tar.gz
cd php-5.6.23
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-iconv=/usr/local/php/libiconv --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-jpeg-dir --with-png-dir --with-pear --with-freetype-dir --with-zlib --with-libxml-dir --with-iconv-dir --with-xmlrpc --with-mhash --with-mcrypt --with-curl --with-openssl --with-snmp --with-gettext --enable-pdo --enable-mbstring --enable-ctype --enable-simplexml --enable-ftp --enable-sockets --enable-gd-native-ttf --enable-sysvsem --enable-exif --enable-sysvshm --enable-xml --enable-dom --enable-simplexml --enable-shmop --enable-zip --enable-mbregex --enable-bcmath --enable-inline-optimization --enable-soap
PS:附带编译报错可查看:http://blog.sina.com.cn/s/blog_75a07c3b0101kcwb.html
cp php.ini-production /usr/local/php/etc/php.ini
ln -s /usr/local/php/bin/* /usr/sbin
三、配置 Apache 加载 PHP 模块
编辑 Apache 配置文件 httpd.conf
DirectroyIndex index.html index.shtml index.cgi index.php index.php3
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
PHPIniDir "/etc" -- php.ini 文件位置
防止 php info 文件 index.php
<?php
phpinfo();
?>
httpd -k restart
浏览器打开 http://ip 即可看到 php 信息
四、PHP 安装 redis 拓展
1、安装redis
下载:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz
上传phpredis-2.2.4.tar.gz到/usr/local/src目录
cd /usr/local/src #进入软件包存放目录
tar zxvf phpredis-2.2.4.tar.gz #解压
cd phpredis-2.2.4 #进入安装目录
/usr/local/php/bin/phpize #用phpize生成configure配置文件
报 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script. 错则需要
yum install autoconf
然后再执行 /usr/local/php/bin/phpize 生成 configure 配置文件
./configure --with-php-config=/usr/local/php/bin/php-config #配置
make #编译
make install #安装
安装完成之后,出现下面的安装路径
/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
2、配置php支持
vi /usr/local/php/etc/php.ini #编辑配置文件,在最后一行添加以下内容
添加
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226" #redis.so 编译安装位置
extension="redis.so"
PHP 升级至 7.10
官网下载源码,编译安装后,配置好 httpd.conf 发现并不能加载 php 模块。
检查:
LoadModule php7_module modules/libphp7.so
还要添加:
告诉apache,碰到文件名以
.php, .php2, .php3, .php4, .php5, .php6或phtml结尾的文件使用
libphp7.so模块进行解析。
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
从 mod_php 切换到 php-fpm
httpd.conf 配置文件需要注释掉以下配置:
LoadModule php5_module modules/libphp5.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
PHPIniDir "/usr/local/php/etc"
然后去掉mod_proxy.so和mod_proxy_fcgi.so之前的注解,确保他们被apache加载。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
如果php-fpm使用的是TCP socket,那么在httpd.conf末尾加上:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>