Nginx day02

NSD OPERATION DAY02

目錄

1 案例1:部署LNMP環境

2 案例2:構建LNMP平臺

3 案例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

備註:mariadb(數據庫客戶端軟件)、mariadb-server(數據庫服務器軟件)、mariadb-devel(其他客戶端軟件的依賴包)、php(解釋器)、php-fpm(進程管理器服務)、php-mysql(PHP的數據庫擴展包)。

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 restart 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服務端配置,實現以下目標:

  1. 配置Fast-CGI支持PHP網頁
  2. 創建PHP測試頁面,測試使用PHP連接數據庫的效果

2.2 方案

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

Nginx結合FastCGI技術即可支持PHP頁面架構,如圖-2所示。

因此本案例,需要延續練習一的實驗內容,通過修改Nginx及php-fpm配置文件實現對PHP頁面的支持。

注意,FastCGI的內存消耗問題,一個PHP-FPM解釋器將消耗約25M的內存。

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服務端配置,實現以下目標:

  1. 所有訪問a.html的請求,重定向到b.html;
  2. 所有訪問192.168.4.5的請求重定向至www.tmooc.cn;
  3. 所有訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面;
  4. 實現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 永久重定向

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