12.1 LNMP架構介紹php
12.2 MySQL安裝css
12.3/12.4 PHP-fpm安裝html
12.5 Nginx介紹mysql
擴展linux
Nginx爲何比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.htmlnginx
apache和nginx工做原理比較 http://www.server110.com/nginx/201402/6543.htmlweb
mod_php 和 mod_fastcgi以及php-fpm的比較 http://dwz.cn/1lwMSdsql
概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPM http://www.nowamagic.net/librarys/veda/detail/1319/ https://www.awaimai.com/371.htmlapache
12.1 LNMP架構介紹:vim
~1.和LAMP不一樣的是,提供web服務的是Nginx
~2.而且php是做爲一個獨立服務存在的,這個服務叫作php-fpm
~3.Nginx直接處理靜態請求,動態請求會轉發給php-fpm
~4.與Apache相比,Nginx在靜態文件的交互上會比Apache快不少。用戶併發支持會很大,上好幾萬,Apache作不到
12.2 MySQL安裝:
安裝方法與LAMP裏的mysql方法同樣
~1.cd /usr/local/src
~2.wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.43-linux-glibc2.5-x86_64.tar.gz
~3.tar zxvf mysql-5.6.43-linux-glibc2.5-x86_64.tar.gz
~4.mv mysql-5.6.43-linux-glibc2.5-x86_64 /usr/local/mysql
~5.cd /usr/local/mysql
~6.useradd mysql
~7.mkdir /data/
.~8./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
~9.cp support-files/my-default.cnf /etc/my.cnf 拷貝配置文件
~10.vi /etc/my.cnf
~11.定義datadir和socket
~12.cp support-files/mysql.server /etc/init.d/mysqld 拷貝啓動腳本
~13.vi /etc/init.d/mysqld
~14.定義basedir和datadir
~15/etc/init.d/mysqld start
咱們這裏先把以前安裝的mysql刪除,再從新安裝
[root@localhost ~]# cd /usr/local/src 先cd進src
[root@localhost src]# ps aux | grep mysql 檢查mysql是否運行
root 1089 0.0 0.0 115432 1704 ? S 19:39 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/axinlinux-01.pid
mysql 1296 3.8 24.2 1302732 453888 ? Sl 19:39 0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=axinlinux-01.err --pid-file=/data/mysql/axinlinux-01.pid
root 1599 0.0 0.0 112720 980 pts/0 S+ 19:41 0:00 grep --color=auto mysql
[root@localhost src]# service mysql stop 關閉mysql
Redirecting to /bin/systemctl stop mysql.service
[root@localhost src]# ps aux | grep mysql 再次檢查
root 1633 0.0 0.0 112720 980 pts/0 R+ 19:42 0:00 grep --color=auto mysql
[root@localhost src]# rm -rf /usr/local/mysql 刪除mysql目錄
[root@localhost src]# rm -rf /etc/init.d/mysqld 刪除啓動腳本
[root@localhost src]# vim /etc/my.cnf 系統會自帶一個my.cnf,因此暫且保留
[root@localhost src]# tar -xvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz 解壓
[root@localhost src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/
apache2/ apr-util/ etc/ include/ lib64/ mariadb/ php7/ share/ 看一下有沒有應存在的mysql目錄
apr/ bin/ games/ lib/ libexec/ php/ sbin/ src/
[root@localhost src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql 挪到local下,並更名字叫mysql
[root@localhost src]# ls /usr/local/mysql/ 看一下是否是這幾個文件
bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files
[root@localhost mysql]# useradd mysql
[root@localhost mysql]# rm -rf /data/mysql/* 由於以前建立過,過意直接刪除mysql目錄下的左右
[root@localhost mysql]# id mysql 查看一下mysql這個用戶
uid=1000(mysql) gid=1000(mysql) 組=1000(mysql)
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化,過程其實就是他啓動所須要的目錄生成
[root@localhost mysql]# echo $? 要出現兩個OK,或者echo $?看一下
0
[root@localhost mysql]# vim /etc/my.cnf 由於以前拷貝過配置文件,因此直接vim定義了datadir和socket
basedir =/usr/local/mysql datadir = /data/mysql # port = ..... # server_id = ..... socket = /tmp/mysql.sock
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld 拷貝啓動腳本
[root@localhost mysql]# ls support-files binary-configure magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server
[root@localhost mysql]# ls /etc/init.d/ functions mysqld netconsole network README
[root@localhost mysql]# vim /etc/init.d/mysqld 定義啓動腳本的basedir和datadir
basedir=/usr/local/mysql datadir=/data/mysql
[root@localhost mysql]# chkconfig --add mysqld 加入到服務裏表裏面去
[root@localhost mysql]# chkconfig mysqld on 設置開機啓動
[root@localhost mysql]# service mysqld stop 這時候能夠用命令關閉
Shutting down MySQL.. SUCCESS!
[root@localhost mysql]# service mysqld start 也能夠用命令開啓
Starting MySQL. SUCCESS!
[root@localhost mysql]# ps aux |grep mysqld 檢查是否用命令開啓
root 1881 0.0 0.1 11816 1632 pts/0 S 10:14 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.pid mysql 2032 8.6 45.3 1302744 452028 pts/0 Sl 10:14 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=localhost.err --pid-file=/data/mysql/localhost.pid --socket=/tmp/mysql.sock root 2056 0.0 0.0 112724 988 pts/0 R+ 10:14 0:00 grep --color=auto mysqld
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.3/12.4 PHP安裝:
和LAMP安裝PHP方法有差異,須要開啓php-fpm服務
~1.cd /usr/local/src/
~2.wget http://cn2.php.net/distributions/php-5.6.32.tar.gz
~3.tar zxf php-5.6.32.tar.gz
~4.useradd -s /sbin/nologin php-fpm
~5.cd php-5.6.32
~6../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
~7.make && make install
~8.cp php.ini-production /usr/local/php-fpm/etc/php.ini
php.ini-development給開發用的或測試用的。php.ini-production適合生產環境用
~9.vi /usr/local/php-fpm/etc/php-fpm.conf 寫入以下內容
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000 實例中有對這二者的解釋,選擇一種
listen.mode = 666
user = php-fpm
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
~10.cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
~11.chmod 755 /etc/init.d/php-fpm
~12.chkconfig --add php-fpm
~13.chkconfig php-fpm on
~14.service php-fpm start
~15.ps aux |grep php-fpm
(/usr/local/php-fpm/sbin/php-fpm -m/-i與/usr/local/php-fpm/bin/php -m/-i是同樣的,均可以查看。可是多了一個 -t
/usr/local/php-fpm/sbin/php-fpm -t是測試他本身配置文件語法的,makeinstall以後用-t就會提示沒有配置文件也就是~10.)
實例:
由於咱們以前安裝過,因此直接make clean 清空以前的配置,回到剛解壓的狀態
[root@localhost php]# cd /usr/local/src/php-5.6.32/ 進入解壓後的php5
[root@localhost php-5.6.32]# 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/*
[root@localhost php-5.6.32]# ./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
在這裏咱們把php的名字設置成了--prefix=php-fpm(和Nginx對應的)
還有他的配置文件也改爲和Nginx對應的--with-config-file-path=/usr/local/php-fpm/etc
注意要加上--enable-fpm,啓動php-fpm,不加就無法啓動這個服務。(在Nginx中php做爲服務存在的)
--with-fpm-user=php-fpm指定用戶
--with-fpm-group=php-fpm指定組
--with-mysql=/usr/local/mysql 指定路徑
報錯configure: error: Please reinstall the libcurl distribution
yum install curl curl-devel
Thank you for using PHP. config.status: creating php5.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands
[root@localhost php-5.6.32]# echo $?
0
[root@localhost php-5.6.32]# make
Generating phar.php Generating phar.phar PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. clicommand.inc directorytreeiterator.inc invertedregexiterator.inc directorygraphiterator.inc pharcommand.inc phar.inc
[root@localhost php-5.6.32]# echo $?
0
[root@localhost php-5.6.32]# make install
Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/ Installing PHP CLI binary: /usr/local/php-fpm/bin/ Installing PHP CLI man page: /usr/local/php-fpm/php/man/man1/ Installing PHP FPM binary: /usr/local/php-fpm/sbin/ Installing PHP FPM config: /usr/local/php-fpm/etc/ Installing PHP FPM man page: /usr/local/php-fpm/php/man/man8/ Installing PHP FPM status page: /usr/local/php-fpm/php/php/fpm/ Installing PHP CGI binary: /usr/local/php-fpm/bin/ Installing PHP CGI man page: /usr/local/php-fpm/php/man/man1/ Installing build environment: /usr/local/php-fpm/lib/php/build/ Installing header files: /usr/local/php-fpm/include/php/ Installing helper programs: /usr/local/php-fpm/bin/ program: phpize program: php-config Installing man pages: /usr/local/php-fpm/php/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/php-fpm/lib/php/ [PEAR] Archive_Tar - installed: 1.4.3 [PEAR] Console_Getopt - installed: 1.4.1 [PEAR] Structures_Graph- installed: 1.1.1 [PEAR] XML_Util - installed: 1.4.2 [PEAR] PEAR - installed: 1.10.5 Wrote PEAR system config file at: /usr/local/php-fpm/etc/pear.conf You may want to add: /usr/local/php-fpm/lib/php to your php.ini include_path /usr/local/src/php-5.6.32/build/shtool install -c ext/phar/phar.phar /usr/local/php-fpm/bin ln -s -f phar.phar /usr/local/php-fpm/bin/phar Installing PDO headers: /usr/local/php-fpm/include/php/ext/pdo/
[root@localhost php-5.6.32]# echo $?
0
[root@localhost php-5.6.32]# /usr/local/php-fpm/sbin/php-fpm -t 自帶的-t測試,提示沒有配置文件
[23-Jul-2019 10:43:22] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2) [23-Jul-2019 10:43:22] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf' [23-Jul-2019 10:43:22] ERROR: FPM initialization failed
[root@localhost php-5.6.32]# cp php.ini-production /usr/local/php-fpm/etc/php.ini 拷貝配置文件,這裏選php.ini-production生產環境用的
[root@localhost php-5.6.32]# vi /usr/local/php-fpm/etc/php-fpm.conf
[global] 定義全局的參數
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www] 模塊的名字,啓動的時候就會看到
listen = /tmp/php-fcgi.sock 監聽的地址。php-fpm能夠監聽socket能夠監聽tcp/ip,這裏能夠寫socket也能夠寫下面的
#listen = 127.0.0.1:9000 通常都是監聽這個IP。由於php-fpm是在內部使用的,在本機上用的,也就是Nginx和php一般是在一臺機器上的。他們二者通訊就能夠用內部的網絡。固然也能夠監聽其餘的IP。prot默認是9000,也能夠改爲其餘的
以上是兩種不一樣的監聽方法。這選擇不一樣的話,後面php-fpm與nginx結合的時候,配置語句也是不一樣的
listen.mode = 666 socket的時候這個語句纔會生效。就是上面選socket的時候定義它的權限
user = php-fpm 定義用戶和組。誰啓動的
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
[global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm 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@localhost php-5.6.32]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 拷貝啓動腳本
[root@localhost php-5.6.32]# chmod 755 /etc/init.d/php-fpm
[root@localhost php-5.6.32]# chkconfig --add php-fpm
[root@localhostphp-5.6.32]# chkconfig php-fpm on
[root@localhost php-5.6.32]# service php-fpm start 執行到這一步有報錯。是以前忘記建立用戶
Starting php-fpm [23-Jul-2019 11:02:39] ERROR: [pool www] cannot get uid for user 'php-fpm' [23-Jul-2019 11:02:39] ERROR: FPM initialization failed failed
[root@localhost php-5.6.32]# useradd php-fpm 建立php-fpm用戶。不要忘記
[root@localhost php-5.6.32]# /usr/local/php-fpm/sbin/php-fpm -t 檢測成功
[23-Jul-2019 11:04:08] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@localhost php-5.6.32]# service php-fpm start 開啓php-fpm
Starting php-fpm done
[root@localhost php-5.6.32]# ps aux |grep php-fpm
root 119564 0.0 0.4 125928 4952 ? Ss 11:04 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 119565 0.0 0.4 125928 4708 ? S 11:04 0:00 php-fpm: pool www php-fpm 119566 0.0 0.4 125928 4708 ? S 11:04 0:00 php-fpm: pool www php-fpm 119567 0.0 0.4 125928 4708 ? S 11:04 0:00 php-fpm: pool www php-fpm 119568 0.0 0.4 125928 4708 ? S 11:04 0:00 php-fpm: pool www php-fpm 119569 0.0 0.4 125928 4712 ? S 11:04 0:00 php-fpm: pool www php-fpm 119570 0.0 0.4 125928 4712 ? S 11:04 0:00 php-fpm: pool www php-fpm 119571 0.0 0.4 125928 4712 ? S 11:04 0:00 php-fpm: pool www php-fpm 119572 0.0 0.4 125928 4712 ? S 11:04 0:00 php-fpm: pool www php-fpm 119573 0.0 0.4 125928 4712 ? S 11:04 0:00 php-fpm: pool www php-fpm 119574 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119575 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119576 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119577 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119578 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119579 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119580 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119581 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119582 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119583 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www php-fpm 119584 0.0 0.4 125928 4716 ? S 11:04 0:00 php-fpm: pool www root 119586 0.0 0.0 112724 992 pts/0 R+ 11:05 0:00 grep --color=auto php-fpm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.5 Nginx介紹:
~1.Nginx官網 nginx.org,最新版1.13,最新穩定版(stable)1.12 (俄國人開發的)。他的靜態文件處理能力比Apache強不少。儘可能去選擇最新的穩定版本(stable)。有些會另外安一個nginx來處理靜態文件,好比,tomcat+nginx的Java應用
~2.小巧,功能也很是的強大。自己可能支持的功能不是不少,可是可擴展第三方的模塊進來。好比支持https功能就要安裝模塊。模塊跟Apache都是很相似的,由於框架結構都是同樣的
~3. Nginx應用場景:web服務、反向代理(代理一臺就叫反向代理)、負載均衡(代理兩臺就叫負載均衡)
~4.Nginx著名分支,淘寶(圖片居多)基於Nginx開發的Tengine,使用上和Nginx一致,服務名,配置文件名都同樣,和Nginx的最大區別在於Tenging增長了一些定製化模塊,在安全限速方面表現突出,另外它支持對js,css合併
像淘寶,頁面圖片不少,訪問進去的話,一個頁面請求就會不少。因此淘寶就想到吧這些小的js、css圖片合併起來,一個請求就把他們處理完了。最終就搞了一個Tenging
~5. Nginx核心+lua(一種開發語言)相關的組件和模塊組成了一個支持lua的高性能web容器openresty,參考http://jinnianshilongnian.iteye.com/blog/2280928(做爲擴展)