linux+httpd+php模塊+mysqlphp
rpm包的安裝方式html
環境:mysql
系統: CentOS Linux release 7.1.1503 (Core)linux
yum源:epel,cdromweb
主機:sql
httpd+php |
172.16.40.30 |
mysql |
172.16.40.31 |
目的:
數據庫
一、兩臺主機實現httpd+php和mysql服務。
二、httpd提供兩個虛擬主機,一個虛擬主機提供phpMyAdmin,另外一個虛擬主機提供wordpress。
三、爲php安裝xcache。
四、爲phpMyAdmin提供https;apache
目錄:vim
1、httpd
windows
2、php
3、mysql
4、安裝phpMyadmin和wordpress
5、爲phpMyadmin虛擬主機啓用ssl。(包括創建私有CA)
我這裏的selinux和iptables都在開啓狀態,爲了簡單我這裏把它們都關閉了。
selinux:
[root@localhost ~]# getenforce #查看selinux狀態。 Enforcing [root@localhost ~]# setenforce 0 #設置selinux不阻止進程,只記錄。當前環境生效,重啓失效。 [root@localhost ~]# vim /etc/selinux/config #修改配置文件, 重啓生效。 SELINUX=disabled
iptables:
[root@localhost ~]# systemctl stop firewalld #關閉防火牆 [root@localhost ~]# systemctl disable firewalld #開機不自動啓動。 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 =
1、httpd
一、安裝:
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# rpm -ql httpd /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 ~]# systemctl start httpd [root@localhost ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@localhost ~]#
80端口啓動了。能夠嘗試一下打開網頁了。
工做正常。
主配置文件中的一些指令能夠到官網查看,有專門介紹指令的,如我這裏2.4版本的:
http://httpd.apache.org/docs/2.4/mod/directives.html
直接ctrl+f搜索。
二、虛擬主機:
首先把/etc/httpd/conf/httpd.conf配置文件中的DocumentRoot關閉。
#DocumentRoot "/var/www/html" #中心主機的網頁目錄,虛擬主機裏面也要指定。
添加一個虛擬主機的配置文件:
[root@localhost httpd]# vim conf.d/vhosts.conf #當前目錄:/etc/httpd <VirtualHost *:80> ServerName www.star.com DocumentRoot /web/www CustomLog "/var/log/httpd/www/access_log" combined ErrorLog "/var/log/httpd/www/error_log" <Directory "/web/www"> Options None Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerName myadm.star.com DocumentRoot /web/myadm CustomLog "/var/log/httpd/myadm/access_log" combined ErrorLog "/var/log/httpd/myadm/error_log" <Directory "web/myadm"> Options None Require all granted </Directory> </VirtualHost>
建立所需目錄:
[root@localhost httpd]# mkdir -pv /web/{www,myadm} -pv mkdir: created directory ‘/web’ mkdir: created directory ‘/web/www’ mkdir: created directory ‘/web/myadm’ [root@localhost httpd]# mkdir -pv /var/log/httpd/{www,myadm} mkdir: created directory ‘/var/log/httpd/www’ mkdir: created directory ‘/var/log/httpd/myadm’ [root@localhost httpd]#
給兩個虛擬主機分別來個網頁測試一下。
[root@localhost httpd]# vim /web/www/index.html <h1>www.star.com</h1> [root@localhost httpd]# vim /web/myadm/index.html <h1>myadm.star.com</h1>
測試一下:
[root@localhost httpd]# httpd -t AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message Syntax OK [root@localhost httpd]#
這個錯誤是由於在主配置文件中的serverName沒有配置,httpd會反解本機的IP地址,得出的結果若是與本機的主機名不適合,或者是根本就不能反解, 就會報這個錯誤。 能夠在主配置文件中指定serverName或在/etc/hosts中給個ip和本機主機名的條目。我這裏就在主配置文件中指定了,名稱任意。咱們用的是虛擬主機,而虛擬主機裏面也已經指定serverName了。
下面咱們所說的主機名都是表示FQDN而不是系統上的主機名。
ServerName www.star.com
[root@localhost httpd]# httpd -t Syntax OK [root@localhost httpd]# [root@localhost httpd]# systemctl reload httpd
還差一步,咱們是用主機名來區分不一樣的虛擬主機的,若是用IP登陸只會解析到第一個虛擬主機上面。
因此在測試機的hosts的文件中加上IP與主機名的條目。linux系統在/etc/下面。 windows系統在C:\Windows\System32\drivers\etc下面。C表示系統盤。
windows上面若是不能保存,極可能是由於權限的問題, 在hosts屬性裏面的安全裏面設置用戶和權限。
我這裏能夠了,網頁測試一下:
2、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 =
一、安裝:
[root@localhost ~]# yum install php php-mysql -y
php-mysql是php鏈接mysql的鏈接器(驅動)。
[root@localhost ~]# rpm -ql php-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 -ql php /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 ~]#
二、測試:
rpm安裝的php不用怎麼配置
注意:rpm安裝的php只支持prefork模型的httpd。若是要用work或event這種線程模型就要本身編譯php了。
分別給兩個虛擬主機測試文件。
[root@localhost ~]# vim /web/www/index.php <h1>www.star.com</h1> <?php phpinfo(); ?>
[root@localhost ~]# vim /web/myadm/index.php <h1>myadm.star.com</h1> <?php phpinfo(); ?>
測試:
[root@localhost ~]# httpd -t Syntax OK [root@localhost ~]# systemctl restart httpd
如今在不指定主頁的狀況下仍是優先找的index.html。能夠在主配置文件中配置一下:
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
在index.html前面加上index.php
三、xcache
xcache epel源中的rpm包可能有問題, 性能不升反降。不知道是什麼問題。
要編譯安裝xcache。
安裝xcache:
要先安裝php-devel。 而後在xcache目錄裏面執行phpize,
php-config和phpize是php的配置接口,添加第三方的模塊。
[root@localhost xcache-3.2.0]# yum install php-devel -y [root@localhost xcache-3.2.0]# phpize
編譯很簡單就兩個選項,一個是啓用xcache的擴功能, 一個是php-config,要指定php-config的位置。
[root@localhost xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/bin/php-config [root@localhost xcache-3.2.0]# make [root@localhost xcache-3.2.0]# make install [root@localhost xcache-3.2.0]# cp xcache.ini /etc/php.d/
安裝完xcache的時候爲提示xcache模塊所在路徑:
Installing shared extensions: /usr/lib64/php/modules/
若是php不能找到xcache模塊,須要手動添加到xcache.ini文件中。
把安裝xcache完成之後顯示的那個路徑寫在extension指令後面,不過要指定xcache.so
如:extension = /usr/lib64/php/modules/xcache.so
[root@localhost xcache-3.2.0]# httpd -t Syntax OK [root@localhost conf.d]# systemctl reload httpd
網頁測試一下:
這個info頁面,在用ab測試的時候,不用xcache是600/sec。而用了之後反而變成了300/sec。 一下子再試試phpMyadmin的頁面看看。
3、mysql
一、安裝:
[root@localhost ~]# yum install mariadb-server -y [root@localhost ~]# systemctl start mariadb
進入mysql添加wordpress要用到的庫和用戶。
MariaDB [(none)]> CREATE DATABASE wordpress; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON wordpress.* TO 'wpuser'@'172.16.40.30' IDENTIFIED BY 'abcdefg'; Query OK, 0 rows affected (0.00 sec)
給root用戶添加密碼,否則在phpMyadmin中不能登陸:
MariaDB [(none)]> UPDATE mysql.user SET password=PASSWORD('testpasswd') WHERE user='root'; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0 MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
4、安裝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@localhost web]# rm www/* -rf [root@localhost web]# mv wordpress/* www/ [root@localhost web]# rm myadm/* -rf [root@localhost web]# mv phpMyAdmin-4.4.15.2-all-languages/* myadm/
先來設置一下phpMyadmin。
[root@localhost web]# cd myadm [root@localhost myadm]# cp config.sample.inc.php config.inc.php [root@localhost myadm]# openssl rand -base64 15 eqt6V09NTIq4K8aILMz0 [root@localhost myadm]# vim config.inc.php
把生成的隨機碼放到裏面。
上面這個地址把原來的localhost改爲mysql數據庫所在位置。
網頁訪問一下試試:
安裝mbsting,多字符處理庫。若是沒有這個,phpMyAdmin不能支持漢字。
[root@localhost myadm]# yum install php-mbstring -y [root@localhost myadm]# systemctl reload httpd
而後就能夠用root登陸了。
若是跟我這同樣老是提示沒法登陸,能夠從新複製一下config.sample.inc.php文件試試。
ab測試一下看看。把/etc/php.d/xcache.ini文件移走。要reload啊。
我這是筆記本,速度太慢了。
Requests per second: 25.91 [#/sec] (mean)
再把文件放回去。
[root@localhost yum.repos.d]# ab -n 1000 -c 100 http://myadm.star.com/index.php ..... Requests per second: 125.05 [#/sec] (mean) ..... Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 3.9 1 16 Processing: 49 769 170.4 783 1483 Waiting: 23 725 158.2 750 1288 Total: 51 771 167.8 783 1484 Percentage of the requests served within a certain time (ms) 50% 783 66% 815 75% 838 80% 852 90% 916 95% 999 98% 1093 99% 1173 100% 1484 (longest request)
安裝wordpress:
進入www的目錄。
[root@localhost www]# cp wp-config-sample.php wp-config.php [root@localhost www]# vim wp-config.php
測試:
我這裏訪問http://www.star.com/
5、給myadm虛擬主機提供https。
首先要創建私有CA。
我這裏就用httpd這臺主機來作CA了。這個CA是靜態的,由openssl軟件提供,不是服務程序,因此不會佔用什麼資源。
CA工做目錄,是在/etc/pki/tls/openssl.cnf文件中設置的。默認是在/etc/pki/CA
/etc/pki/tls/openssl.cnf中關於CA的設置。
建立ca私鑰。
[root@localhost CA]# pwd /etc/pki/CA [root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 4096) Generating RSA private key, 4096 bit long modulus ............................++ .........++ e is 65537 (0x10001) [root@localhost CA]# ll private/ total 4 -rw-------. 1 root root 3243 Jan 20 03:19 cakey.pem
CA自簽證書:
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem ..... Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BEIJING Locality Name (eg, city) [Default City]:BEIJING Organization Name (eg, company) [Default Company Ltd]:LinuxOPS Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:ca.star.com Email Address []: [root@localhost CA]#
建立所必須的文件:
[root@localhost CA]# touch index.txt [root@localhost CA]# touch serial [root@localhost CA]# echo 00 > serial #這個是序列號文件,要指定序列號的起始
CA完成了,也就兩步。剩下的就是爲httpd建立私鑰、生成證書申請而後簽署就能夠了。
我這裏在/etc/httpd/目錄下面創建一個ssl目錄用以存儲私鑰和證書。這個目錄任意,只要一下子在httpd配置文件中指定私鑰和證書的路徑就能夠。
[root@localhost CA]# cd /etc/httpd [root@localhost httpd]# (umask 077;openssl genrsa -out ssl/myadm.key 2048) Generating RSA private key, 2048 bit long modulus .......................................................................................................................+++ .................+++ e is 65537 (0x10001) [root@localhost httpd]# openssl req -new -key ssl/myadm.key -out ssl/myadm.csr ..... Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BEIJING Locality Name (eg, city) [Default City]:BEIJING Organization Name (eg, company) [Default Company Ltd]:LinuxOPS Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:myadm.star.com .....
這裏的地區要同樣,公司好像也要同樣,域名能夠不同。
上面生成的是證書申請,如今咱們來簽署。
[root@localhost httpd]# openssl ca -in /etc/httpd/ssl/myadm.csr -out /etc/httpd/ssl/myadm.crt ..... Certificate is to be certified until Jan 18 19:48:15 2017 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [root@localhost httpd]#
[root@localhost httpd]# ll ssl total 16 -rw-r--r--. 1 root root 5718 Jan 20 03:48 myadm.crt -rw-r--r--. 1 root root 1009 Jan 20 03:32 myadm.csr -rw-------. 1 root root 1679 Jan 20 03:31 myadm.key [root@localhost httpd]#
注意: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@localhost httpd]# yum install mod_ssl -y [root@localhost httpd]# rpm -ql mod_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@localhost httpd]#
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> ServerName www.star.com DocumentRoot /web/www CustomLog "/var/log/httpd/www/access_log" combined ErrorLog "/var/log/httpd/www/error_log" <Directory "/web/www"> Options None Require all granted </Directory> </VirtualHost> <VirtualHost *:443> ServerName myadm.star.com DocumentRoot /web/myadm CustomLog "/var/log/httpd/myadm/access_log" custom1 #使用新定義的日誌格式 ErrorLog "/var/log/httpd/myadm/error_log" SSLEngine on #啓用ssl引擎 SSLProtocol all -SSLv2 #使用全部ssl協議版本,除了SSLV2版本。 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 #這個也能夠不加,我直接複製過來了。 SSLCertificateFile /etc/httpd/ssl/myadm.crt #證書路徑 SSLCertificateKeyFile /etc/httpd/ssl/myadm.key #私鑰路徑 <Directory "web/myadm"> Options None Require all granted </Directory> </VirtualHost>
虛擬主機若是非要有優先級的話:IP>端口>FQDN。
因此這裏有個有意思的地方,訪問https://www.star.com/會怎麼樣。443端口,會優先使用端口的虛擬主機,因此會訪問phpMyadmin的虛擬主機。可是訪問名稱與證書中的主機名不一樣。因此:
而www.star.com是沒有問題的。