處理靜態資源: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 |
開發複雜性 | 低 | 中 |
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
(1)支持高併發特性
(2)資源消耗少特性
(3)有負載代理特性
(4)有數據緩存特性
(5)有異步網絡特性
java
(1)支持網站頁面請求處理功能
(2)支持反向代理負載均衡功能
(3)支持前端業務數據緩存功能
node
(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主要目錄
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區域: 判斷信息區域
/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對應的資源。
[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 :從配置文件中設置全局指令
第一步:編寫多個虛擬主機配置文件
[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文件。
(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文件沒有匹配的虛擬主機,回英文字母順序加載第一個虛擬主機
第一步:編寫配置文件 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。谷歌瀏覽器不顯示
(2)生成密碼文件
yum install -y httpd-tools ---生成密文命令軟件 htpasswd -bc /etc/password.txt oldgirl oldboy123 ---第一次建立 htpasswd -b /etc/password.txt oldboy oldboy123 ---添加新的用戶 # -b 免交互輸入密碼 # -c 建立密碼文件
(1)編寫配置文件
vim www.conf location = /basic_status{ stub_status; # 開啓狀態監控功能 }
(2)瀏覽器檢查
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. # 客戶端鏈接請求信息等待處理的數量
(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 日誌災難級別
(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:以下圖標題中的圖標
(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
做用說明:匹配不一樣的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:
在指定目錄信息時, 能夠精準匹配,在指定文件信息時, 不能夠精準匹配
實際應用:能夠靈活管理網站資源路徑信息
跳轉方法:
(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信息 |
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: 用戶訪問/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; 以上兩個均可以
例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; } } }