您好,登錄后才能下訂單哦!
linux+httpd+php模塊+mysql
rpm包的安裝方式
環(huán)境:
系統(tǒng): CentOS Linux release 7.1.1503 (Core)
yum源:epel,cdrom
主機(jī):
httpd+php | 172.16.40.30 |
mysql | 172.16.40.31 |
目的:
1、兩臺主機(jī)實(shí)現(xiàn)httpd+php和mysql服務(wù)。
2、httpd提供兩個(gè)虛擬主機(jī),一個(gè)虛擬主機(jī)提供phpMyAdmin,另一個(gè)虛擬主機(jī)提供wordpress。
3、為php安裝xcache。
4、為phpMyAdmin提供https;
目錄:
一、httpd
二、php
三、mysql
四、安裝phpMyadmin和wordpress
五、為phpMyadmin虛擬主機(jī)啟用ssl。(包括建立私有CA)
我這里的selinux和iptables都在開啟狀態(tài),為了簡單我這里把它們都關(guān)閉了。
selinux:
[root@localhost ~]# getenforce #查看selinux狀態(tài)。 Enforcing [root@localhost ~]# setenforce 0 #設(shè)置selinux不阻止進(jìn)程,只記錄。當(dāng)前環(huán)境生效,重啟失效。 [root@localhost ~]# vim /etc/selinux/config #修改配置文件, 重啟生效。 SELINUX=disabled
iptables:
[root@localhost ~]# systemctl stop firewalld #關(guān)閉防火墻 [root@localhost ~]# systemctl disable firewalld #開機(jī)不自動啟動。 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會用網(wǎng)絡(luò)套接字來通信。而
localhost用的才是unix_sock,本地文件。如果要用localhost通信,有可能要在/etc/php.ini中為3個(gè)連接器指定mysql
的sock文件所在位置。
mysql.default_socket = pdo_mysql.default_socket= mysql.default_socket =
一、httpd
1、安裝:
[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 #代理相關(guān) /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端口啟動了。可以嘗試一下打開網(wǎng)頁了。
工作正常。
主配置文件中的一些指令可以到官網(wǎng)查看,有專門介紹指令的,如我這里2.4版本的:
http://httpd.apache.org/docs/2.4/mod/directives.html
直接ctrl+f搜索。
2、虛擬主機(jī):
首先把/etc/httpd/conf/httpd.conf配置文件中的DocumentRoot關(guān)閉。
#DocumentRoot "/var/www/html" #中心主機(jī)的網(wǎng)頁目錄,虛擬主機(jī)里面也要指定。
添加一個(gè)虛擬主機(jī)的配置文件:
[root@localhost httpd]# vim conf.d/vhosts.conf #當(dāng)前目錄:/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>
創(chuàng)建所需目錄:
[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]#
給兩個(gè)虛擬主機(jī)分別來個(gè)網(wǎng)頁測試一下。
[root@localhost httpd]# vim /web/www/index.html <h2>www.star.com</h2> [root@localhost httpd]# vim /web/myadm/index.html <h2>myadm.star.com</h2>
測試一下:
[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]#
這個(gè)錯(cuò)誤是因?yàn)樵谥髋渲梦募械膕erverName沒有配置,httpd會反解本機(jī)的IP地址,得出的結(jié)果如果與本機(jī)的主機(jī)名不適合,或者是根本就不能反解, 就會報(bào)這個(gè)錯(cuò)誤。 可以在主配置文件中指定serverName或在/etc/hosts中給個(gè)ip和本機(jī)主機(jī)名的條目。我這里就在主配置文件中指定了,名稱任意。我們用的是虛擬主機(jī),而虛擬主機(jī)里面也已經(jīng)指定serverName了。
下面我們所說的主機(jī)名都是表示FQDN而不是系統(tǒng)上的主機(jī)名。
ServerName www.star.com
[root@localhost httpd]# httpd -t Syntax OK [root@localhost httpd]# [root@localhost httpd]# systemctl reload httpd
還差一步,我們是用主機(jī)名來區(qū)分不同的虛擬主機(jī)的,如果用IP登錄只會解析到第一個(gè)虛擬主機(jī)上面。
所以在測試機(jī)的hosts的文件中加上IP與主機(jī)名的條目。linux系統(tǒng)在/etc/下面。 windows系統(tǒng)在C:\Windows\System32\drivers\etc下面。C表示系統(tǒng)盤。
windows上面如果不能保存,很可能是因?yàn)闄?quán)限的問題, 在hosts屬性里面的安全里面設(shè)置用戶和權(quán)限。
我這里可以了,網(wǎng)頁測試一下:
二、php
注意:在mysql上面127.0.0.1與localhost是不同的。127.0.0.1會用網(wǎng)絡(luò)套接字來通信。而localhost用的才是
unix_sock,本地文件。如果要用localhost通信,要在/etc/php.ini中為3個(gè)連接器指定mysql的sock文件所在位置。
mysql.default_socket = pdo_mysql.default_socket= mysqli.default_socket =
1、安裝:
[root@localhost ~]# yum install php php-mysql -y
php-mysql是php連接mysql的連接器(驅(qū)動)。
[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的時(shí)候要選擇這三個(gè)的。
連接器介紹:http://php.net/manual/zh/mysqli.overview.php#mysqli.overview.mysqlnd
[root@localhost ~]# rpm -ql php /etc/httpd/conf.d/php.conf #關(guān)于php的設(shè)置 /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了。
分別給兩個(gè)虛擬主機(jī)測試文件。
[root@localhost ~]# vim /web/www/index.php <h2>www.star.com</h2> <?php phpinfo(); ?>
[root@localhost ~]# vim /web/myadm/index.php <h2>myadm.star.com</h2> <?php phpinfo(); ?>
測試:
[root@localhost ~]# httpd -t Syntax OK [root@localhost ~]# systemctl restart httpd
現(xiàn)在在不指定主頁的情況下還是優(yōu)先找的index.html??梢栽谥髋渲梦募信渲靡幌拢?/p>
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
在index.html前面加上index.php
3、xcache
xcache epel源中的rpm包可能有問題, 性能不升反降。不知道是什么問題。
要編譯安裝xcache。
安裝xcache:
要先安裝php-devel。 然后在xcache目錄里面執(zhí)行phpize,
php-config和phpize是php的配置接口,添加第三方的模塊。
[root@localhost xcache-3.2.0]# yum install php-devel -y [root@localhost xcache-3.2.0]# phpize
編譯很簡單就兩個(gè)選項(xiàng),一個(gè)是啟用xcache的擴(kuò)功能, 一個(gè)是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的時(shí)候?yàn)樘崾緓cache模塊所在路徑:
Installing shared extensions: /usr/lib64/php/modules/
如果php不能找到xcache模塊,需要手動添加到xcache.ini文件中。
把安裝xcache完成以后顯示的那個(gè)路徑寫在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
網(wǎng)頁測試一下:
這個(gè)info頁面,在用ab測試的時(shí)候,不用xcache是600/sec。而用了以后反而變成了300/sec。 一會兒再試試phpMyadmin的頁面看看。
三、mysql
1、安裝:
[root@localhost ~]# yum install mariadb-server -y [root@localhost ~]# systemctl start mariadb
進(jìn)入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)
四、安裝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/
先來設(shè)置一下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
把生成的隨機(jī)碼放到里面。
上面這個(gè)地址把原來的localhost改成mysql數(shù)據(jù)庫所在位置。
網(wǎng)頁訪問一下試試:
安裝mbsting,多字符處理庫。如果沒有這個(gè),phpMyAdmin不能支持漢字。
[root@localhost myadm]# yum install php-mbstring -y [root@localhost myadm]# systemctl reload httpd
然后就可以用root登錄了。
如果跟我這一樣總是提示無法登錄,可以重新復(fù)制一下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:
進(jìn)入www的目錄。
[root@localhost www]# cp wp-config-sample.php wp-config.php [root@localhost www]# vim wp-config.php
測試:
我這里訪問http://www.star.com/
五、給myadm虛擬主機(jī)提供https。
首先要建立私有CA。
我這里就用httpd這臺主機(jī)來做CA了。這個(gè)CA是靜態(tài)的,由openssl軟件提供,不是服務(wù)程序,所以不會占用什么資源。
CA工作目錄,是在/etc/pki/tls/openssl.cnf文件中設(shè)置的。默認(rèn)是在/etc/pki/CA
/etc/pki/tls/openssl.cnf中關(guān)于CA的設(shè)置。
創(chuàng)建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]#
創(chuàng)建所必須的文件:
[root@localhost CA]# touch index.txt [root@localhost CA]# touch serial [root@localhost CA]# echo 00 > serial #這個(gè)是序列號文件,要指定序列號的起始
CA完成了,也就兩步。剩下的就是為httpd創(chuàng)建私鑰、生成證書申請然后簽署就可以了。
我這里在/etc/httpd/目錄下面建立一個(gè)ssl目錄用以存儲私鑰和證書。這個(gè)目錄任意,只要一會兒在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 .....
這里的地區(qū)要一樣,公司好像也要一樣,域名可以不一樣。
上面生成的是證書申請,現(xiàn)在我們來簽署。
[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是沒有關(guān)系的,雖然都使用openssl命令。 如果CA在另一臺主機(jī)上面,我們也只是要把csr文件發(fā)到CA的主機(jī),CA簽署完以后再發(fā)回來而已。
還有,因?yàn)槲覀兪鞘褂玫乃接蠧A。客戶端的主機(jī)上面沒有CA的根證書,所以要把CA的自簽證書發(fā)給客戶端。就是/etc/pki/CA/cacert.pem。
一些公有CA不用這樣做的原因是因?yàn)橄到y(tǒng)或?yàn)g覽器已經(jīng)自帶那些CA的根證書了。
既然是私有CA,系統(tǒng)或?yàn)g覽器上肯定是沒有了。這么做的目的,是讓瀏覽器信任由此CA所頒發(fā)的證書。
我這里復(fù)制到我的主機(jī)上面了,windows的系統(tǒng)。
火狐瀏覽器是在選項(xiàng)--高級--證書--查看證書--證書機(jī)構(gòu)--導(dǎo)入,找到證書文件導(dǎo)入即可。
Chrome瀏覽器在設(shè)置--顯示高級設(shè)置--管理證書--受信任的根證書頒發(fā)機(jī)構(gòu)--導(dǎo)入即可。
設(shè)置httpd支持ssl
myadm.csr文件現(xiàn)在沒有用了,可以刪除。
安裝ssl模塊。
[root@localhost httpd]# yum install mod_ssl -y [root@localhost httpd]# rpm -ql mod_ssl /etc/httpd/conf.d/ssl.conf #ssl的設(shè)置文件 /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的主機(jī)上面只能用一個(gè)ssl的連接。而客戶端訪問的地址一定要是證書里面顯示的主機(jī)名。我們在服務(wù)器上要做的就是要正確的把這個(gè)請求解析到正確的虛擬主機(jī)。
https的端口是443。
現(xiàn)在在conf.d/ssl.conf配置文件中除了一般ssl的設(shè)置以外,還有一個(gè)443端口的虛擬主機(jī)。而vhosts文件
中的phpMyadmin虛擬主機(jī)要用ssl也要以443端口。所以我這里就把ssl.conf文件中帶的虛擬主機(jī)給注釋了。 并把所需要的指令放到vhosts文件中去。
現(xiàn)在的vhosts配置文件。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" %{SSL_PROTOCOL}x %{SSL_CIPHER}x " custom1 #自定義日志格式,加入了顯示ssl協(xié)議版本和加密協(xié)議。 <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協(xié)議版本,除了SSLV2版本。 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 #這個(gè)也可以不加,我直接復(fù)制過來了。 SSLCertificateFile /etc/httpd/ssl/myadm.crt #證書路徑 SSLCertificateKeyFile /etc/httpd/ssl/myadm.key #私鑰路徑 <Directory "web/myadm"> Options None Require all granted </Directory> </VirtualHost>
虛擬主機(jī)如果非要有優(yōu)先級的話:IP>端口>FQDN。
所以這里有個(gè)有意思的地方,訪問https://www.star.com/會怎么樣。443端口,會優(yōu)先使用端口的虛擬主機(jī),所以會訪問phpMyadmin的虛擬主機(jī)。但是訪問名稱與證書中的主機(jī)名不同。所以:
而www.star.com是沒有問題的。
完成。 謝謝瀏覽。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。