LNMP分離解析

L N M P 分離部署

在這裏插入圖片描述

什麼是CGI

CGI的全稱爲“通用網關接口" (Common Gateway Interface),爲HTTP服務器與其他機器上的程序服務通信交流的一種工具,CGI程序必須運行在網絡服務器上。
傳統CGI接口方式的主要缺點是性能較差,因爲每次HTTP服務器遇到動態程序時都需要重新啓動解析器來執行解析,之後結果纔會被返網給HTTP服務器 這在處理高併發訪問時幾乎是不可用的,因此就誕生了FastCGl 另外,傳統的CGI接口方式安全性也很差,所以現在已經很少被使用了。

什麼是FastCGI

FastCGI是一個可伸縮地、高速地在HTTP服務器和動態腳本語言間通信的接口(在Linux下FastCGI接口即爲socket,這個socket可以是文件socket,也可以是IP socket),主要優點是把動態語言和HTTP服務器外離開來。多數流行的HTTP服務器都支持FastCGI,包括Apache, Nginx和Lighttpd等。
同時FastCGI也被許多腳本語言所支持,例如當前比較流行的腳本語言PHP。FastCGI接口採用的是C/S架構,它可以將HTTP服務器和腳本解析服務器分開,同時還能在腳本解析服務器上啓動一個或多個腳本來解析守護進程。當HTTP服務器遇到動態程序時,可以將其直接交付給FasiCGI進程來執行,然後將得到的結果返回給瀏覽!器這種方式可以讓HTTP服務器專一地處理靜態請求,或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。
FastCGI的重要特點如下:
(1)HTTP服務器和動態腳本語言間通信的接口或工具。
(2)可把動態語言解析和HTTP服務器分離開。
(3)Nginx, Apache, Lighttpd,以及多數動態語言都支持FastCGl。
(4)FastCGI接口方式採用C/S結構,分爲客戶端(HTTP服務器)和服務器端(動態語言解析服務器)。
(5)PHP動態語言服務器端可以啓動多個FastCGI的守護進程(例如php-fpm(fcgiprocess mangement)).
(6)HTTP服務器通過(例如Nginx fastcgi_pass) FastCGI客戶端和動態語言FastCGl服務器端通信(例如 php-fpm)。

Nginx FastCGI 的運行原理

Nginx不支持對外部動態程序的直接調用或者解析,所有的外部程序(包括PHP)必須通過FastCGI接口來調用。FastCGI接口在Linux下是socket,爲了調用CGI程序.還需要一個FastCGl的wrapper (可以理解爲用幹啓動另一個程序的程序),這個wrapper綁定在某個固定的socket上,如端口或文件socket,當Nginx將CGI請求發送給這個socket的時候,通過FastCGI接口, wrapper接收到請求,然後派生出一個新的線程,這個線程調用解釋器或外部程序處理腳本來讀取返回的數據;接着, wrapper再將返回的數據通過FastCG1接口,沿着固定的socket傳遞給Nginx ;最後, Nginx將返回的數據發送給客戶端,這就是Nginx+FastCGI的整個運作過程。

實驗步驟

需要3臺虛擬機分別爲 nginx mysql php

nginx 192.168.1.2(centos)
mysql 192.168.1.3(centos)
PHP 192.168.1.4(centos)

三臺主機需要保證可以互相通訊

NGINX

將nginx源碼包傳到centos上

scp D:\nginx\nginx-1.6.0.tar.gz [email protected]:/root/

安裝依賴環境和Perl庫

yum -y install gcc* perl openssl openssl-devel pcre-devel zlib-devel

創建Nginx用戶與組

groupadd mysql
useradd -M -s /sbin/nologin nginx -g mysql

解壓縮源碼包並進行安裝

tar -zxvf nginx-1.6.0.tar.gz
cd nginx-1.6.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make
make install

優化路徑

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

初始化文件

nginx -t

啓動NGINX服務

nginx

檢查端口是否正常開啓

netstat -anpout  grep 80
MYSQL

將MYSQL源碼包與CMAKE源碼包傳到CENTOS上

scp D:\mysql-5.5.22.tar.gz [email protected]:/root
scp D:\cmake-2.8.7.tar.gz [email protected]:/root

安裝依賴環境

yum -y install gcc*

解壓源碼包並安裝

tar -zxvf cmake-2.8.6.tar.gz -C /usr/src/
cd /usr/src/cmake-2.8.6/
./bootstrap
gmake
gmake install

創建MySQL用戶與組

groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql

解壓MySQL源碼包並進行安裝

tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/
cd /usr/src/mysql-5.5.22/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

發現報錯
按照提示刪除文件並安裝一個依賴包

rm -rf CMakeCache.txt
yum install ncurses-devel -y

重新執行

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
make
make install

優化路徑

ln -s /usr/local/mysql/bin/* /usr/local/bin/

給用戶權限

chown -R mysql:mysql /usr/local/mysql/

刪除配置文件

rm -rf /etc/my.cnf 

將模板複製到etc下

cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

重置一下

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 

設置環境變量

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

重置刷新配置文件

./etc/profile

添加到系統服務

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

給予權限

chmod +x /etc/rc.d/init.d/mysqld

啓動MySQL

service mysqld start

查看端口是否啓動成功

netstat -anput | grep mysqld
PHP

將PHP源碼包拖到CENTOS上

scp D:\php-5.3.28.tar.gz [email protected]:/root

安裝依賴環境

yum -y install gcc* gd libxml2-devel libjpeg-devel libpng-devel

解壓源碼包並進行安裝

tar -zxvf php-5.3.28.tar.gz 
cd php-5.3.28
./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql=mysqlnd  --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php --enable-fpm --enable-mbstring --with-jpeg-dir=/usr/lib

編譯安裝

make && make install

將模板複製到PHP文件夾中去

cp php.ini-development /usr/local/php/php.ini

修改配置文件

vim /usr/local/php/php.ini
default_charset = "utf-l8"
short_open_tag = On

添加啓動項

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

將模板複製到配置文件夾中去

cd /usr/local/php/etc/
mv php-fpm.conf.default php-fpm.conf

修改配置文件

vim php-fpm.conf
pid = run/php-fpm.pid
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

重啓服務

service php-fpm restart

整合PHP與NGXIN

nginx

創建網頁主目錄

mkdir /www

給予權限

chown -R nginx.nginx /www/

修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
location / {
            root   /www;
            index  index.html index.htm index.php;
        }

        location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.1.4:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;

重啓服務

killall -s HUP nginx 
PHP

創建www文件夾

mkdir /www

創建nginx用戶

useradd nginx

給予權限

chown -R nginx.nginx /www

修改php配置文件

vim /usr/local/php/etc/php-fpm.conf
   listen = 192.168.1.4:9000
   user = nginx
   group = nginx

重啓服務

service php-fpm restart

在PHP上建立nfs共享目錄

vim /etc/exports
/www 192.168.1.0/24(rw,no_root_squash,sync)

重啓nfs

service nfs start
NGINX

掛載nfs共享目錄

showmount -e 192.168.1.4
mount -t nfs 192.168.1.4:/www /www

添加一個phpinfo界面用來驗證

vim /www/index.php
   <?php
   phpinfo();
   ?>

訪問本機地址出現php界面就算成功
刪除phpinfo界面

rm -rf /www/index.php

整合MYSQL與PHP

MySQL

進入到數據庫更改設置

mysql -u root –p
grant all on *.* to 'root'@'192.168.1.%' identified by '123.com';
flush privileges;
exit

同樣掛載www文件夾

mount -t nfs 192.168.1.4:/www /www/

之後將網站拖到/www下就可以進行訪問了

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