今天我要一舉拿下Nginx_第1頁(yè)
今天我要一舉拿下Nginx_第2頁(yè)
今天我要一舉拿下Nginx_第3頁(yè)
今天我要一舉拿下Nginx_第4頁(yè)
今天我要一舉拿下Nginx_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

今天,我要一舉拿下Nginx!前言Nginx概述Nginx特點(diǎn)Nginx作用Nginx安裝Nginx常用命令Nginx核心配置配置文件結(jié)構(gòu)配置文件main段核心參數(shù)配置文件events段核心參數(shù)server_name指令rootaliaslocationrewriteif指令autoindex變量Nginx應(yīng)用核心概念正向代理反向代理動(dòng)靜分離負(fù)載均衡Nginx實(shí)戰(zhàn)配置upstreamproxy_pass配置反向代理配置負(fù)載均衡配置緩存HTTPS配置跨域CORS配置開(kāi)啟gzip壓縮Nginx架構(gòu)進(jìn)程結(jié)構(gòu)配置文件重載原理Nginx模塊化管理機(jī)制總結(jié)前言作為一名前端開(kāi)發(fā)人員,你是不是經(jīng)常碰到領(lǐng)導(dǎo)讓你上服務(wù)器去修改

Nginx

配置,然而你會(huì)以“我是前端,這個(gè)我不會(huì)”為理由搪塞過(guò)去呢!今天就讓我們一起告別這種尷尬,向“真正”的程序員邁進(jìn)?。?!如果本文對(duì)你有所幫助,請(qǐng)點(diǎn)個(gè)??????吧!Nginx概述Nginx

是開(kāi)源、高性能、高可靠的

Web

和反向代理服務(wù)器,而且支持熱部署,幾乎可以做到7*24小時(shí)不間斷運(yùn)行,即使運(yùn)行幾個(gè)月也不需要重新啟動(dòng),還能在不間斷服務(wù)的情況下對(duì)軟件版本進(jìn)行熱更新。性能是

Nginx

最重要的考量,其占用內(nèi)存少、并發(fā)能力強(qiáng)、能支持高達(dá)5w個(gè)并發(fā)連接數(shù),最重要的是,

Nginx

是免費(fèi)的并可以商業(yè)化,配置使用也比較簡(jiǎn)單。Nginx特點(diǎn)高并發(fā)、高性能;模塊化架構(gòu)使得它的擴(kuò)展性非常好;異步非阻塞的事件驅(qū)動(dòng)模型這點(diǎn)和

Node.js

相似;相對(duì)于其它服務(wù)器來(lái)說(shuō)它可以連續(xù)幾個(gè)月甚至更長(zhǎng)而不需要重啟服務(wù)器使得它具有高可靠性;熱部署、平滑升級(jí);完全開(kāi)源,生態(tài)繁榮;Nginx作用Nginx的最重要的幾個(gè)使用場(chǎng)景:靜態(tài)資源服務(wù),通過(guò)本地文件系統(tǒng)提供服務(wù);反向代理服務(wù),延伸出包括緩存、負(fù)載均衡等;API

服務(wù),

OpenResty

;對(duì)于前端來(lái)說(shuō)

Node.js

并不陌生,

Nginx

Node.js

的很多理念類似,

HTTP

服務(wù)器、事件驅(qū)動(dòng)、異步非阻塞等,且

Nginx

的大部分功能使用

Node.js

也可以實(shí)現(xiàn),但

Nginx

Node.js

并不沖突,都有自己擅長(zhǎng)的領(lǐng)域。

Nginx

擅長(zhǎng)于底層服務(wù)器端資源的處理(靜態(tài)資源處理轉(zhuǎn)發(fā)、反向代理,負(fù)載均衡等),

Node.js

更擅長(zhǎng)上層具體業(yè)務(wù)邏輯的處理,兩者可以完美組合。用一張圖表示:Nginx安裝本文演示的是

Linux

centOS7.x

的操作系統(tǒng)上安裝

Nginx

,至于在其它操作系統(tǒng)上進(jìn)行安裝可以網(wǎng)上自行搜索,都非常簡(jiǎn)單的。使用

yum

安裝

Nginx

:yum

install

nginx

-y

安裝完成后,通過(guò)

rpm-qlnginx

命令查看

Nginx

的安裝信息:#

Nginx配置文件

/etc/nginx/nginx.conf

#

nginx

主配置文件

/etc/nginx/nginx.conf.default

#

可執(zhí)行程序文件

/usr/bin/nginx-upgrade

/usr/sbin/nginx

#

nginx庫(kù)文件

/usr/lib/systemd/system/nginx.service

#

用于配置系統(tǒng)守護(hù)進(jìn)程

/usr/lib64/nginx/modules

#

Nginx模塊目錄

#

幫助文檔

/usr/share/doc/nginx-1.16.1

/usr/share/doc/nginx-1.16.1/CHANGES

/usr/share/doc/nginx-1.16.1/README

/usr/share/doc/nginx-1.16.1/README.dynamic

/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10

#

靜態(tài)資源目錄

/usr/share/nginx/html/404.html

/usr/share/nginx/html/50x.html

/usr/share/nginx/html/index.html

#

存放Nginx日志文件

/var/log/nginx

主要關(guān)注的文件夾有兩個(gè):/etc/nginx/conf.d/

是子配置項(xiàng)存放處,

/etc/nginx/nginx.conf

主配置文件會(huì)默認(rèn)把這個(gè)文件夾中所有子配置項(xiàng)都引入;/usr/share/nginx/html/

靜態(tài)文件都放在這個(gè)文件夾,也可以根據(jù)你自己的習(xí)慣放在其他地方;Nginx常用命令systemctl

系統(tǒng)命令:#

開(kāi)機(jī)配置

systemctl

enable

nginx

#

開(kāi)機(jī)自動(dòng)啟動(dòng)

systemctl

disable

nginx

#

關(guān)閉開(kāi)機(jī)自動(dòng)啟動(dòng)

#

啟動(dòng)Nginx

systemctl

start

nginx

#

啟動(dòng)Nginx成功后,可以直接訪問(wèn)主機(jī)IP,此時(shí)會(huì)展示Nginx默認(rèn)頁(yè)面

#

停止Nginx

systemctl

stop

nginx

#

重啟Nginx

systemctl

restart

nginx

#

重新加載Nginx

systemctl

reload

nginx

#

查看

Nginx

運(yùn)行狀態(tài)

systemctl

status

nginx

#

查看Nginx進(jìn)程

ps

-ef

|

grep

nginx

#

殺死Nginx進(jìn)程

kill

-9

pid

#

根據(jù)上面查看到的Nginx進(jìn)程號(hào),殺死Nginx進(jìn)程,-9

表示強(qiáng)制結(jié)束進(jìn)程

Nginx

應(yīng)用程序命令:nginx

-s

reload

#

向主進(jìn)程發(fā)送信號(hào),重新加載配置文件,熱重啟

nginx

-s

reopen

#

重啟

Nginx

nginx

-s

stop

#

快速關(guān)閉

nginx

-s

quit

#

等待工作進(jìn)程處理完成后關(guān)閉

nginx

-T

#

查看當(dāng)前

Nginx

最終的配置

nginx

-t

#

檢查配置是否有問(wèn)題

Nginx核心配置配置文件結(jié)構(gòu)Nginx

的典型配置示例:#

main段配置信息

user

nginx;

#

運(yùn)行用戶,默認(rèn)即是nginx,可以不進(jìn)行設(shè)置

worker_processes

auto;

#

Nginx

進(jìn)程數(shù),一般設(shè)置為和

CPU

核數(shù)一樣

error_log

/var/log/nginx/error.log

warn;

#

Nginx

的錯(cuò)誤日志存放目錄

pid

/var/run/nginx.pid;

#

Nginx

服務(wù)啟動(dòng)時(shí)的

pid

存放位置

#

events段配置信息

events

{

use

epoll;

#

使用epoll的I/O模型(如果你不知道Nginx該使用哪種輪詢方法,會(huì)自動(dòng)選擇一個(gè)最適合你操作系統(tǒng)的)

worker_connections

1024;

#

每個(gè)進(jìn)程允許最大并發(fā)數(shù)

}

#

http段配置信息

#

配置使用最頻繁的部分,代理、緩存、日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里設(shè)置

http

{

#

設(shè)置日志模式

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;

#

Nginx訪問(wèn)日志存放位置

sendfile

on;

#

開(kāi)啟高效傳輸模式

tcp_nopush

on;

#

減少網(wǎng)絡(luò)報(bào)文段的數(shù)量

tcp_nodelay

on;

keepalive_timeout

65;

#

保持連接的時(shí)間,也叫超時(shí)時(shí)間,單位秒

types_hash_max_size

2048;

include

/etc/nginx/mime.types;

#

文件擴(kuò)展名與類型映射表

default_type

application/octet-stream;

#

默認(rèn)文件類型

include

/etc/nginx/conf.d/*.conf;

#

加載子配置項(xiàng)

#

server段配置信息

server

{

listen

80;

#

配置監(jiān)聽(tīng)的端口

server_name

localhost;

#

配置的域名

#

location段配置信息

location

/

{

root

/usr/share/nginx/html;

#

網(wǎng)站根目錄

index

index.html

index.htm;

#

默認(rèn)首頁(yè)文件

deny

1;

#

禁止訪問(wèn)的ip地址,可以為all

allow

4;#

允許訪問(wèn)的ip地址,可以為all

}

error_page

500

502

503

504

/50x.html;

#

默認(rèn)50x對(duì)應(yīng)的訪問(wèn)頁(yè)面

error_page

400

404

error.html;

#

同上

}

}

main

全局配置,對(duì)全局生效;events

配置影響

Nginx

服務(wù)器與用戶的網(wǎng)絡(luò)連接;http

配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置;server

配置虛擬主機(jī)的相關(guān)參數(shù),一個(gè)

http

塊中可以有多個(gè)

server

塊;location

用于配置匹配的

uri

;upstream

配置后端服務(wù)器具體地址,負(fù)載均衡配置不可或缺的部分;用一張圖清晰的展示它的層級(jí)結(jié)構(gòu):配置文件main段核心參數(shù)user指定運(yùn)行

Nginx

woker

子進(jìn)程的屬主和屬組,其中組可以不指定。user

USERNAME

[GROUP]

user

nginx

lion;

#

用戶是nginx;組是lion

pid指定運(yùn)行

Nginx

master

主進(jìn)程的

pid

文件存放路徑。pid

/opt/nginx/logs/nginx.pid

#

master主進(jìn)程的的pid存放在nginx.pid的文件

worker_rlimit_nofile_number指定

worker

子進(jìn)程可以打開(kāi)的最大文件句柄數(shù)。worker_rlimit_nofile

20480;

#

可以理解成每個(gè)worker子進(jìn)程的最大連接數(shù)量。

worker_rlimit_core指定

worker

子進(jìn)程異常終止后的

core

文件,用于記錄分析問(wèn)題。worker_rlimit_core

50M;

#

存放大小限制working_directory

/opt/nginx/tmp;

#

存放目錄復(fù)制代碼worker_processes_number指定

Nginx

啟動(dòng)的

worker

子進(jìn)程數(shù)量。worker_processes

4;

#

指定具體子進(jìn)程數(shù)量worker_processes

auto;

#

與當(dāng)前cpu物理核心數(shù)一致復(fù)制代碼worker_cpu_affinity將每個(gè)

worker

子進(jìn)程與我們的

cpu

物理核心綁定。worker_cpu_affinity

0001

0010

0100

1000;

#

4個(gè)物理核心,4個(gè)worker子進(jìn)程復(fù)制代碼將每個(gè)

worker

子進(jìn)程與特定

CPU

物理核心綁定,優(yōu)勢(shì)在于,避免同一個(gè)

worker

子進(jìn)程在不同的

CPU

核心上切換,緩存失效,降低性能。但其并不能真正的避免進(jìn)程切換。worker_priority指定

worker

子進(jìn)程的

nice

值,以調(diào)整運(yùn)行

Nginx

的優(yōu)先級(jí),通常設(shè)定為負(fù)值,以優(yōu)先調(diào)用

Nginx

。worker_priority

-10;

#

120-10=110,110就是最終的優(yōu)先級(jí)

Linux

默認(rèn)進(jìn)程的優(yōu)先級(jí)值是120,值越小越優(yōu)先;

nice

定范圍為

-20

+19

。[備注]應(yīng)用的默認(rèn)優(yōu)先級(jí)值是120加上

nice

值等于它最終的值,這個(gè)值越小,優(yōu)先級(jí)越高。worker_shutdown_timeout指定

worker

子進(jìn)程優(yōu)雅退出時(shí)的超時(shí)時(shí)間。worker_shutdown_timeout

5s;

timer_resolutionworker

子進(jìn)程內(nèi)部使用的計(jì)時(shí)器精度,調(diào)整時(shí)間間隔越大,系統(tǒng)調(diào)用越少,有利于性能提升;反之,系統(tǒng)調(diào)用越多,性能下降。timer_resolution

100ms;

Linux

系統(tǒng)中,用戶需要獲取計(jì)時(shí)器時(shí)需要向操作系統(tǒng)內(nèi)核發(fā)送請(qǐng)求,有請(qǐng)求就必然會(huì)有開(kāi)銷,因此這個(gè)間隔越大開(kāi)銷就越小。daemon指定

Nginx

的運(yùn)行方式,前臺(tái)還是后臺(tái),前臺(tái)用于調(diào)試,后臺(tái)用于生產(chǎn)。daemon

off;

#

默認(rèn)是on,后臺(tái)運(yùn)行模式

配置文件events段核心參數(shù)useNginx

使用何種事件驅(qū)動(dòng)模型。use

method;

#

不推薦配置它,讓nginx自己選擇method

可選值為:select、poll、kqueue、epoll、/dev/poll、eventport復(fù)制代碼worker_connectionsworker

子進(jìn)程能夠處理的最大并發(fā)連接數(shù)。worker_connections

1024

#

每個(gè)子進(jìn)程的最大連接數(shù)為1024復(fù)制代碼accept_mutex是否打開(kāi)負(fù)載均衡互斥鎖。accept_mutex

on

#

默認(rèn)是off關(guān)閉的,這里推薦打開(kāi)復(fù)制代碼server_name指令指定虛擬主機(jī)域名。server_name

name1

name2

name3#

示例:server_name

;復(fù)制代碼域名匹配的四種寫法:精確匹配:

server_name

;左側(cè)通配:

server_name*.

;右側(cè)統(tǒng)配:

server_namewww.nginx.*

;正則匹配:

server_name~^www\.nginx\.*$

;匹配優(yōu)先級(jí):精確匹配>左側(cè)通配符匹配>右側(cè)通配符匹配>正則表達(dá)式匹配server_name

配置實(shí)例:1、配置本地

DNS

解析

vim/etc/hosts

macOS

系統(tǒng))#

添加如下內(nèi)容,其中

4

是阿里云服務(wù)器IP地址

4

4

4

4

4

4

fe.nginx-test.club

[注意]這里使用的是虛擬域名進(jìn)行測(cè)試,因此需要配置本地

DNS

解析,如果使用阿里云上購(gòu)買的域名,則需要在阿里云上設(shè)置好域名解析。2、配置阿里云

Nginx

,vim/etc/nginx/nginx.conf#

這里只列舉了http端中的sever端配置

#

左匹配

server

{

listen

80;

server_name

*.;

root

/usr/share/nginx/html/nginx-test/left-match/;

location

/

{

index

index.html;

}

}

#

正則匹配

server

{

listen

80;

server_name

~^.*\.nginx-test\..*$;

root

/usr/share/nginx/html/nginx-test/reg-match/;

location

/

{

index

index.html;

}

}

#

右匹配

server

{

listen

80;

server_name

www.nginx-test.*;

root

/usr/share/nginx/html/nginx-test/right-match/;

location

/

{

index

index.html;

}

}

#

完全匹配

server

{

listen

80;

server_name

;

root

/usr/share/nginx/html/nginx-test/all-match/;

location

/

{

index

index.html;

}

}

3、訪問(wèn)分析當(dāng)訪問(wèn)

時(shí),都可以被匹配上,因此選擇優(yōu)先級(jí)最高的“完全匹配”;當(dāng)訪問(wèn)

時(shí),會(huì)進(jìn)行“左匹配”;當(dāng)訪問(wèn)

時(shí),會(huì)進(jìn)行“右匹配”;當(dāng)訪問(wèn)

時(shí),會(huì)進(jìn)行“左匹配”;當(dāng)訪問(wèn)

時(shí),會(huì)進(jìn)行“右匹配”;當(dāng)訪問(wèn)

fe.nginx-test.club

時(shí),會(huì)進(jìn)行“正則匹配”;root指定靜態(tài)資源目錄位置,它可以寫在

http

、

server

、

location

等配置中。root

path例如:location

/image

{

root

/opt/nginx/static;}當(dāng)用戶訪問(wèn)

/image/1.png

時(shí),實(shí)際在服務(wù)器找的路徑是

/opt/nginx/static/image/1.png復(fù)制代碼[注意]

root

會(huì)將定義路徑與

URI

疊加,

alias

則只取定義路徑。alias它也是指定靜態(tài)資源目錄位置,它只能寫在

location

中。location

/image

{

alias

/opt/nginx/static/image/;}當(dāng)用戶訪問(wèn)

/image/1.png

時(shí),實(shí)際在服務(wù)器找的路徑是

/opt/nginx/static/image/1.png復(fù)制代碼[注意]使用alias末尾一定要添加

/

,并且它只能位于

location

中。location配置路徑。location

[

=

|

~

|

~*

|

^~

]

uri

{

...}復(fù)制代碼匹配規(guī)則:=

精確匹配;~

正則匹配,區(qū)分大小寫;~*

正則匹配,不區(qū)分大小寫;^~

匹配到即停止搜索;匹配優(yōu)先級(jí):

=

>

^~

>

~

>

~*

>不帶任何字符。搜索公眾號(hào)后端架構(gòu)師后臺(tái)回復(fù)“架構(gòu)整潔”,獲取一份驚喜禮包。實(shí)例:server

{

listen

80;

server_name

;

#

只有當(dāng)訪問(wèn)

/match_all/

時(shí)才會(huì)匹配到/usr/share/nginx/html/match_all/index.html

location

=

/match_all/

{

root

/usr/share/nginx/html

index

index.html

}

#

當(dāng)訪問(wèn)

/1.jpg

等路徑時(shí)會(huì)去

/usr/share/nginx/images/1.jpg

找對(duì)應(yīng)的資源

location

~

\.(jpeg|jpg|png|svg)$

{

root

/usr/share/nginx/images;

}

#

當(dāng)訪問(wèn)

/bbs/

時(shí)會(huì)匹配上

/usr/share/nginx/html/bbs/index.html

location

^~

/bbs/

{

root

/usr/share/nginx/html;

index

index.html

index.htm;

}

}

location中的反斜線location

/test

{

...

}

location

/test/

{

...

}

不帶

/

當(dāng)訪問(wèn)

/test

時(shí),

Nginx

先找是否有

test

目錄,如果有則找

test

目錄下的

index.html

;如果沒(méi)有

test

目錄,

nginx

則會(huì)找是否有

test

文件。帶

/

當(dāng)訪問(wèn)

/test

時(shí),

Nginx

先找是否有

test

目錄,如果有則找

test

目錄下的

index.html

,如果沒(méi)有它也不會(huì)去找是否存在

test

文件。return停止處理請(qǐng)求,直接返回響應(yīng)碼或重定向到其他

URL

;執(zhí)行

return

指令后,

location

中后續(xù)指令將不會(huì)被執(zhí)行。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

;

#

返回重定向地址

}

rewrite根據(jù)指定正則表達(dá)式匹配規(guī)則,重寫

URL

。語(yǔ)法:rewrite

正則表達(dá)式

要替換的內(nèi)容

[flag];

上下server、location、if

示例:rewirte

/images/(.*\.jpg)$

/pic/$1;

#

$1是前面括號(hào)(.*\.jpg)的反向引用

flag

可選值的含義:last

重寫后的

URL

發(fā)起新請(qǐng)求,再次進(jìn)入

server

段,重試

location

的中的匹配;break

直接使用重寫后的

URL

,不再匹配其它

location

中語(yǔ)句;redirect

返回302臨時(shí)重定向;permanent

返回301永久重定向;server{

listen

80;

server_name

fe.lion.club;

#

要在本地hosts文件進(jìn)行配置

root

html;

location

/search

{

rewrite

^/(.*)

redirect;

}

location

/images

{

rewrite

/images/(.*)

/pics/$1;

}

location

/pics

{

rewrite

/pics/(.*)

/photos/$1;

}

location

/photos

{

}

}

按照這個(gè)配置我們來(lái)分析:當(dāng)訪問(wèn)

fe.lion.club/search

時(shí),會(huì)自動(dòng)幫我們重定向到

。當(dāng)訪問(wèn)

fe.lion.club/images/1.jpg

時(shí),第一步重寫

URL

fe.lion.club/pics/1.jpg

,找到

pics

location

,繼續(xù)重寫

URL

fe.lion.club/photos/1.jpg,找到

/photos

location

后,去

html/photos

目錄下尋找

1.jpg

靜態(tài)資源。if指令語(yǔ)法:if

(condition)

{...}

上下server、location

示例:

if($http_user_agent

~

Chrome){

rewrite

/(.*)/browser/$1

break;

}

condition

判斷條件:$variable

僅為變量時(shí),值為空或以0開(kāi)頭字符串都會(huì)被當(dāng)做

false

處理;=

!=

相等或不等;~

正則匹配;!~

非正則匹配;~*

正則匹配,不區(qū)分大小寫;-f

!-f

檢測(cè)文件存在或不存在;-d

!-d

檢測(cè)目錄存在或不存在;-e

!-e

檢測(cè)文件、目錄、符號(hào)鏈接等存在或不存在;-x

!-x

檢測(cè)文件可以執(zhí)行或不可執(zhí)行;實(shí)例:server

{

listen

8080;

server_name

localhost;

root

html;

location

/

{

if

(

$uri

=

"/images/"

){

rewrite

(.*)

/pics/

break;

}

}

}

當(dāng)訪問(wèn)

localhost:8080/images/

時(shí),會(huì)進(jìn)入

if

判斷里面執(zhí)行

rewrite

命令。autoindex用戶請(qǐng)求以

/

結(jié)尾時(shí),列出目錄結(jié)構(gòu),可以用于快速搭建靜態(tài)資源下載網(wǎng)站。autoindex.conf

配置信息:server

{

listen

80;

server_name

fe.lion-test.club;

location

/download/

{

root

/opt/source;

autoindex

on;

#

打開(kāi)

autoindex,,可選參數(shù)有

on

|

off

autoindex_exact_size

on;

#

修改為off,以KB、MB、GB顯示文件大小,默認(rèn)為on,以bytes顯示出?件的確切??

autoindex_format

html;

#

以html的方式進(jìn)行格式化,可選參數(shù)有

html

|

json

|

xml

autoindex_localtime

off;

#

顯示的?件時(shí)間為?件的服務(wù)器時(shí)間。默認(rèn)為off,顯示的?件時(shí)間為GMT時(shí)間

}

}

當(dāng)訪問(wèn)

/download/

時(shí),會(huì)把服務(wù)器

/opt/source/download/

路徑下的文件展示出來(lái),如下圖所示:變量Nginx

提供給使用者的變量非常多,但是終究是一個(gè)完整的請(qǐng)求過(guò)程所產(chǎn)生數(shù)據(jù),

Nginx

將這些數(shù)據(jù)以變量的形式提供給使用者。下面列舉些項(xiàng)目中常用的變量:變量名含義remote_addr客戶端

IP

地址remote_port客戶端端口server_addr服務(wù)端

IP

地址server_port服務(wù)端端口server_protocol服務(wù)端協(xié)議binary_remote_addr二進(jìn)制格式的客戶端

IP

地址connectionTCP

連接的序號(hào),遞增connection_requestTCP

連接當(dāng)前的請(qǐng)求數(shù)量uri請(qǐng)求的URL,不包含參數(shù)request_uri請(qǐng)求的URL,包含參數(shù)scheme協(xié)議名,

http

httpsrequest_method請(qǐng)求方法request_length全部請(qǐng)求的長(zhǎng)度,包含請(qǐng)求行、請(qǐng)求頭、請(qǐng)求體args全部參數(shù)字符串a(chǎn)rg_參數(shù)名獲取特定參數(shù)值is_argsURL

中是否有參數(shù),有的話返回

?

,否則返回空query_string與

args

相同host請(qǐng)求信息中的

Host

,如果請(qǐng)求中沒(méi)有

Host

行,則在請(qǐng)求頭中找,最后使用

nginx

中設(shè)置的

server_name

。http_user_agent用戶瀏覽器http_referer從哪些鏈接過(guò)來(lái)的請(qǐng)求http_via每經(jīng)過(guò)一層代理服務(wù)器,都會(huì)添加相應(yīng)的信息http_cookie獲取用戶

cookierequest_time處理請(qǐng)求已消耗的時(shí)間https是否開(kāi)啟了

https

,是則返回

on

,否則返回空request_filename磁盤文件系統(tǒng)待訪問(wèn)文件的完整路徑document_root由

URI

root/alias

規(guī)則生成的文件夾路徑limit_rate返回響應(yīng)時(shí)的速度上限值實(shí)例演示

var.conf

:server{

listen

8081;

server_name

var.lion-test.club;

root

/usr/share/nginx/html;

location

/

{

return

200

"

remote_addr:

$remote_addr

remote_port:

$remote_port

server_addr:

$server_addr

server_port:

$server_port

server_protocol:

$server_protocol

binary_remote_addr:

$binary_remote_addr

connection:

$connection

uri:

$uri

request_uri:

$request_uri

scheme:

$scheme

request_method:

$request_method

request_length:

$request_length

args:

$args

arg_pid:

$arg_pid

is_args:

$is_args

query_string:

$query_string

host:

$host

http_user_agent:

$http_user_agent

http_referer:

$http_referer

http_via:

$http_via

request_time:

$request_time

https:

$https

request_filename:

$request_filename

document_root:

$document_root

";

}

}

當(dāng)我們?cè)L問(wèn)

http://var.lion-test.club:8081/test?pid=121414&cid=sadasd

時(shí),由于

Nginx

中寫了

return

方法,因此

chrome

瀏覽器會(huì)默認(rèn)為我們下載一個(gè)文件,下面展示的就是下載的文件內(nèi)容:remote_addr:

4

remote_port:

56838

server_addr:

server_port:

8081

server_protocol:

HTTP/1.1

binary_remote_addr:

connection:

126

uri:

/test/

request_uri:

/test/?pid=121414&cid=sadasd

scheme:

http

request_method:

GET

request_length:

518

args:

pid=121414&cid=sadasd

arg_pid:

121414

is_args:

?

query_string:

pid=121414&cid=sadasd

host:

var.lion-test.club

http_user_agent:

Mozilla/5.0

(Macintosh;

Intel

Mac

OS

X

10_14_0)

AppleWebKit/537.36

(KHTML,

like

Gecko)

Chrome/88.0.4324.182

Safari/537.36

http_referer:

http_via:

request_time:

0.000

https:

request_filename:

/usr/share/nginx/html/test/

document_root:

/usr/share/nginx/html

Nginx

的配置還有非常多,以上只是羅列了一些常用的配置,在實(shí)際項(xiàng)目中還是要學(xué)會(huì)查閱文檔。Nginx應(yīng)用核心概念代理是在服務(wù)器和客戶端之間假設(shè)的一層服務(wù)器,代理將接收客戶端的請(qǐng)求并將它轉(zhuǎn)發(fā)給服務(wù)器,然后將服務(wù)端的響應(yīng)轉(zhuǎn)發(fā)給客戶端。不管是正向代理還是反向代理,實(shí)現(xiàn)的都是上面的功能。正向代理正向代理,意思是一個(gè)位于客戶端和原始服務(wù)器(originserver)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。正向代理是為我們服務(wù)的,即為客戶端服務(wù)的,客戶端可以根據(jù)正向代理訪問(wèn)到它本身無(wú)法訪問(wèn)到的服務(wù)器資源。正向代理對(duì)我們是透明的,對(duì)服務(wù)端是非透明的,即服務(wù)端并不知道自己收到的是來(lái)自代理的訪問(wèn)還是來(lái)自真實(shí)客戶端的訪問(wèn)。反向代理反向代理*(ReverseProxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。反向代理是為服務(wù)端服務(wù)的,反向代理可以幫助服務(wù)器接收來(lái)自客戶端的請(qǐng)求,幫助服務(wù)器做請(qǐng)求轉(zhuǎn)發(fā),負(fù)載均衡等。反向代理對(duì)服務(wù)端是透明的,對(duì)我們是非透明的,即我們并不知道自己訪問(wèn)的是代理服務(wù)器,而服務(wù)器知道反向代理在為他服務(wù)。反向代理的優(yōu)勢(shì):隱藏真實(shí)服務(wù)器;負(fù)載均衡便于橫向擴(kuò)充后端動(dòng)態(tài)服務(wù);動(dòng)靜分離,提升系統(tǒng)健壯性;那么“動(dòng)靜分離”是什么?負(fù)載均衡又是什么?動(dòng)靜分離動(dòng)靜分離是指在

web

服務(wù)器架構(gòu)中,將靜態(tài)頁(yè)面與動(dòng)態(tài)頁(yè)面或者靜態(tài)內(nèi)容接口和動(dòng)態(tài)內(nèi)容接口分開(kāi)不同系統(tǒng)訪問(wèn)的架構(gòu)設(shè)計(jì)方法,進(jìn)而提示整個(gè)服務(wù)的訪問(wèn)性和可維護(hù)性。一般來(lái)說(shuō),都需要將動(dòng)態(tài)資源和靜態(tài)資源分開(kāi),由于

Nginx

的高并發(fā)和靜態(tài)資源緩存等特性,經(jīng)常將靜態(tài)資源部署在

Nginx

上。如果請(qǐng)求的是靜態(tài)資源,直接到靜態(tài)資源目錄獲取資源,如果是動(dòng)態(tài)資源的請(qǐng)求,則利用反向代理的原理,把請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)后臺(tái)應(yīng)用去處理,從而實(shí)現(xiàn)動(dòng)靜分離。使用前后端分離后,可以很大程度提升靜態(tài)資源的訪問(wèn)速度,即使動(dòng)態(tài)服務(wù)不可用,靜態(tài)資源的訪問(wèn)也不會(huì)受到影響。負(fù)載均衡一般情況下,客戶端發(fā)送多個(gè)請(qǐng)求到服務(wù)器,服務(wù)器處理請(qǐng)求,其中一部分可能要操作一些資源比如數(shù)據(jù)庫(kù)、靜態(tài)資源等,服務(wù)器處理完畢后,再將結(jié)果返回給客戶端。這種模式對(duì)于早期的系統(tǒng)來(lái)說(shuō),功能要求不復(fù)雜,且并發(fā)請(qǐng)求相對(duì)較少的情況下還能勝任,成本也低。隨著信息數(shù)量不斷增長(zhǎng),訪問(wèn)量和數(shù)據(jù)量飛速增長(zhǎng),以及系統(tǒng)業(yè)務(wù)復(fù)雜度持續(xù)增加,這種做法已無(wú)法滿足要求,并發(fā)量特別大時(shí),服務(wù)器容易崩。很明顯這是由于服務(wù)器性能的瓶頸造成的問(wèn)題,除了堆機(jī)器之外,最重要的做法就是負(fù)載均衡。請(qǐng)求爆發(fā)式增長(zhǎng)的情況下,單個(gè)機(jī)器性能再?gòu)?qiáng)勁也無(wú)法滿足要求了,這個(gè)時(shí)候集群的概念產(chǎn)生了,單個(gè)服務(wù)器解決不了的問(wèn)題,可以使用多個(gè)服務(wù)器,然后將請(qǐng)求分發(fā)到各個(gè)服務(wù)器上,將負(fù)載分發(fā)到不同的服務(wù)器,這就是負(fù)載均衡,核心是「分?jǐn)倝毫Α埂?/p>

Nginx

實(shí)現(xiàn)負(fù)載均衡,一般來(lái)說(shuō)指的是將請(qǐng)求轉(zhuǎn)發(fā)給服務(wù)器集群。舉個(gè)具體的例子,晚高峰乘坐地鐵的時(shí)候,入站口經(jīng)常會(huì)有地鐵工作人員大喇叭“請(qǐng)走

B口,

B

口人少車空”,這個(gè)工作人員的作用就是負(fù)載均衡。Nginx

實(shí)現(xiàn)負(fù)載均衡的策略:輪詢策略:默認(rèn)情況下采用的策略,將所有客戶端請(qǐng)求輪詢分配給服務(wù)端。這種策略是可以正常工作的,但是如果其中某一臺(tái)服務(wù)器壓力太大,出現(xiàn)延遲,會(huì)影響所有分配在這臺(tái)服務(wù)器下的用戶。最小連接數(shù)策略:將請(qǐng)求優(yōu)先分配給壓力較小的服務(wù)器,它可以平衡每個(gè)隊(duì)列的長(zhǎng)度,并避免向壓力大的服務(wù)器添加更多的請(qǐng)求。最快響應(yīng)時(shí)間策略:優(yōu)先分配給響應(yīng)時(shí)間最短的服務(wù)器??蛻舳?/p>

ip

綁定策略:來(lái)自同一個(gè)

ip

的請(qǐng)求永遠(yuǎn)只分配一臺(tái)服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁(yè)存在的

session

共享問(wèn)題。Nginx實(shí)戰(zhàn)配置在配置反向代理和負(fù)載均衡等等功能之前,有兩個(gè)核心模塊是我們必須要掌握的,這兩個(gè)模塊應(yīng)該說(shuō)是

Nginx

應(yīng)用配置中的核心,它們分別是:

upstream

、proxy_pass

。搜索公眾號(hào)后端架構(gòu)師后臺(tái)回復(fù)“面試”,獲取一份驚喜禮包。upstream用于定義上游服務(wù)器(指的就是后臺(tái)提供的應(yīng)用服務(wù)器)的相關(guān)信息。語(yǔ)法:upstream

name

{

...}上下http示例:upstream

back_end_server{

server

3:8081}復(fù)制代碼在

upstream

內(nèi)可使用的指令:server

定義上游服務(wù)器地址;zone

定義共享內(nèi)存,用于跨

worker

子進(jìn)程;keepalive

對(duì)上游服務(wù)啟用長(zhǎng)連接;keepalive_requests

一個(gè)長(zhǎng)連接最多請(qǐng)求

HTTP

的個(gè)數(shù);keepalive_timeout

空閑情形下,一個(gè)長(zhǎng)連接的超時(shí)時(shí)長(zhǎng);hash

哈希負(fù)載均衡算法;ip_hash

依據(jù)

IP

進(jìn)行哈希計(jì)算的負(fù)載均衡算法;least_conn

最少連接數(shù)負(fù)載均衡算法;least_time

最短響應(yīng)時(shí)間負(fù)載均衡算法;random

隨機(jī)負(fù)載均衡算法;server定義上游服務(wù)器地址。語(yǔ)法:server

address

[parameters]

上下upstream

parameters

可選值:weight=number

權(quán)重值,默認(rèn)為1;max_conns=number

上游服務(wù)器的最大并發(fā)連接數(shù);fail_timeout=time

服務(wù)器不可用的判定時(shí)間;max_fails=numer

服務(wù)器不可用的檢查次數(shù);backup

備份服務(wù)器,僅當(dāng)其他服務(wù)器都不可用時(shí)才會(huì)啟用;down

標(biāo)記服務(wù)器長(zhǎng)期不可用,離線維護(hù);keepalive限制每個(gè)

worker

子進(jìn)程與上游服務(wù)器空閑長(zhǎng)連接的最大數(shù)量。keepalive

connections;

上下upstream

示例:keepalive

16;

keepalive_requests單個(gè)長(zhǎng)連接可以處理的最多

HTTP

請(qǐng)求個(gè)數(shù)。語(yǔ)法:keepalive_requests

number;

默認(rèn)值:keepalive_requests

100;

上下upstream

keepalive_timeout空閑長(zhǎng)連接的最長(zhǎng)保持時(shí)間。語(yǔ)法:keepalive_timeout

time;默認(rèn)值:keepalive_timeout

60s;上下upstream復(fù)制代碼配置實(shí)例upstream

back_end{

server

:8081

weight=3

max_conns=1000

fail_timeout=10s

max_fails=2;

keepalive

32;

keepalive_requests

50;

keepalive_timeout

30s;

}

proxy_pass用于配置代理服務(wù)器。語(yǔ)法:proxy_pass

URL;

上下location、if、limit_except

示例:

proxy_pass

:8081

proxy_pass

:8081/proxy

URL

參數(shù)原則URL

必須以

http

https

開(kāi)頭;URL

中可以攜帶變量;URL

中是否帶

URI

,會(huì)直接影響發(fā)往上游請(qǐng)求的

URL

;接下來(lái)讓我們來(lái)看看兩種常見(jiàn)的

URL

用法:proxy_pass3:8081proxy_pass3:8081/這兩種用法的區(qū)別就是帶

/

和不帶

/

,在配置代理時(shí)它們的區(qū)別可大了:不帶

/

意味著

Nginx

不會(huì)修改用戶

URL

,而是直接透?jìng)鹘o上游的應(yīng)用服務(wù)器;帶

/

意味著

Nginx

會(huì)修改用戶

URL

,修改方法是將

location

后的

URL

從用戶

URL

中刪除;不帶

/

的用法:location

/bbs/{

proxy_pass

:8080;

}

分析:用戶請(qǐng)求

URL

/bbs/abc/test.html請(qǐng)求到達(dá)

Nginx

URL

/bbs/abc/test.html請(qǐng)求到達(dá)上游應(yīng)用服務(wù)器的

URL

/bbs/abc/test.html帶

/

的用法:location

/bbs/{

proxy_pass

:8080/;

}

分析:用戶請(qǐng)求

URL

/bbs/abc/test.html請(qǐng)求到達(dá)

Nginx

URL

/bbs/abc/test.html請(qǐng)求到達(dá)上游應(yīng)用服務(wù)器的

URL

/abc/test.html并沒(méi)有拼接上

/bbs

,這點(diǎn)和

root

alias

之間的區(qū)別是保持一致的。配置反向代理這里為了演示更加接近實(shí)際,準(zhǔn)備了兩臺(tái)云服務(wù)器,它們的公網(wǎng)

IP

分別是:

4

93

。我們把

4

服務(wù)器作為上游服務(wù)器,做如下配置:#

/etc/nginx/conf.d/proxy.conf

server{

listen

8080;

server_name

localhost;

location

/proxy/

{

root

/usr/share/nginx/html/proxy;

index

index.html;

}

}

#

/usr/share/nginx/html/proxy/index.html

4

proxy

html

配置完成后重啟

Nginx

服務(wù)器

nginx-sreload

。把

93

服務(wù)器作為代理服務(wù)器,做如下配置:#

/etc/nginx/conf.d/proxy.conf

upstream

back_end

{

server

4:8080

weight=2

max_conns=1000

fail_timeout=10s

max_fails=3;

keepalive

32;

keepalive_requests

80;

keepalive_timeout

20s;

}

server

{

listen

80;

server_name

proxy.lion.club;

location

/proxy

{

proxy_pass

http://back_end/proxy;

}

}

本地機(jī)器要訪問(wèn)

proxy.lion.club

域名,因此需要配置本地

hosts

,通過(guò)命令:vim/etc/hosts

進(jìn)入配置文件,添加如下內(nèi)容:93

proxy.lion.club

分析:當(dāng)訪問(wèn)

proxy.lion.club/proxy

時(shí)通過(guò)

upstream

的配置找到

4:8080;因此訪問(wèn)地址變?yōu)?/p>

4:8080/proxy

;連接到

4

服務(wù)器,找到

8080

端口提供的

server

;通過(guò)

server

找到

/usr/share/nginx/html/proxy/index.html

資源,最終展示出來(lái)。配置負(fù)載均衡配置負(fù)載均衡主要是要使用

upstream

指令。我們把

4

服務(wù)器作為上游服務(wù)器,做如下配置(

/etc/nginx/conf.d/balance.conf

):server{

listen

8020;

location

/

{

return

200

'return

8020

\n';

}

}

server{

listen

8030;

location

/

{

return

200

'return

8030

\n';

}

}

server{

listen

8040;

location

/

{

return

200

'return

8040

\n';

}

}

配置完成后:nginx-t

檢測(cè)配置是否正確;nginx-sreload

重啟

Nginx

服務(wù)器;執(zhí)行

ss-nlt

命令查看端口是否被占用,從而判斷

Nginx

服務(wù)是否正確啟動(dòng)。把

93

服務(wù)器作為代理服務(wù)器,做如下配置(

/etc/nginx/conf.d/balance.conf

):upstream

demo_server

{

server

4:8020;

server

4:8030;

server

4:8040;

}

server

{

listen

80;

server_name

balance.lion.club;

location

/balance/

{

proxy_pass

http://demo_server;

}

}

配置完成后重啟

Nginx

服務(wù)器。并且在需要訪問(wèn)的客戶端配置好

ip

和域名的映射關(guān)系。搜索公眾號(hào)頂級(jí)架構(gòu)師后臺(tái)回復(fù)“offer”,獲取一份驚喜禮包。#

/etc/hosts

93

balance.lion.club

在客戶端機(jī)器執(zhí)行

curlhttp://balance.lion.club/balance/

命令:不難看出,負(fù)載均衡的配置已經(jīng)生效了,每次給我們分發(fā)的上游服務(wù)器都不一樣。就是通過(guò)簡(jiǎn)單的輪詢策略進(jìn)行上游服務(wù)器分發(fā)。接下來(lái),我們?cè)賮?lái)了解下

Nginx

的其它分發(fā)策略。hash算法通過(guò)制定關(guān)鍵字作為

hashkey

,基于

hash

算法映射到特定的上游服務(wù)器中。關(guān)鍵字可以包含有變量、字符串。upstream

demo_server

{

hash

$request_uri;

server

4:8020;

server

4:8030;

server

4:8040;

}

server

{

listen

80;

server_name

balance.lion.club;

location

/balance/

{

proxy_pass

http://demo_server;

}

}

hash$request_uri

表示使用

request_uri

變量作為

hash

key

值,只要訪問(wèn)的

URI

保持不變,就會(huì)一直分發(fā)給同一臺(tái)服務(wù)器。ip_hash根據(jù)客戶端的請(qǐng)求

ip

進(jìn)行判斷,只要

ip

地址不變就永遠(yuǎn)分配到同一臺(tái)主機(jī)。它可以有效解決后臺(tái)服務(wù)器

session

保持的問(wèn)題。upstream

demo_server

{

ip_hash;

server

4:8020;

server

4:8030;

server

4:8040;

}

server

{

listen

80;

server_name

balance.lion.club;

location

/balance/

{

proxy_pass

http://demo_server;

}

}

最少連接數(shù)算法各個(gè)

worker

子進(jìn)程通過(guò)讀取共享內(nèi)存的數(shù)據(jù),來(lái)獲取后端服務(wù)器的信息。來(lái)挑選一臺(tái)當(dāng)前已建立連接數(shù)最少的服務(wù)器進(jìn)行分配請(qǐng)求。語(yǔ)法:least_conn;

上下upstream;

示例:upstream

demo_server

{

zone

test

10M;

#

zone可以設(shè)置共享內(nèi)存空間的名字和大小

least_conn;

server

4:8020;

server

4:8030;

server

4:8040;

}

server

{

listen

80;

server_name

balance.lion.club;

location

/balance/

{

proxy_pass

http://demo_server;

}

}

最后你會(huì)發(fā)現(xiàn),負(fù)載均衡的配置其實(shí)一點(diǎn)都不復(fù)雜。配置緩存緩存可以非常有效的提升性能,因此不論是客戶端(瀏覽器),還是代理服務(wù)器(

Nginx),乃至上游服務(wù)器都多少會(huì)涉及到緩存??梢?jiàn)緩存在每個(gè)環(huán)節(jié)都是非常重要的。下面讓我們來(lái)學(xué)習(xí)

Nginx

中如何設(shè)置緩存策略。proxy_cache存儲(chǔ)一些之前被訪問(wèn)過(guò)、而且可能將要被再次訪問(wèn)的資源,使用戶可以直接從代理服務(wù)器獲得,從而減少上游服務(wù)器的壓力,加快整個(gè)訪問(wèn)速度。語(yǔ)法:proxy_cache

zone

|

off

;

#

zone

是共享內(nèi)存的名稱

默認(rèn)值:proxy_cache

off;

上下http、server、location

proxy_cache_path設(shè)置緩存文件的存放路徑。語(yǔ)法:proxy_cache_path

path

[level=levels]

...可選參數(shù)省略,下面會(huì)詳細(xì)列舉

默認(rèn)值:proxy_cache_path

off

上下http

參數(shù)含義:path

緩存文件的存放路徑;levelpath

的目錄層級(jí);keys_zone

設(shè)置共享內(nèi)存;inactive

在指定時(shí)間內(nèi)沒(méi)有被訪問(wèn),緩存會(huì)被清理,默認(rèn)10分鐘;proxy_cache_key設(shè)置緩存文件的

key

。語(yǔ)法:proxy_cache_key

默認(rèn)值:proxy_cache_key

$scheme$proxy_host$request_uri;

上下http、server、location

proxy_cache_valid配置什么狀態(tài)碼可以被緩存,以及緩存時(shí)長(zhǎng)。語(yǔ)法:proxy_cache_valid

[code...]

time;

上下http、server、location

配置示例:proxy_cache_valid

200

304

2m;;

#

說(shuō)明對(duì)于狀態(tài)為200和304的緩存文件的緩存時(shí)間是2分鐘

proxy_no_cache定義相應(yīng)保存到緩存的條件,如果字符串參數(shù)的至少一個(gè)值不為空且不等于“0”,則將不保存該響應(yīng)到緩存。語(yǔ)法:proxy_no_cache

string;

上下http、server、location

示例:proxy_no_cache

$http_pragma

$http_authorization;

proxy_cache_bypass定義條件,在該條件下將不會(huì)從緩存中獲取響應(yīng)。語(yǔ)法:proxy_cache_bypass

string;

上下http、server、location

示例:proxy_cache_bypass

$http_pragma

$http_authorization;

upstream_cache_status變量它存儲(chǔ)了緩存是否命中的信息,會(huì)設(shè)置在響應(yīng)頭信息中,在調(diào)試中非常有用。MISS:

未命中緩存

HIT:

命中緩存

EXPIRED:

緩存過(guò)期

STALE:

命中了陳舊緩存

REVALIDDATED:

Nginx驗(yàn)證陳舊緩存依然有效

UPDATING:

內(nèi)容陳舊,但正在更新

BYPASS:

X響應(yīng)從原始服務(wù)器獲取

配置實(shí)例我們把

4

服務(wù)器作為上游服務(wù)器,做如下配置(

/etc/nginx/conf.d/cache.conf

):server

{

listen

1010;

root

/usr/share/nginx/html/1010;

location

/

{

index

index.html;

}

}

server

{

listen

1020;

root

/usr/share/nginx/html/1020;

location

/

{

index

index.html;

}

}

93

服務(wù)器作為代理服務(wù)器,做如下配置(

/etc/nginx/conf.d/cache.conf

):proxy_cache_path

/etc/nginx/cache_temp

levels=2:2

keys_zone=cache_zone:30m

max_size=2g

inactive=60m

use_temp_path=off;

upstream

cache_server{

server

4:1010;

server

4:1020;

}

server

{

listen

80;

server_name

cache.lion.club;

location

/

{

proxy_cache

cache_zone;

#

設(shè)置緩存內(nèi)存,上面配置中已經(jīng)定義好的

proxy_cache_valid

200

5m;

#

緩存狀態(tài)為200的請(qǐng)求,緩存時(shí)長(zhǎng)為5分鐘

proxy_cache_key

$request_uri;

#

緩存文件的key為請(qǐng)求的URI

add_header

Nginx-Cache-Status

$upstream_cache_status

#

把緩存狀態(tài)設(shè)置為頭部信息,響應(yīng)給客戶端

proxy_pass

http://cache_server;

#

代理轉(zhuǎn)發(fā)

}

}

緩存就是這樣配置,我們可以在

/etc/nginx/cache_temp

路徑下找到相應(yīng)的緩存文件。對(duì)于一些實(shí)時(shí)性要求非常高的頁(yè)面或數(shù)據(jù)來(lái)說(shuō),就不應(yīng)該去設(shè)置緩存,下面來(lái)看看如何配置不緩存的內(nèi)容。...

server

{

listen

80;

server_name

cache.lion.club;

#

URI

中后綴為

.txt

.text

的設(shè)置變量值為

"no

cache"

if

($request_uri

~

\.(txt|text)$)

{

set

$cache_name

"no

cache"

}

location

/

{

proxy_no_cache

$cache_name;

#

判斷該變量是否有值,如果有值則不進(jìn)行緩存,如果沒(méi)有值則進(jìn)行緩存

proxy_cache

cache_zone;

#

設(shè)置緩存內(nèi)存

proxy_cache_valid

200

5m;

#

緩存狀態(tài)為200的請(qǐng)求,緩存時(shí)長(zhǎng)為5分鐘

proxy_cache_key

$request_uri;

#

緩存文件的key為請(qǐng)求的URI

add_header

Nginx-Cache-Status

$upstream_cache_status

#

把緩存狀態(tài)設(shè)置為頭部信息,響應(yīng)給客戶端

proxy_pass

http://cache_server;

#

代理轉(zhuǎn)發(fā)

}

}

HTTPS在學(xué)習(xí)如何配置

HTTPS

之前,我們先來(lái)簡(jiǎn)單回顧下

HTTPS

的工作流程是怎么樣的?它是如何進(jìn)行加密保證安全的?HTTPS工作流程客戶端(瀏覽器)訪問(wèn)

百度網(wǎng)站;百度服務(wù)器返回

HTTPS

使用的

CA

證書;瀏覽器驗(yàn)證

CA

證書是否為合法證書;驗(yàn)證通過(guò),證書合法,生成一串隨機(jī)數(shù)并使用公鑰(證書中提供的)進(jìn)行加密;發(fā)送公鑰加密后的隨機(jī)數(shù)給百度服務(wù)器;百度服務(wù)器拿到密文,通過(guò)私鑰進(jìn)行解密,獲取到隨機(jī)數(shù)(公鑰加密,私鑰解密,反之也可以);百度服務(wù)器把要發(fā)送給瀏覽器的內(nèi)容,使用隨機(jī)數(shù)進(jìn)行加密后傳輸給瀏覽器;此時(shí)瀏覽器可以使用隨機(jī)數(shù)進(jìn)行解密,獲取到服務(wù)器的真實(shí)傳輸內(nèi)容;這就是

HTTPS

的基本運(yùn)作原理,使用對(duì)稱加密和非對(duì)稱機(jī)密配合使用,保證傳輸內(nèi)容的安全性。關(guān)于HTTPS更多知識(shí),可以查看的另外一篇文章《學(xué)習(xí)HTTP協(xié)議》。配置證書下載證書的壓縮文件,里面有個(gè)

Nginx

文件夾,把

xxx.crt

xxx.key

文件拷貝到服務(wù)器目錄,再進(jìn)行如下配置:server

{

listen

443

ssl

http2

default_server;

#

SSL

訪問(wèn)端口號(hào)為

443

server_name

lion.club;

#

填寫綁定證書的域名(我這里是隨便寫的)

ssl_certificate

/etc/nginx/https/lion.club_bundle.crt;

#

證書地址

ssl_certificate_key

/etc/nginx/https/lion.club.key;

#

私鑰地址

ssl_session_timeout

10m;

ssl_protocols

TLSv1

TLSv1.1

TLSv1.2;

#

支持ssl協(xié)議版本,默認(rèn)為后三個(gè),主流版本是[TLSv1.2]

location

/

{

root

/usr/share/nginx/html;

index

index.html

index.htm;

}

}

如此配置后就能正常訪問(wèn)

HTTPS

版的網(wǎng)站了。配置跨域CORS先簡(jiǎn)單回顧下跨域究竟是怎么回事??缬虻亩x同源策略限制了從同一個(gè)源加載的文檔或腳本如何與來(lái)自另一個(gè)源的資源進(jìn)行交互。這是一個(gè)用于隔離潛在惡意文件的重要安全機(jī)制。通常不允許不同源間的讀操作。同源的定義如果兩個(gè)頁(yè)面的協(xié)議,端口(如果有指定)和域名都相同,則兩個(gè)頁(yè)面具有相同的源。下面給出了與URL

/dir/page.html

的源進(jìn)行對(duì)比的示例:/dir2/other.html

同源

/secure.html

不同源,協(xié)議不同

:81/dir/e

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論