Nginx服務部署

1 企業經常使用網站服務

處理靜態資源:nginx、apache、Lighttpd
處理動態資源:tomcat(java語言編寫)、php(php語言編寫)、python(python語言編寫)
nginx網站服務軟件:
(1)nginx服務程序能力強大:  支持更高併發訪問(靜態資源小文件),佔用資源少(內存)  
(2)nginx服務程序功能強大:  web服務器  負載均衡服務器  緩存服務器(用戶訪問圖片---web服務器(圖片資源緩           存)---nfs)
apache-select(高併發能力較弱)  vs  nginx-epoll(高併發能力較強)
使用的網絡模型: select  epoll
宿管阿姨:
select宿管: 一個一個房間找人 ---遍歷過程
epoll 宿管: 人員登記表           ---快速索引調取數據
幼兒園阿姨:
select阿姨: 一個一個詢問上廁所     ---遍歷過程  
epoll阿姨:  畫個圈,檢查圈裏是否有人想上廁所---回調機制
apache-select和nginx-epoll的技術對比php

指標 select epoll
性能 隨着鏈接數的增長性能急劇降低。處理成千上萬的併發鏈接數,性能不好 隨着鏈接數的增長,性能基本上沒有降低。處理成千上萬鏈接時性能很好
鏈接數 鏈接數有限制,處理的最大鏈接數不超過1024,若是要處理的鏈接數超過1024個,則須要修改FD_SETSIZE宏,並從新編譯 鏈接數無限制
內在處理機制 線性輪詢 回調callback
開發複雜性

2 Nginx

2.1 Nginx軟件介紹

Nginx 是一個開源的,支持高性能、高併發的 WWW服務器和代理服務軟件。它是由俄羅斯人 Igor Sysoev開發的,最初被應用在俄羅斯的大型網站 www.rambler.ru 上,後來做者將源代碼以類BSD許可證的形式開源出來供全球使用。
Nginx因具備高併發(特別是靜態資源)佔用系統資源少等特性,且功能豐富而逐漸流行起來。
在功能應用發麪,Nginx不可是一個優秀的Web服務軟件,還具備反向代理負載均衡功能和緩存服務功能。在反向代理負載均衡功能方面,它相似於大名鼎鼎的LVS負載均衡及Haproxy等專業代理軟件,可是Nginx部署起來更爲簡單、方便;在緩存服務功能方面,它又相似於Squid等專業的緩存服務軟件。
Nginx 能夠運行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等操做系統中。隨着Nginx在國內不少大型網站中的穩定高效運行,近兩年它也逐漸被愈來愈多的中小型網站所使用。當前流行的Nginx Web組合被稱爲LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 裏的 N 取自Nginx 
Nginx 的官方介紹見 http://nginx.org
html

2.2 Nginx軟件概念

提供頁面網站訪問的服務
前端

2.3 Nginx軟件重要特性

(1)支持高併發特性
(2)資源消耗少特性
(3)有負載代理特性
(4)有數據緩存特性
(5)有異步網絡特性
java

2.4 Nginx軟件功能做用

(1)支持網站頁面請求處理功能
(2)支持反向代理負載均衡功能
(3)支持前端業務數據緩存功能
node

2.5 Nginx軟件安裝

(1)yum安裝:歷史穩定版本 python

[root@web03 ~]#yum install -y nginx
#### rpm -e --nodeps nginx 卸載nginx

(2)官方源安裝:最新穩定版本
修改yum源nginx

[root@web03 ~]#vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

下載nginxweb

[root@web03 ~]#yum install -y nginx

(3)編譯安裝:靈活安裝軟件
編譯安裝:將源代碼變爲機器可執行的代碼文件再將執行文件安裝到操做系統裏,纔可使用
下載nginx源碼包正則表達式

[root@web03 ~]#cd /server/tools
[root@web03 ~]#wget http://nginx.org/download/nginx-1.16.0.tar.gz

解決軟件依賴shell

[root@web03 ~]#yum install -y pcre-devel openssl-devel
# pcre-devel:    perl語言兼容正則表達式
# openssl-devel: 實現HTTPS訪問

解壓軟件程序 建立虛擬管理用戶

[root@web03 ~]#tar xf nginx-1.16.0.tar.gz
[root@web03 ~]#useradd -M -s /sbin/nologin www
[root@web03 ~]#cd nginx-1.16.0

編譯配置

./configure --prefix=(軟件安裝目錄)
./configure --user=worker (worker=進程管理用戶)
./configure --group=worker (worker=進程管理用戶組)
./configure --with-http_stub_status_module(狀態監控模塊)
./configure --with-http_ssl_module(實現HTTPs訪問功能)
./configure --without-xxxx   : 編譯配置關閉什麼指定功能
./configure --wiht-xxx       : 編譯設置開啓什麼指定功能

修改編譯配置

./configure --prefix=/application/nginx-1.16
./configure --user=nginx
./configure --group=nginx
./configure --with-http_stub_status_module
./configure --with-http_ssl_module
也能夠一次性執行因此命令
./configure --prefix=/application/nginx-1.16 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

編譯過程:==翻譯過程---使機器識別信息

[root@web03 nginx-1.16.0]#make

編譯安裝:

[root@web03 nginx-1.16.0]#make install

建立軟連接

[root@web03 application]#ln -s /application/nginx-1.16/ /application/nginx
[root@web03 application]#ll
total 0
lrwxrwxrwx 1 root root 24 Jul 31 20:47 nginx -> /application/nginx-1.16/

去除空格和#號開頭的

[root@web03 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf

啓動程序並檢查端口信息

[root@web03 conf]#/application/nginx/sbin/nginx
[root@web03 conf]#ps -ef|grep nginx
root       4881      1  0 20:52 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
nginx      4882   4881  0 20:52 ?        00:00:00 nginx: worker process
root       4884   4830  0 20:53 pts/0    00:00:00 grep --color=auto nginx
[root@web03 conf]#netstat -lntup|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4881/nginx: master

至此。nginx編譯安裝完成
命令加入環境變量
/etc/profile

[root@web03 sbin]#echo 'export PATH=/application/nginx/sbin:$PATH'>>/etc/profile
[root@web03 sbin]#source /etc/profile
[root@web03 sbin]#which nginx
/application/nginx/sbin/nginx

2.6 nginx主要目錄

rpm -ql nginx
QQ圖片20190731083055.png

2.7 nginx站點目錄做用

QQ圖片20190731083108.png

2.8 nginx程序主配置文件說明

master進程:  管理服務是否運行
worker進程:  處理用戶訪問請求
car /etc/nginx/nginx.conf

[root@web01 nginx]#cat nginx.conf
user  nginx;    # 指定worker進程管理用戶
worker_processes  1;    # 指定worker進程數量 進程數量<= 服務器總核心數
error_log  /var/log/nginx/error.log warn;       # 指定錯誤日誌存放路徑
pid        /var/run/nginx.pid;      # 指定程序pid文件存放路徑 記錄進程號
events {
    worker_connections  1024;           # 一個worker進程最大併發處理能力 socket文件 1x1024
}
http {
    include       /etc/nginx/mime.types;        # 加載媒體資源類型文件
    default_type  application/octet-stream; # 默認識別應用類型文件
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  # 訪問日誌文件格式信息
                      '$status $body_bytes_sent "$http_referer" '       
                      '"$http_user_agent" "$http_x_forwarded_for"'; 
    access_log  /var/log/nginx/access.log  main;    # 訪問日誌路徑 調取什麼格式信息 main能夠修改
    sendfile        on;
    keepalive_timeout  65;          # 設置nginx爲長鏈接 65秒鏈接超時
    include /etc/nginx/conf.d/*.conf;       # 加載擴展配置文件
}

nginx配置文件分爲不一樣區域:
(1)主配置區域:服務運行參數信息
(2)事件區域:服務程序性能參數
(3)http區域:配置網站訪問參數
(4)server區域:針對每一個網站進行配置
(5)location區域:匹配信息區域
(6)if區域: 判斷信息區域

2.9 nginx擴展配置文件說明

/etc/nginx/conf.d

[root@web01 conf.d]# grep -vE "#|^$" default.conf >www.conf
[root@web01 conf.d]# cat www.conf 
server {                               --- 能夠配置網站信息  每一個網站==server==每一個虛擬主機
    listen       80;                   --- 網站服務監聽端口# 能夠再這裏寫ip地址
    server_name  www.yang.com;       --- 定義網站主機域名 如www.yang.com
    location / {  
        root   /html/www;              --- 指定站點目錄(存放網站全部資源) 如/html/www
        index  oldboy.jpg index.htm;   --- 首頁文件 如oldboy.jpg
    }
    error_page   500 502 503 504  /lol.jpg;   --- 錯誤頁面優雅顯示 如/lol.jpg
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

客戶端經過域名訪問服務器時會將域名與被解析的ip一同放在請求中。當請求到了nginx中時。nginx會先去匹配ip,若是listen中沒有找到對應的ip,就會經過域名進行匹配,匹配成功之後,再匹配端口。當這三步完成,就會找到對應的server的location對應的資源。

2.10 nginx參數說明

[root@web01 ~]# nginx -h
nginx version: nginx/1.16.0
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
  -?,-h         : this help
  -v            :顯示軟件版本並退出
  -V            :顯示軟件版本和配置參數並退出
  -t            :測試配置文件並退出
  -T            :測試配置文件, 保存所有配置信息並退出
  -q            :在配置測試時, 抑制正確信息輸出
  -s signal     :nginx -s stop:中止程序  nginx -s reload:滑重啓
  -p prefix     :設置加載配置文件路徑(default: /etc/nginx/)                 
  -c filename   :設置加載指定配置文件(default: /etc/nginx/nginx.conf)
  -g directives :從配置文件中設置全局指令

3 企業web服務如何進行配置

3.1 多個虛擬主機配置

第一步:編寫多個虛擬主機配置文件

[root@web01 conf.d]#vim www.conf
  server {
  listen       80;
  server_name  www.oldboy.com;
  location / {
  root   /html/www;
  index  index.html index.htm;
  }
  error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
  }
##########################################################################
[root@web01 conf.d]#vim bbs.conf
 server {
 listen       80;
 server_name  bbs.oldboy.com;
 location / {
 root   /html/bbs;
 index  index.html index.htm;
 }
  error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
 }
##########################################################################
[root@web01 conf.d]#vim blog.conf
server {
listen     80; 
server_name  blog.oldboy.com;
location / {
root   /html/blog;
index  index.html index.htm;
}
 error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
}

第二步:建立站點目錄和首頁文件

[root@web01 conf.d]#mkdir /html{www,bbs.blog} -p
[root@web01 conf.d]# for name in {www,bbs,blog};do echo $name.oldboy.com >/html/$name/index.html;done
[root@web01 conf.d]# for name in {www,bbs,blog};do cat /html/$name/index.html;done
www.oldboy.com
bbs.oldboy.com
blog.oldboy.com

第三步:重啓nginx服務

[root@web01 conf.d]#systemctl restart/reload nginx

nginx配置文件規範:
(1)區域模塊信息,必須有一對花括號
(2)指令信息後面必須有分號
(3)相應指令信息必須放置在正確區塊中
檢查配置文件語法格式

[root@web01 conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

第四步:進行網站頁面訪問測試
配置Windows hosts文件。實際工做中,不能配置本地的hosts文件。

3.2 網站服務訪問方式

(1)基於域名信息訪問
server_name  www.yang.com;

[root@web01 conf.d]#cat www.conf 
  server {
  listen       80;
  server_name  www.yang.com;
  location / {
  root   /html/www;
  index  index.html index.htm;
  }
  error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
  }

(2)基於端口信息訪問
listen       80;

[root@web01 conf.d]#cat www.conf 
  server {
  listen       80;
  server_name  www.yang.com;
  location / {
  root   /html/www;
  index  index.html index.htm;
  }
  error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
  }

(3)基於ip地址信息訪問
準備工做: 主配置文件
include /etc/nginx/conf.d/www.conf;   --- 高可用
listen  10.0.0.7:80;

[root@web01 conf.d]#cat www.conf 
  server {
  listen  10.0.0.7:80;
  server_name  www.yang.com;
  location / {
  root   /html/www;
  index  index.html index.htm;
  }
  error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
  }
  [root@web01 conf.d]#systemctl restart nginx

PS: nginx配置文件中只要涉及到IP地址修改,必須重啓nginx服務,不能平滑重啓
訪問hosts文件沒有匹配的虛擬主機,回英文字母順序加載第一個虛擬主機

3.3 利用nginx服務實現ftp存儲服務器

第一步:編寫配置文件 www.conf

[root@web01 conf.d]#vim www.conf 
server {
     listen            80;
     server_name  www.yang.com;
     location / {
       root   /html/www;
       index  index.html index.htm;
       autoindex  on;    --- 開啓網站站點目錄信息顯示功能
             charset utf-8;    --- 設置中文字符集信息,避免頁面中文出現亂碼
   }
 error_page  404 500 502 503 504  https://www.baidu.com/search/error.html;
  }
  ==========================================
  [root@web01 conf.d]#systemctl restart nginx

第二步:建立站點目錄,將指定的首頁文件刪除

[root@web01 conf.d]#rm index.html -f

第三步:修改媒體資源類型文件 /etc/nginx/mime.types

sed -r '/jpg\;$|gif\;$|txt\;$/s@(.*)@#\1@g' /etc/nginx/mime.types # 將jpg gif txt 註銷
systemctl restart nginx

第四部:對網站頁面信息進行控制
編輯配置文件

[root@web01 conf.d]#vim www.conf
server {
   listen      80;
   server_name  www.yang.com;
   location / {
       root   /html/www;
       index  index.html index.htm;
       autoindex  on;
       charset utf-8;
   }
   location /VIP專區/ {     --- 匹配uri操做
       root   /html/www;
       deny   10.0.0.1;     --- 進行訪問控制
       allow  all;
   }
   error_page 403 404 500 502 503 504  /error.html;
   location = /error.html {
       root /html/www;
   }
   }
  ======================================
[root@web01 conf.d]#systemctl restart nginx

第五步:根據用戶登陸密碼進行控制
(1)修改配置文件

[root@web01 conf.d]#vim /etc/nginx/conf.d/www.conf 
server {
  listen     80;
  server_name  www.yang.com;
  location / {
     root   /html/www;
     index  index.html index.htm;
     autoindex  on;
     charset utf-8;
  }
   location /VIP專區/ { 
      root   /html/www;
      autoindex on;
      charset utf-8;
      auth_basic  yang;
      auth_basic_user_file  /etc/password.txt;
  }
   error_page 403 404 500 502 503 504  /error.html;
   location = /error.html {
       root /html/www;
    }
 }
 # auth_basic             --- 開啓登陸認證功能
 # auth_basic_user_file   --- 指定加載的密碼文件

auth_basic  yang: 再用網站進行登陸時,會顯示來自yang。谷歌瀏覽器不顯示
image.png
(2)生成密碼文件

yum install -y httpd-tools    ---生成密文命令軟件
htpasswd -bc /etc/password.txt oldgirl oldboy123   ---第一次建立
htpasswd -b  /etc/password.txt oldboy oldboy123    ---添加新的用戶
# -b  免交互輸入密碼
# -c  建立密碼文件

4 網站服務狀態監控功能

(1)編寫配置文件

vim www.conf
location = /basic_status{
   stub_status;   #    開啓狀態監控功能
}

(2)瀏覽器檢查
image.png

Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0 
curl www.oldboy.com/basic_status -s|awk 'NR==1{print $3}'  #  取出connections數值:1
Active connections          # 激活鏈接
The current number of active client connections including Waiting connections.
# 客戶端目前鏈接數量/包含等待鏈接   nginx:異步網絡通信模型機制
# 客戶端 ---- 服務端 鏈接達到最大限制,其餘的鏈接放入隊列中等待
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· accepts  接受  
The total number of accepted client connections. # 接受客戶端鏈接總的鏈接數量
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· handled  處理
The total number of handled connections. # 處理客戶端鏈接總的鏈接數量
Generally, the parameter value is the same as accepts unless some resource limits have been reached 
(for example, the worker_connections limit).
# 特殊狀況,到達服務器鏈接限制,也會形成處理數值和接收數值不一致
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· requests (長鏈接)
The total number of client requests. # 總的客戶端請求數量 發送了多個HTTP請求報文
vim /etc/nginx/nginx.conf  
keepalive_timeout  0;    --- 表示短鏈接  
PS: requests數量 == 處理鏈接數量
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· Reading
The current number of connections where nginx is reading the request header.
# 目前讀取用戶請求頭數量, 負載壓力不大時, 數值幾乎0或者1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· Writing
The current number of connections where nginx is writing the response back to the client.
# 目前響應信息發送數量
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
· Waiting  *****
The current number of idle client connections waiting for a request.
# 客戶端鏈接請求信息等待處理的數量

5 網站服務日誌配置

5.1 錯誤日誌:error.log

(1)日誌路徑:/var/log/nginx/error.log
(2)錯誤級別:

[root@web01 nginx]#cat nginx.conf
error_log  /var/log/nginx/error.log warn;
# debug   日誌調試級別、顯示的信息會更多
# info    日誌信息級別  
# notice  日誌通知級別
# warn    日誌警告級別、出現錯誤 ***** 
# error   日誌錯誤級別、服務沒法正常運行 *****
# crit    日誌嚴重級別         
# alert   日誌報警級別、服務程序異常
# emerg   日誌災難級別

5.2 訪問日誌:access.log

(1)日誌路徑:/var/log/nginx/access.log
(2)配置信息:

[root@web01 nginx]#cat nginx.conf
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;

(3)訪問日誌格式信息

10.0.0.1 - - [01/Aug/2019:18:31:23 +0800] "GET /favicon.icoHTTP/1.1" 302 145 "http://bbs.oldgirl.com/" "Mozilla/5.0 #換行
(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"
$remote_addr  10.0.0.1 記錄客戶端源IP地址
$remote_user -(網站有認證功能纔會顯示) 記錄認證用戶信息
[$time_local] [01/Aug/2019:18:31:23 +0800] 記錄訪問網站時間信息
$request GET /favicon.icoHTTP/1.1 記錄請求行信息
$status 302 記錄響應狀態碼信息
$body_bytes_sent 145 記錄響應數據信息流量多少
$http_referer http://bbs.oldgirl.com/ 顯示盜取資源網站信息 
$http_user_agent Chrome/69.0.3497.100 記錄用戶瀏覽器客戶端信息
$http_x_forwarded_for 用於收集用戶真實 IP
favicon.ico 是一個圖標

favicon.ico:以下圖標題中的圖標
image.png
(4)編寫一個簡單的盜鏈代碼文件

[root@web02 bbs]#vim /html/bbs/index.html 
<html>
<meta charset="utf-8">
<head>
<title>一每天教育
</title>
</head>
<body bgcolor=green>
一每天教育博客
<br>一每天教育博客是
<a
href="https://www.cnblogs.com/basa/" target="_blank">博客地址
</a>
<img src="http://www.oldboy.com/oldboy.jpg">
</body>
</html>

(5)awk取訪問日誌流量,換成M(單位)

awk '{i=i+$9}END{print i*8/1024/1024}' /var/log/nginx/access.log

6 網站服務location配置

做用說明:匹配不一樣的uri,作出不一樣處理動做
匹配方式:

~   區分大小寫匹配信息  3
~*  不區分大小寫匹配信息 3
精準匹配 1 匹配優先級最高
^~ 優先匹配信息  2
/yang/---------目錄
/yang.jpg/ ----文件
直接匹配指定uri 4
/ 默認匹配 5

用法說明;:

location ~ /oldboy/ {
      return   200;
}
location ~* \.jpg$  {
      return   301;
}
location = / {
      return   302;
}
location /   {
      return   401;
}
location ^~ /image/ {
     return   403;
}
location /old/  {
     return   501;
}

PS:  
在指定目錄信息時, 能夠精準匹配,在指定文件信息時, 不能夠精準匹配   
實際應用:能夠靈活管理網站資源路徑信息

7 網站頁面跳轉

跳轉方法:
(1)實現uri信息跳轉
(2)實現url信息跳轉
(3)實現https跳轉
(4)實現僞靜態跳轉
跳轉語法:

rewrite: 
Syntax: rewrite regex replacement [flag];
Default:    —
Context:    server, location, if
# regex:       要替換的信息/正則方式匹配
# replacement  替換成什麼信息
# flag:        設置標記

四種flag:

last 相似於shell中continue
stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;
# 實現跳轉以後, 會從新發起訪問,匹配其餘location, 執行相應動做
break 相似於shell中exit
stops processing the current set of ngx_http_rewrite_module directives as with the break directive;
#** 實現跳轉以後, 不會從新發起訪問, 直接到指定站點目錄進行訪問
PS: last、break  實現地址跳轉後, 不會修改uri信息**
redirect  302  應用比較廣  ******
returns a temporary redirect with the 302 code; used if a replacement string does not start with "http://", "https://", or "$scheme";
#redirect 進行臨時跳轉
rewrite.oldboy.com/break/  -->  rewrite.oldboy.com/test01/
rewrite.oldboy.com/break/  -服務端-  rewrite.oldboy.com/test01/ --- web服務器  # 服務端記錄跳轉方式
permanent 301
returns a permanent redirect with the 301 code.
permanent 進行永久跳轉
rewrite.oldboy.com/break/  -->  rewrite.oldboy.com/test/  --- 讓瀏覽器記錄跳轉方式
rewrite.oldboy.com/break/  -瀏覽器-  rewrite.oldboy.com/test/  --- web服務器  
www.360buy.com   ---  www.jd.com  
www.360buy.com  -瀏覽器-  www.jd.com  --- web服務器    
PS: redirect、permanent 實現地址跳轉後, 會修改uri信息

7.1 練習題:last跳轉和break跳轉之間區別

server {
   listen            80;
   server_name       www.oldbaby.com;
   root              /html;
   location  ~ ^/ceshi/ {
       rewrite  ^/ceshi/  /test/  break;
   }
   location  ~ ^/shiyan/  {
       rewrite  ^/shiyan/  /test/  last;
   }
   location   /test/ {
       default_type   application/json;
       return 200 'ok';
   }
}

break在跳轉時,直接去站點目錄(/html)下尋找test,但站點目錄下沒有test,因此會報404
last在跳轉時,去尋找其它的location區域尋找test,其它區域有test,因此會跳轉到test
1.png

7.2 練習題:uri信息跳轉

例1: 用戶訪問/oldboy/oldboy.html實際上真實訪問是/oldboy/oldboy01/oldboy.html
方法一:rewrite

server {
  listen            80;
  server_name       rewrite.oldboy.com;
  location  /  {
     root      /html;
       #rewrite   /oldboy/oldboy.html   /oldboy/oldboy01/oldboy.html  redirect;
       rewrite   (.*)                   /oldboy/oldboy01/oldboy.html  redirect;      
    }
}
# rewrite   /oldboy/oldboy.html   /oldboy/oldboy01/oldboy.html  redirect;
# rewrite   (.*)                   /oldboy/oldboy01/oldboy.html  redirect; 
以上兩個都能實現跳轉

方法二:return

server {
  listen            80;
  server_name       rewrite.oldboy.com;
  location  /  {
    root      /html;
    return   302   http://rewrite.oldboy.com/oldboy/oldboy01/oldboy.html;     
  }
}

例2: 用戶訪問/2014/oldboy/oldgirl/oldboy.html實際上真實訪問是/2018/oldboy/oldgirl/oldboy.html
(1): 建立uri目錄結構信息

mkdir 2014/oldboy/oldgirl/ -p   --- 跳轉前目錄結構
echo oldboy62 >2014/oldboy/oldgirl/oldboy.html
mkdir 2018/oldboy/oldgirl/ -p   --- 跳轉後目錄結構
echo oldboy62 >2018/oldboy/oldgirl/oldboy.html

/2014/oldboy/oldgirl/oldboy.html    /2018/oldboy/oldgirl/oldboy.html
          (.*)$                                $1

(2)編寫配置文件

server {
  listen       80;
  server_name  rewrite.oldboy.com;
  location  /  {
    root      /html;
  }
  location /2014/ {
  rewrite ^/2014/(.*)$ /2018/$1 redirect;
    return  302    http://rewrite.oldboy.com/2018/oldboy/oldgirl/oldboy.html;
  }
}
# rewrite ^/2014/(.*)$ /2018/$1 redirect;
#   return  302    http://rewrite.oldboy.com/2018/oldboy/oldgirl/oldboy.html;
以上兩種都能進行跳轉

例3:用戶訪問/test/lol.html目錄下任何內容, 實際上真實訪問是http://www.oldboy.com/oldboy.html
方式一:
mkdir test
echo yang >/html
編寫配置文件

[root@web01 html]#vim /etc/nginx/conf.d/www.conf 
server {
listen            80;
server_name  rewrite.oldboy.com;
location / {
  root   /html;
}
location /test/{
rewrite ^/test/(.*)$ http://rewrite.oldboy.com/$1 redirect;
  } 
}
systemctl restart nginx

方式二:
mv /html/lol.html /html/test
編寫配置文件

[root@web01 html]#vim /etc/nginx/conf.d/www.conf 
server {
listen            80;
server_name  rewrite.oldboy.com;
location / {
  root   /html/test;
}
location /test/{
rewrite ^/test/(.*)$ http://rewrite.oldboy.com/$1 redirect;
  } 
}
systemctl restart nginx

例4:用戶訪問course-11-22-33.html實際上真實訪問是/course/11/22/33/course_33.html
意思是在瀏覽器上輸入http://rewrite.oldboy.com/course-11-22-33.html,
可是訪問的內容是/course/11/22/33/course_33.html的內容
第一步: 準備站點目錄環境

mkdir  course/11/22/33/ -p
cd course/11/22/33/
echo oldboy62 >course_33.html

第二步:編寫配置文件

[root@web01 33]#vim /etc/nginx/conf.d/www.conf 
server {
  listen            80;
  server_name       rewrite.oldboy.com;
  location  /  {
    root   /html;
   # rewrite ^/course-(.*)-(.*)-(.*)   /course/$1/$2/33/course_$3  last;
   rewrite ^/course-(.*)             /course/11/22/33/course_33.html last;
} 
}
rewrite ^/course-(.*)-(.*)-(.*)   /course/$1/$2/33/course_$3  last;
rewrite ^/course-(.*)             /course/11/22/33/course_33.html last;
以上兩個均可以

7.3 練習題:url信息跳轉

例5: 訪問rewrite.oldboy.com --- www.jd.com 實現域名(url)跳轉
真正跳轉到www.jd.com

root@web01 33]#vim /etc/nginx/conf.d/www.conf 
server { 
  listen            80;
  server_name       rewrite.oldboy.com;
  rewrite  ^/(.*)   http://www.jd.com/$1  redirect;
}

跳轉到本身在本地建立的www.jd.com
方式一:

[root@web01 html]#vim /etc/nginx/conf.d/rewrite.conf 
server { 
   listen            80;
   server_name       rewrite.oldboy.com;
   rewrite  ^/(.*)   http://www.jd.com/$1  redirect;
}
server {
   listen            80;
   server_name       www.jd.com;
   location  /  {
      root      /html;
      index     index.html;
   }
}

方式二:

[root@web01 html]#vim /etc/nginx/conf.d/rewrite.conf 
server {
   listen            80;
   server_name       rewrite.oldboy.com www.jd.com;
   location  /  {
       root      /html;
       index     index.html;
     if ($http_host ~* ^rewrite.oldboy.com$) {
       rewrite  ^/(.*)   http://www.jd.com/$1  redirect;
     }
   }
}
相關文章
相關標籤/搜索