linux+httpd+php模块+mysql

rpm包的安装方式



环境:

系统: CentOS Linux release 7.1.1503 (Core)

yum源:epel,cdrom

主机:

httpd+php
172.16.40.30
mysql
172.16.40.31

目的:

1、两台主机实现httpd+php和mysql服务。
2、httpd提供两个虚拟主机,一个虚拟主机提供phpMyAdmin,另一个虚拟主机提供wordpress。
3、为php安装xcache。
4、为phpMyAdmin提供https;


目录:

一、httpd

二、php

三、mysql

四、安装phpMyadmin和wordpress

五、为phpMyadmin虚拟主机启用ssl。(包括建立私有CA)


我这里的selinux和iptables都在开启状态,为了简单我这里把它们都关闭了。

selinux:

[root@localhost~]#getenforce#查看selinux状态。Enforcing[root@localhost~]#setenforce0#设置selinux不阻止进程,只记录。当前环境生效,重启失效。[root@localhost~]#vim/etc/selinux/config#修改配置文件,重启生效。SELINUX=disabled

iptables:

[root@localhost~]#systemctlstopfirewalld#关闭防火墙[root@localhost~]#systemctldisablefirewalld#开机不自动启动。rm'/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'rm'/etc/systemd/system/basic.target.wants/firewalld.service'


注意:在mysql上面127.0.0.1与localhost是不同的。127.0.0.1会用网络套接字来通信。而localhost用的才是unix_sock,本地文件。如果要用localhost通信,有可能要在/etc/php.ini中为3个连接器指定mysql的sock文件所在位置。

mysql.default_socket=pdo_mysql.default_socket=mysql.default_socket=

一、httpd

1、安装:

[root@localhost~]#yuminstallhttpd-y

[root@localhost~]#rpm-qlhttpd/etc/httpd/etc/httpd/conf/etc/httpd/conf.d/etc/httpd/conf.d/README/etc/httpd/conf.d/autoindex.conf/etc/httpd/conf.d/userdir.conf/etc/httpd/conf.d/welcome.conf/etc/httpd/conf.modules.d/etc/httpd/conf.modules.d/00-base.conf#加载模块/etc/httpd/conf.modules.d/00-dav.conf/etc/httpd/conf.modules.d/00-lua.conf/etc/httpd/conf.modules.d/00-mpm.conf#用以修改所使用的mpm。/etc/httpd/conf.modules.d/00-proxy.conf#代理相关/etc/httpd/conf.modules.d/00-systemd.conf/etc/httpd/conf.modules.d/01-cgi.conf/etc/httpd/conf/httpd.conf#主配置文件.....[root@localhost~]#systemctlstarthttpd[root@localhost~]#ss-tnlStateRecv-QSend-QLocalAddress:PortPeerAddress:PortLISTEN0128*:22*:*LISTEN0100127.0.0.1:25*:*LISTEN0128:::80:::*LISTEN0128:::22:::*LISTEN0100::1:25:::*[root@localhost~]#

80端口启动了。可以尝试一下打开网页了。

工作正常。


主配置文件中的一些指令可以到官网查看,有专门介绍指令的,如我这里2.4版本的:

http://httpd.apache.org/docs/2.4/mod/directives.html

直接ctrl+f搜索。



2、虚拟主机:

首先把/etc/httpd/conf/httpd.conf配置文件中的DocumentRoot关闭。

#DocumentRoot"/var/www/html"#中心主机的网页目录,虚拟主机里面也要指定。

添加一个虚拟主机的配置文件:

[root@localhosthttpd]#vimconf.d/vhosts.conf#当前目录:/etc/httpd<VirtualHost*:80>ServerNamewww.star.comDocumentRoot/web/wwwCustomLog"/var/log/httpd/www/access_log"combinedErrorLog"/var/log/httpd/www/error_log"<Directory"/web/www">OptionsNoneRequireallgranted</Directory></VirtualHost><VirtualHost*:80>ServerNamemyadm.star.comDocumentRoot/web/myadmCustomLog"/var/log/httpd/myadm/access_log"combinedErrorLog"/var/log/httpd/myadm/error_log"<Directory"web/myadm">OptionsNoneRequireallgranted</Directory></VirtualHost>

创建所需目录:

[root@localhosthttpd]#mkdir-pv/web/{www,myadm}-pvmkdir:createddirectory‘/web’mkdir:createddirectory‘/web/www’mkdir:createddirectory‘/web/myadm’[root@localhosthttpd]#mkdir-pv/var/log/httpd/{www,myadm}mkdir:createddirectory‘/var/log/httpd/www’mkdir:createddirectory‘/var/log/httpd/myadm’[root@localhosthttpd]#

给两个虚拟主机分别来个网页测试一下。

[root@localhosthttpd]#vim/web/www/index.html<h2>www.star.com</h2>[root@localhosthttpd]#vim/web/myadm/index.html<h2>myadm.star.com</h2>


测试一下:

[root@localhosthttpd]#httpd-tAH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,usinglocalhost.localdomain.Setthe'ServerName'directivegloballytosuppressthismessageSyntaxOK[root@localhosthttpd]#

这个错误是因为在主配置文件中的serverName没有配置,httpd会反解本机的IP地址,得出的结果如果与本机的主机名不适合,或者是根本就不能反解, 就会报这个错误。 可以在主配置文件中指定serverName或在/etc/hosts中给个ip和本机主机名的条目。我这里就在主配置文件中指定了,名称任意。我们用的是虚拟主机,而虚拟主机里面也已经指定serverName了。

下面我们所说的主机名都是表示FQDN而不是系统上的主机名。

ServerNamewww.star.com

[root@localhosthttpd]#httpd-tSyntaxOK[root@localhosthttpd]#[root@localhosthttpd]#systemctlreloadhttpd

还差一步,我们是用主机名来区分不同的虚拟主机的,如果用IP登录只会解析到第一个虚拟主机上面。

所以在测试机的hosts的文件中加上IP与主机名的条目。linux系统在/etc/下面。 windows系统在C:\Windows\System32\drivers\etc下面。C表示系统盘。

windows上面如果不能保存,很可能是因为权限的问题, 在hosts属性里面的安全里面设置用户和权限。


我这里可以了,网页测试一下:


二、php

注意:在mysql上面127.0.0.1与localhost是不同的。127.0.0.1会用网络套接字来通信。而localhost用的才是unix_sock,本地文件。如果要用localhost通信,要在/etc/php.ini中为3个连接器指定mysql的sock文件所在位置。

mysql.default_socket=pdo_mysql.default_socket=mysqli.default_socket=


1、安装:

[root@localhost~]#yuminstallphpphp-mysql-y

php-mysql是php连接mysql的连接器(驱动)。

[root@localhost~]#rpm-qlphp-mysql/etc/php.d/mysql.ini/etc/php.d/mysqli.ini/etc/php.d/pdo_mysql.ini/usr/lib64/php/modules/mysql.so/usr/lib64/php/modules/mysqli.so/usr/lib64/php/modules/pdo_mysql.so

mysql mysqli pdo_mysql 是三种不同的连接器。 在以后编译php的时候要选择这三个的。

连接器介绍:http://php.net/manual/zh/mysqli.overview.php#mysqli.overview.mysqlnd


[root@localhost~]#rpm-qlphp/etc/httpd/conf.d/php.conf#关于php的设置/etc/httpd/conf.modules.d/10-php.conf#httpd加载php模块/usr/lib64/httpd/modules/libphp5.so#php模块/usr/share/httpd/icons/php.gif/var/lib/php/session#存储session会话文件的目录[root@localhost~]#


2、测试:

rpm安装的php不用怎么配置

注意:rpm安装的php只支持prefork模型的httpd。如果要用work或event这种线程模型就要自己编译php了。

分别给两个虚拟主机测试文件。

[root@localhost~]#vim/web/www/index.php<h2>www.star.com</h2><?phpphpinfo();?>

[root@localhost~]#vim/web/myadm/index.php<h2>myadm.star.com</h2><?phpphpinfo();?>

测试:

[root@localhost~]#httpd-tSyntaxOK[root@localhost~]#systemctlrestarthttpd


现在在不指定主页的情况下还是优先找的index.html。可以在主配置文件中配置一下:

<IfModuledir_module>DirectoryIndexindex.phpindex.html</IfModule>

在index.html前面加上index.php


3、xcache

xcache epel源中的rpm包可能有问题, 性能不升反降。不知道是什么问题。
要编译安装xcache。


安装xcache:

要先安装php-devel。 然后在xcache目录里面执行phpize,

php-config和phpize是php的配置接口,添加第三方的模块。

[root@localhostxcache-3.2.0]#yuminstallphp-devel-y[root@localhostxcache-3.2.0]#phpize

编译很简单就两个选项,一个是启用xcache的扩功能, 一个是php-config,要指定php-config的位置。

[root@localhostxcache-3.2.0]#./configure--enable-xcache--with-php-config=/usr/bin/php-config[root@localhostxcache-3.2.0]#make[root@localhostxcache-3.2.0]#makeinstall[root@localhostxcache-3.2.0]#cpxcache.ini/etc/php.d/

安装完xcache的时候为提示xcache模块所在路径:

Installingsharedextensions:/usr/lib64/php/modules/

如果php不能找到xcache模块,需要手动添加到xcache.ini文件中。
把安装xcache完成以后显示的那个路径写在extension指令后面,不过要指定xcache.so
如:extension = /usr/lib64/php/modules/xcache.so

[root@localhostxcache-3.2.0]#httpd-tSyntaxOK[root@localhostconf.d]#systemctlreloadhttpd

网页测试一下:

这个info页面,在用ab测试的时候,不用xcache是600/sec。而用了以后反而变成了300/sec。 一会儿再试试phpMyadmin的页面看看。



三、mysql

1、安装:

[root@localhost~]#yuminstallmariadb-server-y[root@localhost~]#systemctlstartmariadb

进入mysql添加wordpress要用到的库和用户。

MariaDB[(none)]>CREATEDATABASEwordpress;QueryOK,1rowaffected(0.00sec)MariaDB[(none)]>GRANTALLONwordpress.*TO'wpuser'@'172.16.40.30'IDENTIFIEDBY'abcdefg';QueryOK,0rowsaffected(0.00sec)

给root用户添加密码,不然在phpMyadmin中不能登录:

MariaDB[(none)]>UPDATEmysql.userSETpassword=PASSWORD('testpasswd')WHEREuser='root';QueryOK,4rowsaffected(0.00sec)Rowsmatched:4Changed:4Warnings:0MariaDB[(none)]>FLUSHPRIVILEGES;QueryOK,0rowsaffected(0.00sec)


四、安装phpMyadmin和wordpress

https://files.phpmyadmin.net/phpMyAdmin/4.4.15.2/phpMyAdmin-4.4.15.2-all-languages.tar.xz

最新的4.5.3只有php5.5或以上版本才可以用。rpm安装的php版本是5.4.16.


https://cn.wordpress.org/wordpress-4.4.1-zh_CN.zip

删除/web/www和/web/myadmin里面的文件

分别把phpMyadmin和wordpress里面的文件放到/web/www和/web/myadmin里面。

我这里把wordpress放到了www里面。这是在/web/目录下面操作的。

[root@localhostweb]#rmwww/*-rf[root@localhostweb]#mvwordpress/*www/[root@localhostweb]#rmmyadm/*-rf[root@localhostweb]#mvphpMyAdmin-4.4.15.2-all-languages/*myadm/

先来设置一下phpMyadmin。

[root@localhostweb]#cdmyadm[root@localhostmyadm]#cpconfig.sample.inc.phpconfig.inc.php[root@localhostmyadm]#opensslrand-base6415eqt6V09NTIq4K8aILMz0[root@localhostmyadm]#vimconfig.inc.php

把生成的随机码放到里面。

上面这个地址把原来的localhost改成mysql数据库所在位置。


网页访问一下试试:

安装mbsting,多字符处理库。如果没有这个,phpMyAdmin不能支持汉字。

[root@localhostmyadm]#yuminstallphp-mbstring-y[root@localhostmyadm]#systemctlreloadhttpd

然后就可以用root登录了。


如果跟我这一样总是提示无法登录,可以重新复制一下config.sample.inc.php文件试试。

ab测试一下看看。把/etc/php.d/xcache.ini文件移走。要reload啊。

我这是笔记本,速度太慢了。

Requestspersecond:25.91[#/sec](mean)

再把文件放回去。

[root@localhostyum.repos.d]#ab-n1000-c100http://myadm.star.com/index.php.....Requestspersecond:125.05[#/sec](mean).....ConnectionTimes(ms)minmean[+/-sd]medianmaxConnect:023.9116Processing:49769170.47831483Waiting:23725158.27501288Total:51771167.87831484Percentageoftherequestsservedwithinacertaintime(ms)50%78366%81575%83880%85290%91695%99998%109399%1173100%1484(longestrequest)


安装wordpress:

进入www的目录。

[root@localhostwww]#cpwp-config-sample.phpwp-config.php[root@localhostwww]#vimwp-config.php


测试:

我这里访问http://www.star.com/





五、给myadm虚拟主机提供https。

首先要建立私有CA。

我这里就用httpd这台主机来做CA了。这个CA是静态的,由openssl软件提供,不是服务程序,所以不会占用什么资源。

CA工作目录,是在/etc/pki/tls/openssl.cnf文件中设置的。默认是在/etc/pki/CA

/etc/pki/tls/openssl.cnf中关于CA的设置。

创建ca私钥。

[root@localhostCA]#pwd/etc/pki/CA[root@localhostCA]#(umask077;opensslgenrsa-outprivate/cakey.pem4096)GeneratingRSAprivatekey,4096bitlongmodulus............................++.........++eis65537(0x10001)[root@localhostCA]#llprivate/total4-rw-------.1rootroot3243Jan2003:19cakey.pem

CA自签证书:

[root@localhostCA]#opensslreq-new-x509-keyprivate/cakey.pem-outcacert.pem.....CountryName(2lettercode)[XX]:CNStateorProvinceName(fullname)[]:BEIJINGLocalityName(eg,city)[DefaultCity]:BEIJINGOrganizationName(eg,company)[DefaultCompanyLtd]:LinuxOPSOrganizationalUnitName(eg,section)[]:OpsCommonName(eg,yournameoryourserver'shostname)[]:ca.star.comEmailAddress[]:[root@localhostCA]#

创建所必须的文件:

[root@localhostCA]#touchindex.txt[root@localhostCA]#touchserial[root@localhostCA]#echo00>serial#这个是序列号文件,要指定序列号的起始

CA完成了,也就两步。剩下的就是为httpd创建私钥、生成证书申请然后签署就可以了。

我这里在/etc/httpd/目录下面建立一个ssl目录用以存储私钥和证书。这个目录任意,只要一会儿在httpd配置文件中指定私钥和证书的路径就可以。

[root@localhostCA]#cd/etc/httpd[root@localhosthttpd]#(umask077;opensslgenrsa-outssl/myadm.key2048)GeneratingRSAprivatekey,2048bitlongmodulus.......................................................................................................................+++.................+++eis65537(0x10001)[root@localhosthttpd]#opensslreq-new-keyssl/myadm.key-outssl/myadm.csr.....CountryName(2lettercode)[XX]:CNStateorProvinceName(fullname)[]:BEIJINGLocalityName(eg,city)[DefaultCity]:BEIJINGOrganizationName(eg,company)[DefaultCompanyLtd]:LinuxOPSOrganizationalUnitName(eg,section)[]:OpsCommonName(eg,yournameoryourserver'shostname)[]:myadm.star.com.....

这里的地区要一样,公司好像也要一样,域名可以不一样。

上面生成的是证书申请,现在我们来签署。

[root@localhosthttpd]#opensslca-in/etc/httpd/ssl/myadm.csr-out/etc/httpd/ssl/myadm.crt.....CertificateistobecertifieduntilJan1819:48:152017GMT(365days)Signthecertificate?[y/n]:y1outof1certificaterequestscertified,commit?[y/n]yWriteoutdatabasewith1newentriesDataBaseUpdated[root@localhosthttpd]#

[root@localhosthttpd]#llssltotal16-rw-r--r--.1rootroot5718Jan2003:48myadm.crt-rw-r--r--.1rootroot1009Jan2003:32myadm.csr-rw-------.1rootroot1679Jan2003:31myadm.key[root@localhosthttpd]#

注意:CA与httpd是没有关系的,虽然都使用openssl命令。 如果CA在另一台主机上面,我们也只是要把csr文件发到CA的主机,CA签署完以后再发回来而已。


还有,因为我们是使用的私有CA。客户端的主机上面没有CA的根证书,所以要把CA的自签证书发给客户端。就是/etc/pki/CA/cacert.pem。

一些公有CA不用这样做的原因是因为系统或浏览器已经自带那些CA的根证书了。

既然是私有CA,系统或浏览器上肯定是没有了。这么做的目的,是让浏览器信任由此CA所颁发的证书。

我这里复制到我的主机上面了,windows的系统。


火狐浏览器是在选项--高级--证书--查看证书--证书机构--导入,找到证书文件导入即可。

Chrome浏览器在设置--显示高级设置--管理证书--受信任的根证书颁发机构--导入即可。



设置httpd支持ssl

myadm.csr文件现在没有用了,可以删除。

安装ssl模块。

[root@localhosthttpd]#yuminstallmod_ssl-y[root@localhosthttpd]#rpm-qlmod_ssl/etc/httpd/conf.d/ssl.conf#ssl的设置文件/etc/httpd/conf.modules.d/00-ssl.conf#加载ssl模块的。/usr/lib64/httpd/modules/mod_ssl.so#ssl模块/usr/libexec/httpd-ssl-pass-dialog/var/cache/httpd/ssl[root@localhosthttpd]#


ssl是基于IP地址的,在单IP的主机上面只能用一个ssl的连接。而客户端访问的地址一定要是证书里面显示的主机名。我们在服务器上要做的就是要正确的把这个请求解析到正确的虚拟主机。

https的端口是443。

现在在conf.d/ssl.conf配置文件中除了一般ssl的设置以外,还有一个443端口的虚拟主机。而vhosts文件

中的phpMyadmin虚拟主机要用ssl也要以443端口。所以我这里就把ssl.conf文件中带的虚拟主机给注释了。 并把所需要的指令放到vhosts文件中去。


现在的vhosts配置文件。

LogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"%{SSL_PROTOCOL}x%{SSL_CIPHER}x"custom1#自定义日志格式,加入了显示ssl协议版本和加密协议。<VirtualHost*:80>ServerNamewww.star.comDocumentRoot/web/wwwCustomLog"/var/log/httpd/www/access_log"combinedErrorLog"/var/log/httpd/www/error_log"<Directory"/web/www">OptionsNoneRequireallgranted</Directory></VirtualHost><VirtualHost*:443>ServerNamemyadm.star.comDocumentRoot/web/myadmCustomLog"/var/log/httpd/myadm/access_log"custom1#使用新定义的日志格式ErrorLog"/var/log/httpd/myadm/error_log"SSLEngineon#启用ssl引擎SSLProtocolall-SSLv2#使用所有ssl协议版本,除了SSLV2版本。SSLCipherSuiteHIGH:MEDIUM:!aNULL:!MD5#这个也可以不加,我直接复制过来了。SSLCertificateFile/etc/httpd/ssl/myadm.crt#证书路径SSLCertificateKeyFile/etc/httpd/ssl/myadm.key#私钥路径<Directory"web/myadm">OptionsNoneRequireallgranted</Directory></VirtualHost>



虚拟主机如果非要有优先级的话:IP>端口>FQDN。

所以这里有个有意思的地方,访问https://www.star.com/会怎么样。443端口,会优先使用端口的虚拟主机,所以会访问phpMyadmin的虚拟主机。但是访问名称与证书中的主机名不同。所以:



而www.star.com是没有问题的。



完成。 谢谢浏览。