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下就可以進行訪問了