1. 程式人生 > >部署LNMP Nginx+FastCGI 、 Nginx高階技術

部署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 方案

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

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

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

[email protected] nginx-1.12.2]# ./configure \

–user=nginx --group=nginx –with-http_ssl_module [[email protected] ~]# make && make install … … 3)安裝MariaDB Mariadb在新版RHEL7光碟中包含有該軟體,配置yum源後可以直接使用yum安裝: [[email protected] ~]# yum -y install mariadb mariadb-server mariadb-devel 4)php和php-fpm(該軟體包在lnmp_soft中提供) [

[email protected] ~]# yum -y install php php-mysql [[email protected] ~]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm 步驟二:啟動服務

1)啟動Nginx服務(如果已經啟動nginx,則可以忽略這一步) 這裡需要注意的是,如果伺服器上已經啟動了其他監聽80埠的服務軟體(如httpd),則需要先關閉該服務,否則會出現衝突。 [[email protected] ~]# systemctl stop httpd //如果該服務存在則關閉該服務 [[email protected] ~]# /usr/local/nginx/sbin/nginx //啟動Nginx服務 [[email protected] ~]# netstat -utnlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx 2)啟動MySQL服務 [[email protected] ~]# systemctl start mariadb //啟動伺服器 [[email protected] ~]# systemctl status mariadb //檢視服務狀態 [[email protected] ~]# systemctl enable mariadb //設定開機啟動 3)啟動PHP-FPM服務 [[email protected] ~]# systemctl start php-fpm //啟動服務 [[email protected] ~]# systemctl status php-fpm //檢視服務狀態 [[email protected] ~]# systemctl enable php-fpm //設定開機啟動 4)設定防火牆與SELinux [[email protected] ~]# firewall-cmd --set-default-zone=trusted [[email protected] ~]# 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所示。 在這裡插入圖片描述 Nginx結合FastCGI技術即可支援PHP頁面架構,如圖-2所示。 在這裡插入圖片描述 因此本案例,需要延續練習一的實驗內容,通過修改Nginx及php-fpm配置檔案實現對PHP頁面的支援。 注意,FastCGI的記憶體消耗問題,一個PHP-FPM直譯器將消耗約25M的記憶體。 2.3 步驟

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

1)檢視php-fpm配置檔案(實驗中不需要修改該檔案) [[email protected] 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配置檔案並啟動服務

[[email protected] ~]# 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 documentrootdocument_rootfastcgi_script_name; include fastcgi.conf; } [[email protected] ~]# /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: [[email protected] ~]# 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: [[email protected] ~]# 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(""); printf("Name:%s",$row[1]); printf(""); } ?>

3)客戶端使用瀏覽器訪問伺服器PHP首頁文件,檢驗是否成功: [[email protected] ~]# firefox http://192.168.4.5/test1.php [[email protected] ~]# 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服務配置: [[email protected] ~]# 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; } } [[email protected] ~]# echo “BB” > /usr/local/nginx/html/b.html 2)重新載入配置檔案 [[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload 3)客戶端測試 [[email protected] ~]# firefox http://192.168.4.5/a.html 步驟二:訪問a.html重定向到b.html(跳轉位址列)

1)修改Nginx服務配置: [[email protected] ~]# 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)重新載入配置檔案 [[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload #請先確保nginx是啟動狀態才可以執行命令成功,否則報錯,報錯資訊如下: #[error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory) 3)客戶端測試(仔細觀察瀏覽器位址列的變化) [[email protected] ~]# firefox http://192.168.4.5/a.html 步驟三:修改配置檔案(訪問192.168.4.5的請求重定向至www.tmooc.cn)

  1. 修改Nginx服務配置 [[email protected] ~]# 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)重新載入配置檔案 [[email protected] ~]# /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) [[email protected] ~]# firefox http://192.168.4.5 步驟四:修改配置檔案(訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面)

  1. 修改Nginx服務配置 [[email protected] ~]# 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)重新載入配置檔案 [[email protected] ~]# /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) [[email protected] ~]# firefox http://192.168.4.5 [[email protected] ~]# firefox http://192.168.4.5/test 步驟五:修改配置檔案(實現curl和火狐訪問相同連結返回的頁面不同)

  1. 建立網頁目錄以及對應的頁面檔案: [[email protected] ~]# echo “I am Normal page” > /usr/local/nginx/html/test.html [[email protected] ~]# mkdir -p /usr/local/nginx/html/firefox/ [[email protected] ~]# echo “firefox page” > /usr/local/nginx/html/firefox/test.html
  2. 修改Nginx服務配置 [[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf … … server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } #這裡,~符號代表正則匹配,*符號代表不區分大小寫 if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …器 rewrite ^(.*) /firefox/$1; } } 3)重新載入配置檔案 [[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload #請先確保nginx是啟動狀態才可以執行命令成功,否則報錯,報錯資訊如下: #[error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory) 4)客戶端測試 [[email protected] ~]# firefox http://192.168.4.5/test.html [[email protected] ~]# curl http://192.168.4.5/test.html 5)地址重寫格式【總結】 rewrite 舊地址 新地址 [選項]; last 不再讀其他rewrite break 不再讀其他語句,結束請求 redirect 臨時重定向 permament 永久重定向