1. 程式人生 > >LNMP部署(地址重寫)

LNMP部署(地址重寫)

LNMP及地址重寫學習

location 作用:
可以有多個
會匹配地址欄裏的擴展地址進行匹配
支持正則: ~ .php$ 代表正則匹配 模糊匹配 以.php結尾的地址

格式
rewrite 舊地址 新地址 選項
rewrite regex replacement flag

選項flag可以是如下參數
last
停止執行其他重寫規則,根據url繼續搜索其他location,地址欄不改變

break
停止執行其他重寫規則,完成本次請求

redirect
302臨時重定向地,址欄改變,爬蟲不更新url

permanent
301永久重定向,地址欄改變,爬蟲更新url

rewrite a b last;防止來回跳轉
rewrite b a;

正則表達式
區分大小寫匹配 ~
不區分大小寫匹配 ~
區分大小寫不匹配 !~
不區分大小寫不匹配 !~

判斷文件是否存在 -f
判斷目錄是否存在 -d
判斷文件是否可執行 -x
判斷文件目錄連接是否存在 -e

域名跳轉 #server裏location外
server_name www.360buy.com;
rewrite ^/(.*) http://www.jd.com/$1;
location / {

也面跳轉 #location裏
location / {
if ( $http_user_agent ~ firefox ) {
rewrite ^(.
)$ /test$1 break;

}


LNMP 動態網站
L linux
N Nginx
M mysql mariadb
P 網站開發語言 PHP Perl Python...

安裝的軟件列表如下:
nginx
mariadb、mariadb-server、mariadb-devel
php、php-fpm、php-mysql

#yum -y install mariadb mariadb-server
#yum -y install mariadb-devel
#yum -y install php php-mysql
#rpm -ivh php-fpm-5.4.16-36.el7_1.x86_64.rpm 服務端口9000

起服務
#nginx #端口80

#systemctl start php-fpm #端口9000
#systemctl start mariadb #端口3306

開機啟動目錄 /usr/lib/systemd/system/

nginx 相關配置
源文件裏有模版 需要修改
#vim /usr/local/nginx/conf/nginx.conf
......
location ~ .php$ {
root html; #頁面目錄
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf; #包含的子配置文件
}
......

location 作用:
可以有多個
會匹配地址欄裏的擴展地址進行匹配
支持正則: ~ .php$ 代表正則匹配 模糊匹配 以.php結尾的地址


模版
wordpress PHP
織夢 PHP
帝國 PHP
php-fpm配置文件
#vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

創建PHP測試頁面1:
#vim /usr/local/nginx/html/test1.php
<?php
$i="This is a test Page";
echo $i;
?>

創建PHP測試頁面2,連接MariaDB數據庫:
#vim /usr/local/nginx/html/test2.php
<?php
$links=mysql_connect("localhost","root","密碼");
//註意:root為mysql賬戶名稱,密碼需要修改為實際mysql密碼,無密碼則留空即可
if($links){
echo "link db ok!!!";
}
else{
echo "link db no!!!";
}
?>

創建PHP測試頁面3,連接並查詢MariaDB數據庫:
#vim /usr/local/nginx/html/test3.php
<?php
$mysqli = new mysqli(‘localhost‘,‘root‘,‘‘,‘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>");
}
?>

測試
#firefox http://192.168.4.5/test1.php
#firefox http://192.168.4.5/test2.php
#firefox http://192.168.4.5/test3.php


地址重寫:

格式
rewrite 舊地址 新地址 選項
rewrite regex replacement flag

選項flag可以是如下參數
last
停止執行其他重寫規則,根據url繼續搜索其他location,地址欄不改變

break
停止執行其他重寫規則,完成本次請求

redirect
302臨時重定向地,址欄改變,爬蟲不更新url

permanent
301永久重定向,地址欄改變,爬蟲更新url

rewrite a b last;
rewrite b a;

頁面的跳轉
註意位置 在location裏面
#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;
}
}

#redirect 客戶端顯示跳轉
是支持正則的 a.html的.(點)也算任意單個字符
a.html文件不需要存在

域名的跳轉

訪問www.360buy.com跳轉到www.jd.com
註意位置 server裏面location外面
#vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name www.360buy.com;
rewrite ^/(.*) http://www.jd.com/$1;
location / {
root html;
index index.html index.htm;

}
}

訪問www.nidama.com跳轉到www.nidaye.com

#vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.nidama.com;

    rewrite ^/(.*) http://www.nidaye.com/$1;
    location / {
        root   html;
        index  index.html index.htm;
    }
}
server {
    listen       80;
    server_name  www.nidaye.com;
    location / {
        root   html;
        index  index.html index.htm;
    }
}

註 rewrite ^/(.) http://www.jd.com/$1;
(.
)代表保留擴展域名後面的$1就代表前面的擴展域名
實現只跳轉 域名 不影響子網頁

charset utf-8; #萬國解碼 支持中文顯示

正則表達式
區分大小寫匹配 ~
不區分大小寫匹配 ~
區分大小寫不匹配 !~
不區分大小寫不匹配 !~

判斷文件是否存在 -f
判斷目錄是否存在 -d
判斷文件是否可執行 -x
判斷文件目錄連接是否存在 -e

server {
   listen  80;
   server_name www.test.com;

location / {
        root   html;
        index  index.html;
    }
if ($http_user_agent ~* curl){
        rewrite ^(.*)$ /test$1;
    }
}

根 是當匹配不到後默認匹配的路徑 根的優先級最低
location / {
root html;
index index.htm;

##################################################################

實驗總結:

對IP先做域名跳轉 後做頁面跳轉 之後再皮匹配閱覽器訪問不同樣式的頁面。

IP-->www.test.com-->將訪問a.html(不存在)跳轉至b.html-->firefox 閱覽器第一版版 ,其他閱覽器第一版

#ls
index.html test01 test02
test01]# ls #二版頁面
b.html inde.html
test02]# ls #一版頁面
b.html inde.html

#vim /usr/local/nginx/conf/nginx.conf
...
server {
listen 80;
server_name localhost;

    rewrite ^/(.*) http://www.test.com/$1 break;

    location / {
        root   html;
        index  index.html index.htm;
    }

...
server {
listen 80;
server_name www.test.com;

location / {
    root    html;
    index   inde.html;

if ( $request_uri = "/" ) {      #擴展頁面啥也不輸入會跳轉一個頁面
    rewrite / /index.html break;
    }

    rewrite /a.html /b.htmlredirect;    #將擴展名a改b訪問

if ( $http_user_agent ~* firefox ) {    #客戶端為火狐跳到一版頁面
    rewrite ^/(.*) /test01/$1 break;
    }
if ( $http_user_agent ~* curl ) {   #客戶端為curl跳到二版頁面
    rewrite ^/(.*) /test02/$1 break;
    }
}
}

nginx內置變量:

//該段為自定義log輸出樣式函數。配合下面的access_log使用  
//日誌格式設置:  
//$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;  
//$remote_user:用來記錄客戶端用戶名稱;  
//$time_local: 用來記錄訪問時間與時區;  
//$request: 用來記錄請求的url與http協議;  
//$status: 用來記錄請求狀態;成功是200,  
//$body_bytes_sent :記錄發送給客戶端文件主體內容大小;  
//$http_referer:用來記錄從那個頁面鏈接訪問過來的;  
//$http_user_agent:記錄客戶瀏覽器的相關信息  

###################################################################

LNMP部署(地址重寫)