部署LNMP Nginx+FastCGI 、 Nginx高級技術

案例1:部署LNMP環境
案例2:構建LNMP平臺
案例3:地址重寫
1 案例1:部署LNMP環境
1.1 問題

安裝部署Nginx、MariaDB、PHP環境
安裝部署Nginx、MariaDB、PHP、PHP-FPM;
啓動Nginx、MariaDB、FPM服務;
並測試LNMP是否工作正常。
1.2 方案

在RHEL7系統中,源碼安裝Nginx,使用RPM包安裝MariaDB、PHP、PHP-FPM軟件。
操作過程中需要安裝的軟件列表如下:
nginx
mariadb、mariadb-server、mariadb-devel
php、php-fpm、php-mysql
1.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:安裝軟件

1)使用yum安裝基礎依賴包
[root@proxy ~]# yum -y install gcc openssl-devel pcre-devel zlib-devel
2)源碼安裝Nginx(如果前面課程中已經安裝Nginx,則忽略這一步)
[root@proxy ~]# useradd -s /sbin/nologin nginx
[root@proxy ~]# tar -xvf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \

--user=nginx --group=nginx \
--with-http_ssl_module
[root@proxy ~]# make && make install
.. ..
3)安裝MariaDB
Mariadb在新版RHEL7光盤中包含有該軟件,配置yum源後可以直接使用yum安裝:
[root@proxy ~]# yum -y install mariadb mariadb-server mariadb-devel
4)php和php-fpm(該軟件包在lnmp_soft中提供)
[root@proxy ~]# yum -y install php php-mysql
[root@proxy ~]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm
步驟二:啓動服務

1)啓動Nginx服務(如果已經啓動nginx,則可以忽略這一步)
這裏需要注意的是,如果服務器上已經啓動了其他監聽80端口的服務軟件(如httpd),則需要先關閉該服務,否則會出現衝突。
[root@proxy ~]# systemctl stop httpd //如果該服務存在則關閉該服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx //啓動Nginx服務
[root@proxy ~]# netstat -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx
2)啓動MySQL服務
[root@proxy ~]# systemctl start mariadb //啓動服務器
[root@proxy ~]# systemctl status mariadb //查看服務狀態
[root@proxy ~]# systemctl enable mariadb //設置開機啓動
3)啓動PHP-FPM服務
[root@proxy ~]# systemctl start php-fpm //啓動服務
[root@proxy ~]# systemctl status php-fpm //查看服務狀態
[root@proxy ~]# systemctl enable php-fpm //設置開機啓動
4)設置防火牆與SELinux
[root@proxy ~]# firewall-cmd --set-default-zone=trusted
[root@proxy ~]# setenforce 0
2 案例2:構建LNMP平臺
2.1 問題

沿用練習一,通過調整Nginx服務端配置,實現以下目標:
配置Fast-CGI支持PHP網頁
創建PHP測試頁面,測試使用PHP連接數據庫的效果
2.2 方案

使用2臺RHEL7虛擬機,其中一臺作爲LNMP服務器(192.168.4.5)、另外一臺作爲測試用的Linux客戶機(192.168.4.100),如圖-1所示。

圖-1
Nginx結合FastCGI技術即可支持PHP頁面架構,因此本案例,需要延續練習一的實驗內容,通過修改Nginx及php-fpm配置文件實現對PHP頁面的支持。
2.3 步驟

實現此案例需要按照如下步驟進行。
步驟一: php-fpm配置文件

1)查看php-fpm配置文件(實驗中不需要修改該文件)
[root@proxy etc]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 //PHP端口號
pm.max_children = 32 //最大進程數量
pm.start_servers = 15 //最小進程數量
pm.min_spare_servers = 5 //最少需要幾個空閒着的進程
pm.max_spare_servers = 32 //最多允許幾個進程處於空閒狀態
步驟二:修改Nginx配置文件並啓動服務

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
#設置默認首頁爲index.php,當用戶在瀏覽器地址欄中只寫域名或IP,不說訪問什麼頁面時,服務器會把默認首頁index.php返回給用戶
}
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000; #將請求轉發給本機9000端口,PHP解釋器
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態纔可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步驟三:創建PHP頁面,測試LNMP架構能否解析PHP頁面

1)創建PHP測試頁面1,可以參考lnmp_soft/php_scripts/test.php:
[root@proxy ~]# vim /usr/local/nginx/html/test1.php
<?php
$i="This is a test Page";
echo $i;
?>
2)創建PHP測試頁面,連接並查詢MariaDB數據庫。
可以參考lnmp_soft/php_scripts/mysql.php:
[root@proxy ~]# vim /usr/local/nginx/html/test2.php
<?php
$mysqli = new mysqli('localhost','root','密碼','mysql');
//注意:root爲mysql賬戶名稱,密碼需要修改爲實際mysql密碼,無密碼則留空即可
if (mysqli_connect_errno()){
die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
printf("Host:%s",$row[0]);
printf("</br>");
printf("Name:%s",$row[1]);
printf("</br>");
}
?>
3)客戶端使用瀏覽器訪問服務器PHP首頁文檔,檢驗是否成功:
[root@client ~]# firefox http://192.168.4.5/test1.php
[root@client ~]# firefox http://192.168.4.5/test2.php
4)LNMP常見問題
Nginx的默認訪問日誌文件爲/usr/local/nginx/logs/access.log
Nginx的默認錯誤日誌文件爲/usr/local/nginx/logs/error.log
PHP默認錯誤日誌文件爲/var/log/php-fpm/www-error.log
如果動態網站訪問失敗,可用參考錯誤日誌,查找錯誤信息。
3 案例3:地址重寫
3.1 問題

沿用練習二,通過調整Nginx服務端配置,實現以下目標:
所有訪問a.html的請求,重定向到b.html;
所有訪問192.168.4.5的請求重定向至www.tmooc.cn;
所有訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面;
實現firefox與curl訪問相同頁面文件,返回不同的內容。
3.2 方案

關於Nginx服務器的地址重寫,主要用到的配置參數是rewrite:
rewrite regex replacement flag
rewrite 舊地址 新地址 [選項]
3.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:修改配置文件(訪問a.html重定向到b.html)

1)修改Nginx服務配置:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html;
}
}
[root@proxy ~]# echo "BB" > /usr/local/nginx/html/b.html
2)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客戶端測試
[root@client ~]# firefox http://192.168.4.5/a.html
步驟二:訪問a.html重定向到b.html(跳轉地址欄)

1)修改Nginx服務配置:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html redirect;
}
}
2)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態纔可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端測試(仔細觀察瀏覽器地址欄的變化)
[root@client ~]# firefox http://192.168.4.5/a.html
步驟三:修改配置文件(訪問192.168.4.5的請求重定向至www.tmooc.cn)

1) 修改Nginx服務配置
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.tmooc.cn/;
location / {
root html;
index index.html index.htm;

rewrite /a.html /b.html redirect;

}
}
2)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態纔可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端測試(真實機測試,真實機纔可以連接tmooc)
[root@room9pc01 ~]# firefox http://192.168.4.5
步驟四:修改配置文件(訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面)

1) 修改Nginx服務配置
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
rewrite ^/(.*)$ http://www.tmooc.cn/$1;
location / {
root html;
index index.html index.htm;

rewrite /a.html /b.html redirect;

}
}
2)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態纔可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端測試(真實機測試,真實機纔可以連接tmooc)
[root@room9pc01 ~]# firefox http://192.168.4.5
[root@room9pc01 ~]# firefox http://192.168.4.5/test
步驟五:修改配置文件(實現curl和火狐訪問相同鏈接返回的頁面不同)
1) 創建網頁目錄以及對應的頁面文件:
[root@proxy ~]# echo "I am Normal page" > /usr/local/nginx/html/test.html
[root@proxy ~]# mkdir -p /usr/local/nginx/html/firefox/
[root@proxy ~]# echo "firefox page" > /usr/local/nginx/html/firefox/test.html
2) 修改Nginx服務配置
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#這裏,~符號代表正則匹配,符號代表不區分大小寫
if ($http_user_agent ~
firefox) { //識別客戶端firefox瀏覽器
rewrite ^(.*)$ /firefox/$1;
}
}
3)重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態纔可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
4)客戶端測試
[root@client ~]# firefox http://192.168.4.5/test.html
[root@client ~]# curl http://192.168.4.5/test.html
5)地址重寫格式【總結】
rewrite 舊地址 新地址 [選項];
last 不再讀其他rewrite
break 不再讀其他語句,結束請求
redirect 臨時重定向
permament 永久重定向

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