FastCGI&LNMP 搭建wordpress

1 什麼是FastCGI

FastCGI是一個可伸縮地、高速地在HTTP服務器和動態腳本語言間通信的接口

CGI(common gateway interface)通用網關接口

FastCGI特點總結:

1、是HTTP服務器和動態腳本語言間通信的接口或者工具;

2FastCGI優點是把動態語言解析和HTTP服務器分離開來;

3nginxapachelighttpd以及多數動態語言都支持FastCGI

4FastCGI接口方式採用C/S結構,客戶端(http服務器),服務端(動態語言解析服務器);

5PHP動態語言服務端可以啓動多個FastCGI的守護進程(php-fpm

6http服務器通過FastCGI客戶端(例:Nginx fastcgi_pass)和動態語言FastCGI服務端通信(例:php-fpm

 

以下爲Nginx結合PHP FastCGI運行原理圖:

圖片.png

 

2 PHP安裝前的準備

要安裝PHP,最好先安裝nginxmysql

檢查nginx是否安裝

[root@lnmp02 data]# /application/nginx/sbin/nginx
[root@lnmp02 data]# ps -ef|grep nginx           
root       1900      1  0 18:12 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
nginx      1901   1900  0 18:12 ?        00:00:00 nginx: worker process       
root       1903   1035  0 18:12 pts/0    00:00:00 grep nginx

查看Nginx版本信息,編譯環境等

[root@lnmp02 data]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.6.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.6.3/ --with-http_stub_status_module --with-http_ssl_module

檢查數據庫有沒有安裝

[root@lnmp02 data]# ls /application/mysql/ -al
[root@lnmp02 data]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1633 mysql   10u  IPv4  18284      0t0  TCP *:mysql (LISTEN)

3 安裝PHP(編譯安裝)

拷貝PHP文件到服務器

[root@lnmp02 data]# cd /home/oldboy/tools/
[root@lnmp02 tools]# rz -y
[root@lnmp02 tools]# ls
mysql-5.5.32-linux2.6-x86_64.tar.gz  nginx-1.6.3  nginx-1.6.3.tar.gz  php-5.3.27.tar.gz

查看php運行時調用的一些函數庫是否已經安裝

[root@lnmp02 tools]# rpm -qa freetype-devel libpng-devel gd-devel curl-devel
[root@lnmp02 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64

安裝相關的函數庫包


yum install zlib-devel libxml2-devel libjpeg-devel libiconv-devel -y
yum install freetype-devel libpng-devel gd-devel curl-devel libxslt-devel -y
echo $?
vi /etc/yum.conf  修改keepcache=1 可以讓安裝了的包保留下來


 

檢查包是否順利安裝


[root@lnmp02 tools]# rpm -qa freetype-devel libpng-devel gd-devel curl-devel
freetype-devel-2.3.11-17.el6.x86_64
libpng-devel-1.2.49-2.el6_7.x86_64
gd-devel-2.0.35-11.el6.x86_64
[root@lnmp02 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64
libxml2-devel-2.7.6-21.el6_8.1.x86_64
 
libjpeg-devel  curl-devel要變名字
[root@lnmp02 tools]# rpm -qa|grep libjpeg
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
 
[root@lnmp02 tools]# rpm -qa|grep curl
libcurl-devel-7.19.7-53.el6_9.x86_64

yum源裏沒有libiconv-devel,手動安裝後再次檢查

[root@lnmp02 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@lnmp02 tools]#tar zxf libiconv-1.14.tar.gz
[root@lnmp02 tools]#cd libiconv-1.14
[root@lnmp02 libiconv-1.14]#./configure --prefix=/usr/local/libiconv
[root@lnmp02 libiconv-1.14]#make
[root@lnmp02 libiconv-1.14]#make install

 

rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel zlib-devel libxml2-devel libjpeg-turbo-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
freetype-devel-2.3.11-17.el6.x86_64
libpng-devel-1.2.49-2.el6_7.x86_64
libcurl-devel-7.19.7-53.el6_9.x86_64
libxml2-devel-2.7.6-21.el6_8.1.x86_64
gd-devel-2.0.35-11.el6.x86_64

安裝libmcrypt

[root@lnmp02 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@lnmp02 tools]# yum install libmcrypt-devel -y
[root@lnmp02 tools]# rpm -qa libmcrypt-devel
libmcrypt-devel-2.5.8-9.el6.x86_64

安裝mhash加密擴展庫,已經裝了epel源,可以快速安裝

yum install mhash mhash-devel -y
[root@lnmp02 tools]# rpm -qa  mhash mhash-devel          
mhash-devel-0.9.9.9-3.el6.x86_64
mhash-0.9.9.9-3.el6.x86_64

安裝mcrypt加密擴展庫

[root@lnmp02 tools]# yum install mcrypt -y
[root@lnmp02 tools]# rpm -qa mcrypt
mcrypt-2.6.8-10.el6.x86_64

開始安裝PHP服務

[root@lnmp02 tools]# ls
libiconv-1.14         mysql-5.5.32-linux2.6-x86_64.tar.gz  nginx-1.6.3.tar.gz
libiconv-1.14.tar.gz  nginx-1.6.3                          php-5.3.27.tar.gz
[root@lnmp02 tools]# tar xf php-5.3.27.tar.gz
[root@lnmp02 tools]# ls
libiconv-1.14                        nginx-1.6.3         php-5.3.27.tar.gz
libiconv-1.14.tar.gz                 nginx-1.6.3.tar.gz
mysql-5.5.32-linux2.6-x86_64.tar.gz  php-5.3.27
[root@lnmp02 tools]# cd php-5.3.27
[root@lnmp02 php-5.3.27]#

編譯安裝PHP

./configure \
--prefix=/application/php-5.3.27 \
--with-mysql=/application/mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curlwrappers \
--enable-mbregex \
--enable-mbstring \
--enable-fpm \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp

檢查錯誤

[root@lnmp02 php-5.3.27]# echo $?
0
make: *** [ext/phar/phar.php] 錯誤 127

安裝報錯的處理

將libmysqlclient.so.18庫做個軟鏈接,創建沒有的文件,重新make
[root@lnmp02 php-5.3.27]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
 [root@lnmp02 php-5.3.27]# touch ext/phar/phar.phar
[root@lnmp02 php-5.3.27]# make
 
Build complete.
Don't forget to run 'make test'.
 
[root@lnmp02 php-5.3.27]# make install
[root@lnmp02 php-5.3.27]# echo $?
0

做個軟鏈接

[root@lnmp02 php-5.3.27]# ln -s /application/php-5.3.27/ /application/php
[root@lnmp02 php-5.3.27]# ls -l /application/php
lrwxrwxrwx 1 root root 24 6月  25 22:19 /application/php -> /application/php-5.3.27/

查看php配置默認模板文件

[root@lnmp02 php-5.3.27]# ls php.ini*
php.ini-development  php.ini-production

拷貝配置文件到PHP默認目錄並改名

[root@lnmp02 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini

php.ini比較重要的參數優化

1)比較重要的安全參數優化:


338  safe_mode = On       338行 開啓安全模式
435  expose_php = Off      關閉版本信息
521  error_reporting = E_ALL & ~E_DEPRECATED    報錯的級別
538  display_errors = Off         錯誤信息控制,測試的時候開啓
559  log_errors = On             打開log日誌
643  ;error_log = php_errors.log     log日誌的路徑
703  register_globals = Off         關閉全局變量(默認關閉,不能開啓)
756  magic_quotes_gpc = Off       防止SQL注入
854  ;cgi.fix_pathinfo=0           防止Nginx文件類型錯誤解析漏洞
902  allow_url_fopen = Off         打開遠程打開(禁止)
2)根據具體業務可修改的參數:
444  max_execution_time = 30      單個腳本最大運行時間,單位秒*****
454  max_input_time = 60          單個腳本等待輸入的最長時間
465  memory_limit = 128M        單個腳本最大使用內存,單位K或M
                               (128M稍大,可以適當調小)
891  upload_max_filesize = 2M      上傳文件最大許可
894  max_file_uploads = 20         可以通過單個請求上載的最大文件數


配置PHP服務的配置文件php-fpm.conf

[

root@lnmp02 php-5.3.27]# cd /application/php/etc/
[root@lnmp02 etc]# ls
pear.conf  php-fpm.conf.default
[root@lnmp02 etc]# cp php-fpm.conf.default php-fpm.conf

 

php-fpm.conf配置文件詳解

pid = /usr/local/var/run/php-fpm.pid

#pid設置,一定要開啓,上面是Mac平臺的。默認在php安裝目錄中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid

 

error_log = /usr/local/var/log/php-fpm.log

#錯誤日誌,上面是Mac平臺的,默認在php安裝目錄中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log

 

log_level = notice

#錯誤級別. 上面的php-fpm.log紀錄的登記。可用級別爲: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.

 

emergency_restart_threshold = 60

emergency_restart_interval = 60s

#表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啓。這兩個選項一般保持默認值。0 表示 '關閉該功能'. 默認值: 0 (關閉).

 

process_control_timeout = 0

#設置子進程接受主進程複用信號的超時時間. 可用單位: s(), m(), h(小時), 或者 d() 默認單位: s(). 默認值: 0.

 

daemonize = yes

#後臺執行fpm,默認值爲yes,如果爲了調試可以改爲no。在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。

 

listen = 127.0.0.1:9000

#fpm監聽端口,即nginxphp處理的地址,一般默認值即可。可用格式爲: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設置。如果nginxphp在不同的機器上,分佈式處理,就設置ip這裏就可以了。

 

listen.backlog = -1

#backlog數,設置 listen 的半連接隊列長度,-1表示無限制,由操作系統決定,此行註釋掉就行。backlog含義參考:http://www.3gyou.cc/?p=41

 

listen.allowed_clients = 127.0.0.1

#允許訪問FastCGI進程的IP白名單,設置any爲不限制IP,如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者爲空,則允許任何服務器請求連接。

 

listen.owner = www

listen.group = www

listen.mode = 0666

#unix socket設置選項,如果使用tcp方式訪問,這裏註釋即可。

 

user = www

group = www

#啓動進程的用戶和用戶組,FPM 進程運行的Unix用戶, 必須要設置。用戶組,如果沒有設置,則默認用戶的組被使用。

 

pm = dynamic

#php-fpm進程啓動模式,pm可以設置爲staticdynamicondemand

#如果選擇static,則進程數就數固定的,由pm.max_children指定固定的子進程數。

#如果選擇dynamic,則進程數是動態變化的,由以下參數決定:

 

pm.max_children = 50 #子進程最大數

pm.start_servers = 2 #啓動時的進程數,默認值爲: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

pm.min_spare_servers = 1 #保證空閒進程數最小值,如果空閒進程小於此值,則創建新的子進程

pm.max_spare_servers = 3 #,保證空閒進程數最大值,如果空閒進程大於此值,此進行清理

 

pm.max_requests = 500

#設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置爲 '0' 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變量. 默認值: 0.

 

pm.status_path = /status

#FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到

 

ping.path = /ping

#FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)

 

ping.response = pong

#用於定義ping請求的返回相應. 返回爲 HTTP 200 text/plain 格式文本. 默認值: pong.

 

access.log = log/$pool.access.log

#每一個請求的訪問日誌,默認是關閉的。

 

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

#設定訪問日誌的格式。

 

slowlog = log/$pool.log.slow

#慢請求的記錄日誌,配合request_slowlog_timeout使用,默認關閉

 

request_slowlog_timeout = 10s

#當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 設置爲 '0' 表示 'Off'

 

request_terminate_timeout = 0

#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的'max_execution_time'因爲某些特殊原因沒有中止運行的腳本有用. 設置爲 '0' 表示 'Off'.當經常出現502錯誤時可以嘗試更改此選項。

 

rlimit_files = 1024

#設置文件打開描述符的rlimit限制. 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

 

rlimit_core = 0

#設置核心rlimit最大限制值. 可用值: 'unlimited' 0或者正整數. 默認值: 系統定義值.

 

chroot =

#啓動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, chroot不被使用.

 

 

chdir =

#設置啓動目錄,啓動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)

 

catch_workers_output = yes

#重定向運行過程中的stdoutstderr到主要的錯誤日誌文件中. 如果沒有設置, stdout stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: .

php-fpm.conf一些重要的設置

php-fpm進程分配

在之前的文章中就說過了。在fasgcgi模式下,php會啓動多個php-fpm進程,來接收nginx發來的請求,那是不是進程越多,速度就越快呢?這可不一定!得根據我們的機器配置和業務量來決定。

我們先來看下,設定進程的配置在哪裏?

 

pm = static | dynamic | ondemand

pm可以設置成這樣3種,我們用的最多的就上前面2種。

pm = static 模式

pm = static 表示我們創建的php-fpm子進程數量是固定的,那麼就只有pm.max_children = 50這個參數生效。你啓動php-fpm的時候就會一起全部啓動51(1個主+50個子)個進程,頗爲壯觀。

pm = dynamic 模式

pm = dynamic模式,表示啓動進程是動態分配的,隨着請求量動態變化的。他由 pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers 這幾個參數共同決定。

上面已經講過,這裏再重申一下吧:

pm.max_children 50 是最大可創建的子進程的數量。必須設置。這裏表示最多隻能50個子進程。

pm.start_servers = 20 隨着php-fpm一起啓動時創建的子進程數目。默認值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。這裏表示,一起啓動會有20個子進程。

pm.min_spare_servers = 10 
設置服務器空閒時最小php-fpm進程數量。必須設置。如果空閒的時候,會檢查如果少於10個,就會啓動幾個來補上。

pm.max_spare_servers = 30 
設置服務器空閒時最大php-fpm進程數量。必須設置。如果空閒時,會檢查進程數,多於30個了,就會關閉幾個,達到30個的狀態。

到底選擇static還數dynamic?

很多人恐懼症來襲,不知道選什麼好?

一般原則是:動態適合小內存機器,靈活分配進程,省內存。靜態適用於大內存機器,動態創建回收進程對服務器資源也是一種消耗。

如果你的內存很大,有8-20G,按照一個php-fpm進程20M算,100個就2G內存了,那就可以開啓static模式。如果你的內存很小,比如才256M,那就要小心設置了,因爲你的機器裏面的其他的進程也算需要佔用內存的,所以設置成dynamic是最好的,比如:pm.max_chindren = 8, 佔用內存160M左右,而且可以隨時變化,對於一半訪問量的網站足夠了。

 

慢日誌查詢

我們有時候會經常飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。

這個時候,我們是可以開啓慢日誌功能的。

slowlog = /usr/local/var/log/php-fpm.log.slow

request_slowlog_timeout = 15s

當一個請求該設置的超時時間15秒後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中。

php-fpm慢日誌會記錄下進程號,腳本名稱,具體哪個文件哪行代碼的哪個函數執行時間過長:

[21-Nov-2013 14:30:38] [pool www] pid 11877

script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php

[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2

通過日誌,我們就可以知道第2行的file_get_contents 函數有點問題,這樣我們就能追蹤問題了

 

啓動PHP服務

[root@lnmp02 ~]# /application/php/sbin/php-fpm
[root@lnmp02 etc]# ps -ef|grep php-fpm
root     126238      1  0 23:34 ?        00:00:00 php-fpm: master process (/application/php-5.3.27/etc/php-fpm.conf)
nginx    126239 126238  0 23:34 ?        00:00:00 php-fpm: pool www           
nginx    126240 126238  0 23:34 ?        00:00:00 php-fpm: pool www           
root     126242 126214  0 23:34 pts/0    00:00:00 grep php-fpm
[root@lnmp02 etc]# lsof -i :9000    <============默認9000端口提供服務
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 126238  root    7u  IPv4 121633      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 126239 nginx    0u  IPv4 121633      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 126240 nginx    0u  IPv4 121633      0t0  TCP localhost:cslistener (LISTEN)

配置Nginx支持PHP程序請求訪問

[root@lnmp02 etc]# cd /application/nginx/conf/
[root@lnmp02 conf]# vi extra/blog.conf
     server {
        listen       80;
        server_name  blog.etiantian123.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
        location ~ .*\.(php|php5)?$ {
            root html/blog;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
    }

檢查語法並重啓服務

[root@lnmp02 conf]# ../sbin/nginx -t
nginx: the configuration file /application/nginx-1.6.3//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.6.3//conf/nginx.conf test is successful
[root@lnmp02 conf]# ../sbin/nginx -s reload

測試LNMP環境生效的情況

1)測試PHP解析請求是否OK

[root@lnmp02 conf]# cd ../html/blog/
[root@lnmp02 blog]# echo "<?php phpinfo(); ?>" >test_info.php
[root@lnmp02 blog]# cat test_info.php
<?php phpinfo(); ?>

2)調整windows下的host解析

3)打開瀏覽器輸入http://blog.etiantian123.org/test_info.php 若能顯示PHP的信息 PHP解析已經正常

 

PHP連接mysql的情況進行測試

[root@lnmp02 blog]# vi test_mysql.php
<?php
       $link_id=mysql_connect("localhost","root","wangxin") or mysql_error();
       if ($link_id) {
                echo "mysql successful by wangxin !";
       }else{      
                echo mysql_error();
       }
?>

瀏覽器測試:

http://blog.etiantian123.org/test_mysql.php

出現mysql successful by wangxin ! OK

4 部署一個開源博客wordpress

4.1 mysql數據庫配置準備

登錄數據庫

[root@lnmp02 ~]# mysql -uroot -pwangxian
mysql> create database wordpress;   <========創建一個專用的數據庫wordpress用於存放blog數據
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
4 rows in set (0.07 sec)

創建一個專用的wordpress管理用戶

命令如下:

mysql> grant all on wordpress .* to wordpress@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

當數據庫和PHP服務不在一臺機器上,修改地址如下:   10.0.0.%爲客戶端地址段

mysql> grant all on wordpress .* to wordpress@'10.0.0.%' identified by '123456';

刷新權限,使得創建用戶生效

mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)

 

查看用戶對應的權限

show grants for wordpress@'localhost';

查看數據庫裏創建的wordpress用戶

mysql> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | 127.0.0.1 |
| root      | localhost |
| wordpress | localhost |      <==============只允許本機通過wordpress用戶訪問數據庫
+-----------+-----------+
3 rows in set (0.00 sec)

4.2 NginxPHP環境配置準備

1、選擇配置好的支持LNMPblog域名對應的虛擬主機

[root@lnmp02 ~]# cd /application/nginx/conf/extra/
[root@lnmp02 extra]# vi blog.conf
     server {
        listen       80;
        server_name  blog.etiantian123.org;
        location / {
            root   html/blog;
            index  index.php index.html index.htm;   《=========補充一個首頁文件index.php
        }
        location ~ .*\.(php|php5)?$ {
            root html/blog;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
    }

檢查語法以及重新加載服務

[root@lnmp02 extra]# ../../sbin/nginx -t
nginx: the configuration file /application/nginx-1.6.3//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.6.3//conf/nginx.conf test is successful
[root@lnmp02 extra]# ../../sbin/nginx -s reload

 

2、獲取wordpress程序,放置到blog域名對應虛擬主機的目錄下


[root@lnmp02 blog]# ls
index.html  test_info.php  test_mysql.php  wordpress-4.7.4-zh_CN.tar.gz
[root@lnmp02 blog]# tar xf wordpress-4.7.4-zh_CN.tar.gz
[root@lnmp02 blog]# ls
index.html  test_info.php  test_mysql.php  wordpress  wordpress-4.7.4-zh_CN.tar.gz
[root@lnmp02 blog]# mv wordpress/*  .  《=======把wordpress目錄的內容移動到blog根目錄
[root@lnmp02 blog]# /bin/mv wordpress-4.7.4-zh_CN.tar.gz /home/oldboy/tools/    將源文件移走備份


授權nginxphp服務訪問blog站點目錄,此授權方法不安全,臨時辦法

[root@lnmp02 blog]# chown -R nginx.nginx ../blog/


5 wordpress數據庫的備份和恢復

mysqldump 最常用的備份工具

5.1數據備份分類

邏輯備份(mysqldump

小於50G的數據量

原理:將數據庫的數據以邏輯的SQL語句的方式到處

 

物理備份

1 scp /application/mysql/data 拷貝到獨立數據庫上就可以

2 xtrabackup開源的物理備份工具

5.2 mysqldump備份

[root@lnmp02 ~]# mysqldump -uroot -pwangxian -B -A -x|gzip >/opt/backup_$(date +%F).sql.gz
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
[root@lnmp02 ~]# ll /opt/
總用量 296
-rw-r--r--  1 root root 298664 6月  27 21:41 backup_2017-06-27.sql.gz
drwxr-xr-x. 2 root root   4096 11月 22 2013 rh

-A  備份所有庫

-B  備份多個庫,並添加use 庫名; create database庫等的功能

-x  備份時鎖表,會影響讀寫,儘量晚上執行。

gzip  壓縮效率高

只備份wordpress庫裏的數據

[root@lnmp02 ~]# mysqldump -uroot -pwangxian -B  -x wordpress|gzip >/opt/backup_wordpress_$(date +%F).sql.gz

數據庫備份的遷移到mysql-server

[root@lnmp02 opt]# scp -rp -P52113 backup_wordpress_2017-06-27.sql.gz [email protected]:/opt/

 

數據庫恢復

先解壓
[root@mysql-server tools]# cd /opt/
[root@mysql-server opt]# gzip -d backup_wordpress_2017-06-27.sql.gz
[root@mysql-server opt]# ll
總用量 616
-rw-r--r--  1 root root 625542 6月  27 21:47 backup_wordpress_2017-06-27.sql
[root@mysql-server opt]# mysql -uroot -pwangxian <backup_wordpress_2017-06-27.sql
[root@mysql-server opt]# mysql -uroot -pwangxian
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

 

給客戶端主機授權訪問數據庫

mysql> grant select,insert,update,delete on wordpress.* to wordpress@'192.168.4.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
 
mysql> select user,host from mysql.user;                                                 
+-----------+--------------+
| user      | host         |
+-----------+--------------+
| root      | 127.0.0.1    |
| wordpress | 192.168.4.%  |
| root      | ::1          |
|           | localhost    |
| root      | localhost    |
|           | mysql-server |
| root      | mysql-server |
+-----------+--------------+
7 rows in set (0.00 sec)

Nginx服務器上修改wp-config.php參數,並且修改hosts文件

[root@lnmp02 blog]# pwd
/application/nginx/html/blog
 
[root@lnmp02 blog]# vi wp-config.php
/** MySQL主機 */
define('DB_HOST', 'db.etiantian123.org');
 
[root@lnmp02 blog]# vi /etc/hosts
192.168.4.124 db.etiantian123.org

6 搭建LB負載均衡環境

添加虛擬IP(VIP)

[root@lb01 ~]# ip addr add 192.168.4.126/24 dev eth0
[root@lb01 ~]# ip add|grep 4.126
    inet 192.168.4.126/24 scope global secondary eth0

負載均衡常用軟件:

L4tcp負載均衡  lvs

L4-L7 Haproxy

L7    Nginx  國內中小企業集羣比較流行的負載均衡軟件,嚴格來說叫反向代理。Nginx已經支持L4-L7

下載安裝nginx

[root@lb01 tools]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
[root@lb01 tools]# ls -l
總用量 788
-rw-r--r-- 1 root root 805253 4月   8 2015 nginx-1.6.3.tar.gz
[root@lb01 tools]# useradd nginx -s /sbin/nologin -M
[root@lb01 tools]# tar xf nginx-1.6.3.tar.gz
[root@lb01 tools]# cd nginx-1.6.3
[root@lb01 nginx-1.6.3]# yum install pcre-devel -y
[root@lb01 nginx-1.6.3]# yum install pcre-devel openssl-devel -y
[root@lb01 nginx-1.6.3]# mkdir /application
[root@lb01 nginx-1.6.3]#./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
[root@lb01 nginx-1.6.3]#make
[root@lb01 nginx-1.6.3]#make install

做個軟鏈接

[root@lb01 nginx-1.6.3]# ln -s /application/nginx-1.6.3/ /application/nginx
[root@lb01 nginx-1.6.3]# ls -l /application/
總用量 4
lrwxrwxrwx 1 root root   25 6月  28 14:25 nginx -> /application/nginx-1.6.3/
drwxr-xr-x 6 root root 4096 6月  28 14:24 nginx-1.6.3
[root@lb01 nginx-1.6.3]# ll /application/nginx/
總用量 16
drwxr-xr-x 2 root root 4096 6月  28 14:24 conf
drwxr-xr-x 2 root root 4096 6月  28 14:24 html
drwxr-xr-x 2 root root 4096 6月  28 14:24 logs
drwxr-xr-x 2 root root 4096 6月  28 14:24 sbin

 

Nginx負載均衡需要哪些模塊:

1upstream模塊      ngx_http_upstream_module

定義有哪些節點,調度算法是什麼?

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
 
    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}
 
server {
    location / {
        proxy_pass http://backend;
    }
}

2http_proxy模塊    ngx_http_proxy_module

此模塊負責請求的轉發,例如:proxy_pass發給定義好的指定upstream名字

location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Forwarded-For  $remote_addr; 《===獲取用戶真實IP
}

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章