html重定向頁面(jquery重定向頁面)
作者:京東物流 殷世杰
Nginx已經(jīng)廣泛應(yīng)用于J-one和Jdos的環(huán)境部署上,本文對Nginx的常用的配置和基本功能進(jìn)行講解,適合Nginx入門學(xué)習(xí)。
1 核心配置
找到Nginx安裝目錄下的conf目錄下nginx.conf文件,Nginx的基本功能配置是由它提供的。
1.1 配置文件結(jié)構(gòu)
Nginx的配置文件(conf/nginx.conf)整體上分為如下幾個部分:
區(qū)域
職責(zé)
全局塊
配置和Nginx運(yùn)行相關(guān)的全局配置
events塊
配置和網(wǎng)絡(luò)鏈接相關(guān)的配置
http塊
配置代理、緩存、日志記錄、虛擬主機(jī)等配置
server塊
配置虛擬主機(jī)的相關(guān)參數(shù),一個http快中可以有多個server塊
location塊
配置請求的路由,以及各種頁面的處理情況
配置層級圖如下所示。
1.2 配置文件示例
一個比較全的配置文件示例如下。
# 以下是全局段配置
#user administrator administrators; #配置用戶或者組,默認(rèn)為nobody nobody。
#worker_processes 2; #設(shè)置進(jìn)程數(shù),默認(rèn)為1
#pid /nginx/pid/nginx.pid; #指定nginx進(jìn)程運(yùn)行文件存放地址
展開全文
error_log log/error.log debug; #制定日志路徑,級別:debug|info|notice|warn|error|crit|alert|emerg
# events段配置信息
events {
accept_mutex on; #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on
multi_accept on; #設(shè)置一個進(jìn)程是否同時接受多個網(wǎng)絡(luò)連接,默認(rèn)為off
#use epoll; #事件驅(qū)動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大連接數(shù),默認(rèn)為512
}
# http、配置請求信息
http {
include mime.types; #文件擴(kuò)展名與文件類型映射表
default_type application/octet-stream; #默認(rèn)文件類型,默認(rèn)為text/plain
#access_log off; #取消服務(wù)日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
access_log log/access.log myFormat; #combined為日志格式的默認(rèn)值
sendfile on; #允許sendfile方式傳輸文件,默認(rèn)為off,可以在http塊,server塊,location塊。
sendfile_max_chunk 100k; #每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認(rèn)為0,即不設(shè)上限。
keepalive_timeout 65; #連接超時時間,默認(rèn)為75s,可以在http,server,location塊。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
error_page 404 https://www.baidu.com; #錯誤頁
# 第一個Server區(qū)塊開始,表示一個獨(dú)立的虛擬主機(jī)站點(diǎn)
server {
keepalive_requests 120; #單連接請求上限次數(shù)。
listen 4545; #監(jiān)聽端口
server_name 127.0.0.1; #監(jiān)聽地址
location ~*^.+$ { #請求的url過濾,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。
#root path; #根目錄
#index vv.txt; #設(shè)置默認(rèn)頁
proxy_pass http://mysvr; #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
}
}
1.3 locat路徑映射講解
1.3.1格式:
location [ = | ~ | ~* | !~ | !~* | @ ] uri {...}
1.3.2解釋:
= 表示精確匹配,如果找到,立即停止搜索并立即處理此請求。
~ 表示執(zhí)行一個正則匹配,區(qū)分大小寫匹配
~* 表示執(zhí)行一個正則匹配,不區(qū)分大小寫匹配
!~ 區(qū)分大小寫不匹配
!~* 不區(qū)分大小寫不匹配
^~ 即表示只匹配普通字符(空格)。使用前綴匹配,^表示“非”,即不查詢正則表達(dá)式。如果匹配成功,則不再匹配其他location。
@ 指定一個命名的location,一般只用于內(nèi)部重定向請求。例如 error_page, try_files
uri 是待匹配的請求字符串,可以不包含正則表達(dá)式,也可以包含正則表達(dá)式;
1.3.3優(yōu)先級和示例:
[不加] [~/~*] [^~] [=]
示例如下:
location = / {
# 精確匹配/,主機(jī)名后面不能帶任何字符串 /
# 只匹配http://abc.com
# http://abc.com [匹配成功]
# http://abc.com/index [匹配失敗]
}
location ^~ /img/ {
#以 /img/ 開頭的請求,都會匹配上
#http://abc.com/img/a.jpg [成功]
#http://abc.com/img/b.mp4 [成功]
}
location ~* /Example/ {
# 則會忽略 uri 部分的大小寫
#http://abc.com/test/Example/ [匹配成功]
#http://abc.com/example/ [匹配成功]
}
location /documents {
# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。
#http://abc.com/documentsabc [匹配成功]
}
location / {
#http://abc.com/abc [匹配成功]
}
2 反向代理
2.1 反向代理概念:
反向代理(Reverse Proxy)是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端。真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺代理服務(wù)器,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時又跟真實(shí)服務(wù)器在同一個網(wǎng)絡(luò)環(huán)境,當(dāng)然也可能是同一臺服務(wù)器,端口不同而已。
反向代理通過proxy_pass指令來實(shí)現(xiàn)。
2.2 反向代理示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host:$server_port;#為請求頭添加Host字段,用于指定請求服務(wù)器的域名/IP地址和端口號。
# 設(shè)置用戶ip地址
proxy_set_header X-Forwarded-For $remote_addr;#為請求頭添加XFF字段,值為客戶端的IP地址。
# 當(dāng)請求服務(wù)器出錯去尋找其他服務(wù)器
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
當(dāng)我們訪問localhost的時候,ngnix就將我們的請求轉(zhuǎn)到 localhost:8081了
3 負(fù)載均衡
3.1 負(fù)載均衡概念:
當(dāng)有2臺或以上服務(wù)器時,代理服務(wù)器根據(jù)規(guī)則將請求分發(fā)到指定的服務(wù)器上處理。
3.2 負(fù)載均衡策略及示例:
Nginx目前支持多種負(fù)載均衡策略,這里講解常用的6種。
3.2.1RR(round robin :輪詢 默認(rèn)):
每個請求按時間順序逐一分配到不同的后端服務(wù)器,也就是說第一次請求分配到第一臺服務(wù)器上,第二次請求分配到第二臺服務(wù)器上,如果只有兩臺服務(wù)器,第三次請求繼續(xù)分配到第一臺上,這樣循環(huán)輪詢下去,也就是服務(wù)器接收請求的比例是 1:1, 如果后端服務(wù)器down掉,能自動剔除。輪詢是默認(rèn)配置,不需要太多的配置
同一個項(xiàng)目分別使用8081和8082端口啟動項(xiàng)目
upstream web_servers {
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host:$server_port;
}
3.2.2 熱備:
假設(shè)有2臺服務(wù)器,當(dāng)一臺服務(wù)器發(fā)生事故時,才啟用第二臺服務(wù)器給提供服務(wù)。服務(wù)器處理請求的順序:AAAAAA突然A掛了,服務(wù)器處理請求的順序:BBBBBBBBBBBBBB.....
upstream web_servers {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
3.2.3 權(quán)重
跟據(jù)配置的權(quán)重的大小而分發(fā)給不同服務(wù)器不同數(shù)量的請求。如果不設(shè)置,則默認(rèn)為1。下面服務(wù)器的請求順序?yàn)椋篈BBABBABBABBABB....。
upstream web_servers {
server localhost:8081 weight=1;
server localhost:8082 weight=2;
}
3.2.4 ip_hash
這樣每個ip地址固定訪問一個后端服務(wù)器,可以解決session的問題。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
3.2.5 fair(第三方)
按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。這個配置是為了更快的給用戶響應(yīng)。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
3.2.6 url_hash(第三方)
按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。在upstream中加入hash語句,hash_method是使用的hash算法
upstream backend {
hash_method crc32;
hash $request_uri;
server localhost:8080;
server localhost:8081;
}
以上6種負(fù)載均衡各自適用不同情況下單獨(dú)或者混合使用,可以根據(jù)實(shí)際情況選擇使用,fair和url_hash需要安裝第三方模塊才能使用。
4 動靜分離:
4.1 動靜分離概念:
動靜分離是指在web服務(wù)器架構(gòu)中,將靜態(tài)頁面與動態(tài)頁面或者靜態(tài)內(nèi)容接口和動態(tài)內(nèi)容接口分開不同系統(tǒng)訪問的架構(gòu)設(shè)計(jì)方法,進(jìn)而提升整個服務(wù)訪問性能和可維護(hù)性。
4.2 動靜分離示例:
upstream web_servers {
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name localhost;
set $doc_root /usr/local/var/www;
location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
root $doc_root/img;
}
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host:$server_port;
}
error_page 500 502 503 504 /50x.html; #出現(xiàn) 500 502 503 504錯誤時走內(nèi)部跳轉(zhuǎn)
location = /50x.html {
root $doc_root;
}
}
結(jié)果:訪問http://localhost/test.jpg時直接返回/usr/local/var/www/img路徑下的圖片.
訪問http://localhost/index.html就會訪問后端服務(wù)器(tomcat等)
5 其他常用的指令:
5.1.return指令
返回http狀態(tài)碼和可選的第二個參數(shù)可以是重定向的URL
return code [text];
return code URL;
return URL;
例如:
location / {
return 404; # 直接返回狀態(tài)碼
}
location / {
return 404 "pages not found"; # 返回狀態(tài)碼 + 一段文本
}
location / {
return 302 /bbs ; # 返回狀態(tài)碼 + 重定向地址
}
location / {
return https://www.baidu.com ; # 返回重定向地址
}
5.2 rewrite指令
重寫URI請求 rewrite,通過使用rewrite指令在請求處理期間多次修改請求URI,該指令具有一個可選參數(shù)和兩個必需參數(shù)。
第一個(必需)參數(shù)是請求URI必須匹配的正則表達(dá)式。
第二個參數(shù)是用于替換匹配URI的URI。
可選的第三個參數(shù)重寫策略
last 重寫后的 URL 發(fā)起新請求,再次進(jìn)入 server 段,重試 location 的中的匹配;
break 直接使用重寫后的 URL ,不再匹配其它 location 中語句;
redirect 返回302臨時重定向;
permanent 返回301永久重定向;
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}
5.3 error_page指令
使用error_page指令,您可以配置NGINX返回自定義頁面以及錯誤代碼,替換響應(yīng)中的其他錯誤代碼,或?qū)g覽器重定向到其他URI。在以下示例中,error_page指令指定要返回404頁面錯誤代碼的頁面(/404.html)。
server{
error_page 500 502 503 504 /50x.html;
location =/50x.html{
root html;
}
}
5.4 日志
訪問日志:需要開啟壓縮 gzip on; 否則不生成日志文件,打開log_format、access_log注釋
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 /usr/local/etc/nginx/logs/host.access.log main;
gzip
5.5 deny 、allow指令
#禁止訪問某個目錄
location / {
allow 192.168.0.0;
allow 127.0.0.1;
deny all;
#這段配置值允許192.168.0./24網(wǎng)段和127.0.0.1的請求,其他來源IP全部拒絕。
}
5.6 內(nèi)置變量
nginx的配置文件中可以使用的內(nèi)置變量以美元符$開始。其中,大部分預(yù)定義的變量的值由客戶端發(fā)送攜帶。
$args :#這個變量等于請求行中的參數(shù),同$query_string
$content_length :請求頭中的Content-length字段。
$content_type :請求頭中的Content-Type字段。
$document_root :當(dāng)前請求在root指令中指定的值。
$host :請求行的主機(jī)名,為空則為請求頭字段 Host 中的主機(jī)名,再為空則與請求匹配的server_name
$http_user_agent :客戶端agent信息
$http_cookie :客戶端cookie信息
$limit_rate :這個變量可以限制連接速率。
$request_method :客戶端請求的動作,通常為GET或POST。
$remote_addr :客戶端的IP地址。
$remote_port :客戶端的端口。
$remote_user :已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名。
$request_filename :當(dāng)前請求的文件路徑,由root或alias指令與URI請求生成。
$scheme :HTTP方法(如http,https)。
$server_protocol :請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr :服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值。
$server_name :服務(wù)器名稱。
$server_port :請求到達(dá)服務(wù)器的端口號。
$request_uri :包含請求參數(shù)的原始URI,不包含主機(jī)名,如:”/foo/bar.php?arg=baz”。
$uri :不帶請求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”。
$document_uri :與$uri相同
6 總結(jié)
Ngnix是一款高性能反向代理服務(wù)器,學(xué)習(xí)它非常有必要,本文講解了Ngnix核心配置,介紹了反向代理,負(fù)載均衡,動靜分離三大功能,最后擴(kuò)展了一些常用的指令。本文介紹了Ngnix的基礎(chǔ)用法,后續(xù)的Ngnix內(nèi)核以及原理部分有待研究。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。