纠结了好几天,还是做出来吧。LAMP这几个东西搭配起来干活,还是部署比较方便的。
php和httpd结合的方式有两种,一种module,即php作为httpd的一部分运行,默认安装方式就是模块方式。第二种就是fpm,可以单独运行。因为工作环境多为centos 6,所以在6上做。
安装前提示
1.事先准备好开发环境,安装 "Development tools" "Server Platform Development"
安装顺序:1.mysql或者httpd 2.php-fpm,因为php依赖前两个程序
1.mysql 此处使用二进制格式包安装
安装包:mysql-5.6.14-linux-glibc2.5-x86_64.tar
# useradd -r mysql 创建系统用户mysql,一般事先都会存在 # tar xf mysql-5.6.14-linux-glibc2.5-x86_64.tar -C /usr/local/ 解压二进制包 # cd /usr/local/ # ln -sv mysql-5.6.14-linux-x86_64 mysql 创建软链接,可以多次使用 # cd mysql # chown -R root:mysql ./* 改变mysql目录下内容用户组 # mkdir -pv /mydata/data /mydata/data 作为mysql数据文件存放位置 # chown -R mysql.mysql /mydata/data # scripts/mysql_install_db --user=mysql --datadir=/mydata/data --skip_name_resolve # cp support-files/my-large.cnf /etc/my.cnf 主配置文件 # vim /etc/my.cnf [mysqld] 编辑mysqld配置段 ....... datadir = /mydata/data skip_name_resolve = ON 阻止反解地址 innodb_file_per_table = ON 此时还不能用mysql直接登录,那就要去找可执行文件,就去bin # echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh # cp support-files/mysql.server /etc/rc.d/init.d/mysqld 设置启动服务 # chkconfig --add mysqld 加入开机启动 # service mysqld start # ss -tnl 查看3306 是否启动
2.安装httpd-2.4
源码包:httpd-2.4.10.tar.bz2
apr 和 apr-util也可以编译安装
~]# yum install pcre-devel openssl-devel libevent-devel apr-devel apr-util-devel -y 安装需要的开发包,不然./configure不停的报错,缺这缺那,还不一起告知,一个一个来 # ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util # make -j 4 # make install # echo 'export PATH=/usr/local/apache2/bin:$PATH' > /etc/profile.d/httpd.sh # . /etc/profile.d/httpd.sh 把apahectl 加入PATH,每次开机就可使用 # apachectl start httpd-2.4 启动 # ss -tnl 查看80端口是否启动
附加:cp /usr/local/bin/apachectl /etc/rc.d/init.d/httpd ,可以支持stop 和start选项
--sysconfdir=/etc/httpd -->生成主配置文件
3.编译安装php5
前两部分都相同,此处可有两种方式
编译安装php5:php-5.4.40.tar.bz2
模块安装和fpm安装使用同一个包
安装:
(1) 作为httpd的模块安装: # ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-openssl --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-gd --with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d/ # make -j 4 # && make install 注意:如果mpm为线程模型,则需要额外使用--enable-maintainer-zts 复制配置文件: # cp php.ini-production /etc/php.ini 编译php为httpd的模块后,整合php至httpd: 编译httpd.conf,添加: DirectoryIndex index.php index.html AddType application/x-httpd-php .php ************************************************************************************* ************************************************************************************* ************************************************************************************* (2) 安装为fpm:php-fpm 可以独立启动,和模块安装的区别就是加了 --enable-fpm 选项 此处坑好多: --enable-mbstring --with-mcrypt 搞了半天才装上 # ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-openssl --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-gd --with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt --enable-fpm --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d/ # make -j 4 # && make install # mv /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php/php-fpm.conf php-fpm主配置文件 # /usr/local/php5/sbin/php-fpm 此处为php-fpm的服务可执行文件直接执行即可 # echo 'export PATH=/usr/local/php5/sbin/:$PATH' > /etc/profile.d/php-fpm.sh 将php-fpm路径写入环境变量 *** # pkill php-fpm 关闭php-fpm,ss -tnl 发现9000端口没有了
全部编译成功。可以去下一个坑玩耍受虐了。好开心
********************************************************************************
测试一下是否能正常工作,做个虚拟主机,进行下反向代理
要使用fcgi反向代理需要启用两个模块
php-fpm:FastCGI Process Manager
fpm
1.客户端请求URL到达httpd
2.httpd上的fcgi反代模块至fpm
3.fpm找资源
静态资源
httpd处理
动态资源
httpd中有一个fcgi模块。进行反向代理至fpm,将客户端送达的
RL从httpd转交给fpm,fpm创建子进程进行处理,
不在一台主机的情况
fpm监听动态资源所在主机
httpd监听静态资源所在主机
fcgi协议协议:
***启用httpd:proxy_module, proxy_fcgi_module,不然httpd -t 检测ProxyRequests会报错
ProxyRequests Off
ProxyPass
ProxyPassMatch ^(URL-PATTERN)$ fcgi://FCGI-SERVER:PORT/PATH/TO/DIR/$1
#vim /etc/httpd/httpd.conf #DocumentRoot 注释掉中心主机 ServerName www.lh.com:80 去掉# DirectoryIndex index.php index.html 可以识别多种后缀主页 LoadModule proxy_module modules/mod_proxy.so 去掉前面的注释#,启用这两个模块 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 下面直接把虚拟主机配置段放在httpd.conf中 <VirtualHost *:80> ServerName www.lh.com DocumentRoot "/web/lh" <Directory "/web/lh"> Options None AllowOverride None Require all granted </Directory> ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/lh/$1 吧 ProxyPassMatch ^/(pm-status|ping)$ fcgi://127.0.0.1:9000/$1 DirectoryIndex index.php index.html </VirtualHost> #mkdir -pv /web/lh #vim /web/lh/index.php <h1>真麻烦啊</h1> <?php phpinfo(); ?>
然后激动地打开浏览器,输入本机IP地址,能不能休息就看这下子了
居然乱码了,看来中文支持的包没装,但是调用的Server API FPM/FCGI出现了,就够了,老子去睡觉了