1. 程式人生 > >8.10 12.1-12.5

8.10 12.1-12.5

iad 運行 limit -- nat ket init 相同 啟動失敗

12.1 LNMP架構介紹

Apachenginx的功能類似

LNMP架構中,PHP會作為一個獨立的服務存在,這個服務叫php-fpmnginx會將用戶請求的php交個php-fpm處理

php-fpm會和mysql進行交互

用戶登錄網站時需要將用戶的身份信息(用戶名密碼)與mysql中的信息進行比對查找,該工作由php-fpm完成,若查證無誤,則php-fpm會返回信息給nginx,再由nginx告訴用戶的瀏覽器

技術分享圖片

靜態請求會由nginx直接處理,nginx處理靜態請求的性能比apache更好

Nginx可以支持較大的用戶並發數

12.2 MySQL安裝

重新安裝mysql

刪除原來的mysql

1 檢查原來安裝的mysql是否運行

[root@hyc-01-01 ~]# ps aux|grep mysql

root 1023 0.0 0.0 112720 984 pts/0 R+ 20:49 0:00 grep --color=auto mysql 未運行

2 刪除mysql相關文件

[root@hyc-01-01 local]# rm -rf /usr/local/mysql 刪除mysql包解壓後的目錄

[root@hyc-01-01 local]# rm -rf /etc/init.d/mysqld 刪除mysql啟動腳本

3 下載mysql

將所有包下載至統一路徑下

[root@hyc-01-01 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz

4 將解壓後的包移動位置並改名為mysql

[root@hyc-01-01 src]# mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql

此時/usr/local/路徑下一定不能存在mysql目錄,否則會將文件移動到這個mysql目錄下並且不會修改文件名稱

5 檢查/usr/local路徑下的mysql目錄並進入該目錄,創建/data目錄及mysql用戶

[root@hyc-01-01 src]# ls /usr/local/mysql/

bin data include man README share support-files

COPYING docs lib mysql-test scripts sql-bench

[root@hyc-01-01 src]# cd /usr/local/mysql

[root@hyc-01-01 mysql]# ls /data /data目錄已創建

mariadb mysql wwwroot

[root@hyc-01-01 mysql]# id mysql mysql用戶已創建

uid=1002(mysql) gid=1002(mysql) =1002(mysql)

6 清空目錄/data/mysql或直接刪除/data/mysql目錄

[root@hyc-01-01 mysql]# rm -rf /data/mysql/*

僅刪除/data/mysql/目錄下的文件,不刪除mysql目錄本身

也可以將整個mysql目錄刪除

7 初始化

生成mysql啟動所需的目錄的過程

[root@hyc-01-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

安裝過程中出現2ok則說明正確執行

[root@hyc-01-01 mysql]# echo $? 檢查是否正確執行(需要執行完成後立即執行該命令檢查)

0 0則執行無誤

8 配置mysql配置文件(my.cnf

拷貝配置文件到/etc下(若/etc下已有my.cnf則不執行該步)

[root@hyc-01-01 mysql]# cp support-files/my-default.cnf /etc/my.cnf

mysqld服務查找配置文件時默認會到/etc目錄下查找文件名為my.cnf的文件,所以需要將配置文件名改為my.cnf並移動文件到/etc

檢查配置:

[root@hyc-01-01 etc]# vim my.cnf

1 [mysqld]

2 federated

3 datadir=/data/mysql datadir路徑是否正確

4 socket=/tmp/mysql.sock socket路徑是否正確

9 拷貝啟動腳本並編輯

拷貝:

[root@hyc-01-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld

編輯:

[root@hyc-01-01 mysql]# vim /etc/init.d/mysqld

42

43 # If you change base dir, you must also change datadir. These may get

44 # overwritten by settings in the MySQL configuration files.

45

46 basedir=/usr/local/mysql

47 datadir=/data/mysql

48

10 啟動mysqld

[root@hyc-01-01 mysql]# /etc/init.d/mysqld start

Starting MySQL.Logging to '/data/mysql/hyc-01-01.err'.

. SUCCESS! 啟動成功

檢查:

[root@hyc-01-01 mysql]# ps aux|grep mysqld

root 1327 0.0 0.1 113308 1604 pts/0 S 22:11 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/hyc-01-01.pid

mysql 1477 1.6 44.6 1302724 449788 pts/0 Sl 22:11 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=hyc-01-01.err --pid-file=/data/mysql/hyc-01-01.pid --socket=/tmp/mysql.sock

root 1503 0.0 0.0 112720 980 pts/0 R+ 22:12 0:00 grep --color=auto mysqld

mysqld加入服務列表

[root@hyc-01-01 mysql]# chkconfig --add mysqld mysqld加入服務列表

[root@hyc-01-01 mysql]# chkconfig mysqld on 設置開機啟動

此時可以使用以下命令:

[root@hyc-01-01 mysql]# service mysqld stop

Shutting down MySQL.. SUCCESS!

[root@hyc-01-01 mysql]# service mysqld start

Starting MySQL. SUCCESS!

[root@hyc-01-01 mysql]# ps aux|grep mysqld

root 1584 0.0 0.1 11816 1600 pts/0 S 22:15 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/hyc-01-01.pid

mysql 1735 1.1 44.6 1302724 449776 pts/0 Sl 22:15 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=hyc-01-01.err --pid-file=/data/mysql/hyc-01-01.pid --socket=/tmp/mysql.sock

root 1759 0.0 0.0 112720 980 pts/0 R+ 22:16 0:00 grep --color=auto mysqld

12.3 PHP安裝(上)

LAMPLNMPPHP安裝不一樣:

安裝LAMP時,由於PHPapache的一個模塊,所以需要在安裝時指定apache的路徑,需要使用apxs工具自動配置模塊

LNMPPHP在配置時仍需要MySQL

nginx下使用時PHP作為一個獨立的服務存在,與nginx無直接關系

操作:

1 進入PHP源碼包文件

[root@hyc-01-01 src]# cd php-5.6.30

[root@hyc-01-01 php-5.6.30]# pwd

/usr/local/src/php-5.6.30

2 刪除原先安裝LAMP時編譯的文件

[root@hyc-01-01 php-5.6.30]# make clean

find . -name \*.gcno -o -name \*.gcda | xargs rm -f

find . -name \*.lo -o -name \*.o | xargs rm -f

find . -name \*.la -o -name \*.a | xargs rm -f

find . -name \*.so | xargs rm -f

find . -name .libs -a -type d|xargs rm -rf

rm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi libphp5.la modules/* libs/*

執行完成後的/usr/local/src/php-5.6.30就是一個剛被解壓時的狀態

3 生成可編譯文件

為了與php5php7區分,指定安裝路徑為/usr/local/php-fpm

[root@hyc-01-01 php-5.6.30]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl

編譯的參數大部分與apache相同

不同:

--prefix=/usr/local/php-fpm

--with-config-file-path=/usr/local/php-fpm/etc

--enable-fpm 必須加,不加則服務無法啟動

--with-fpm-user=php-fpm 指定php-fpm的用戶

--with-fpm-group=php-fpm 指定php-fpm的組

報錯:

1

checking for cURL in default path... not found

configure: error: Please reinstall the libcurl distribution -

easy.h should be in <curl-dir>/include/curl/

解決:

[root@hyc-01-01 php-5.6.30]# yum install -y libcurl-devel

4 編譯

[root@hyc-01-01 php-5.6.30]# make

5 安裝

[root@hyc-01-01 php-5.6.30]# make install

12.4 PHP安裝(下)

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm

bin etc include lib php sbin var

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php

bin etc include lib php

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm/sbin

php-fpm

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm/var/

log run

sbinvarphp-fpm中比php多的兩個目錄

sbin目錄下有php-fpm文件,該文件用於啟動php-fpm服務

var目錄下有logrun目錄,log用於存放日誌,run用於存放pid

日誌和pid的存放路徑均可以單獨指定

sbin下的php-fpm

查看php-fpm包含的模塊:

[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –m

查看php-fpm服務信息:

[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –i

檢查php-fpm配置文件的錯誤:

[12-Aug-2018 12:17:58] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2) /usr/local/php-fpm/etc/php-fpm.conf配置文件不存在

[12-Aug-2018 12:17:58] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'

[12-Aug-2018 12:17:58] ERROR: FPM initialization failed

配置php-fpm服務

拷貝php的模板配置文件到指定的php-fpm配置文件路徑下:

[root@hyc-01-01 php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini

php.ini-production:生產環境下使用,在錯誤日誌等處與development不同

php.ini-development:測試環境下使用

編輯php-fpm的配置文件:

[root@hyc-01-01 etc]# pwd

/usr/local/php-fpm/etc

[root@hyc-01-01 etc]# ls

pear.conf php-fpm.conf.default php.ini

新建一個php-fpm.conf文件或直接將php-fpm.conf.default文件改名為php-fpm.conf

[root@hyc-01-01 etc]# vim php-fpm.conf

[global]

pid = /usr/local/php-fpm/var/run/php-fpm.pid 指定pid文件路徑

error_log = /usr/local/php-fpm/var/log/php-fpm.log 錯誤日誌路徑

[www] 模塊名稱

listen = /tmp/php-fcgi.sock 監聽的socket地址

#listen = 127.0.0.1:9000

監聽的ip地址及端口,由於php-fpm通常針對內部使用,在本機器上使用(nginxphp通常在一臺機器上)

php-fpm默認監聽的端口為9000

以上兩個listen為兩種不同的監聽方法

采用不同的監聽方法,在配置nginxphp結合時的配置也會不同,配置結合時需要告訴nginx在×××php,此時配置語句會不一樣

listen.mode = 666 當監聽的是socket地址時生效,用於定義socket文件的權限

user = php-fpm 以下2個用於定義服務的用戶和組

group = php-fpm

pm = dynamic 後面是一些與進程相關的信息

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

拷貝啟動腳本:

[root@hyc-01-01 php-5.6.30]# cd /usr/local/src/php-5.6.30 進入源碼包目錄

[root@hyc-01-01 php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 拷貝php啟動腳本並改名

修改啟動腳本權限:

[root@hyc-01-01 php-5.6.30]# chmod 755 /etc/init.d/php-fpm

php-fpm服務加入服務列表:

[root@hyc-01-01 php-5.6.30]# chkconfig --add php-fpm

php-fpm設為開機啟動:

[root@hyc-01-01 php-5.6.30]# chkconfig php-fpm on

啟動php-fpm服務:

[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –t 檢測配置錯誤

[12-Aug-2018 13:21:30] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@hyc-01-01 php-5.6.30]# service php-fpm start

報錯:

Starting php-fpm [12-Aug-2018 13:20:29] ERROR: [pool www] cannot get uid for user 'php-fpm'

[12-Aug-2018 13:20:29] ERROR: FPM initialization failed

failed 啟動失敗

原因:未添加用戶php-fpm

[root@hyc-01-01 php-5.6.30]# useradd php-fpm

[root@hyc-01-01 php-5.6.30]# service php-fpm start

starting php-fpm done 正常啟動

查看進程:

[root@hyc-01-01 php-5.6.30]# ps aux|grep php-fpm

root 54263 0.0 0.4 123648 4948 ? Ss 13:24 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)

php-fpm 54264 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www

pool www:即定義的池的名稱

php-fpm:用戶名

php-fpm 54265 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54266 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54267 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54268 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54269 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54270 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54271 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54272 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54273 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54274 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54275 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54276 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54277 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54278 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54279 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54280 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54281 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54282 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

php-fpm 54283 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www

root 54285 0.0 0.0 112720 984 pts/1 R+ 13:26 0:00 grep --color=auto php-fpm

[root@hyc-01-01 php-5.6.30]# ls -l /tmp/php-fcgi.sock

srw-rw-rw- 1 root root 0 8 12 13:24 /tmp/php-fcgi.sock

配置文件中定義的socket文件權限為666

12.5 Nginx介紹

Nginx官網:Nginx.org

由俄國人開發

Nginx的靜態文件處理能力比apache強很多

Nginx支持擴展第三方模塊(如支持https等)

目前最新的穩定版本為1.121.13已經開發了多個版本但不夠穩定

通常nginx的穩定版本在nginx官網會顯示stable,非穩定版可能會顯示mainline

分支版本

阿裏巴巴公司基於nginx開發了Tengine,使用上與nginx基本相同

Tengine增加了一些定制化的模塊,在安全限速方面性能較好

支持jscss靜態文件的合並:

購物網站上包含大量的圖片等信息,用戶訪問一個頁面時可能會產生大量請求,當並發量高的時候,大量的請求會影響web server的響應能力

Tengine可以將大量的jscss合並一起處理,減少請求的次數

Openresty

使用了nginx的部分功能和lua相關組件、模塊組成的一個支持lua的高性能web容器

lua是一個比較流行的開發語言

應用場景

Web服務:作為web服務端使用

反向代理:

負載均衡(反向代理多臺機器):


8.10 12.1-12.5