前端nginx部署詳細(xì)圖文教程
一、nginx是什么
nginx官方介紹:
“Nginx是一款輕量級的HTTP服務(wù)器,采用事件驅(qū)動的異步非阻塞處理方式框架,這讓其具有極好的IO性能,時常用于服務(wù)端的反向代理和負(fù)載均衡。”
nginx的優(yōu)點(diǎn)
- 支持海量高并發(fā):采用IO多路復(fù)用epoll。官方測試Nginx能夠支持5萬并發(fā)鏈接,實(shí)際生產(chǎn)環(huán)境中可以支撐2-4萬并發(fā)連接數(shù)。
- 內(nèi)存消耗少
- 可商業(yè)化
- 配置文件簡單 除了這些優(yōu)點(diǎn)還有很多,比如反向代理功能,灰度發(fā)布,負(fù)載均衡功能等
二、安裝
- linux 如果是centos大家也可以直接用yum安裝也是很方便的
- window
- 通過docker安裝(推薦)。
三、配置文件
cd /conf/nginx 進(jìn)入配置文件目錄 vi nginx.conf 配置文件 docker logs 鏡像名 查看錯誤log docker restart 鏡像名 配置后重啟
1. 配置文件的結(jié)構(gòu)介紹
為了讓大家有個簡單的輪廓,這里先對配置文件做一個簡單的描述:
worker_processes 1; # worker進(jìn)程的數(shù)量 events { # 事件區(qū)塊開始 worker_connections 1024; # 每個worker進(jìn)程支持的最大連接數(shù) } # 事件區(qū)塊結(jié)束 http { # HTTP區(qū)塊開始 include mime.types; # Nginx支持的媒體類型庫文件 default_type application/octet-stream; # 默認(rèn)的媒體類型 sendfile on; # 開啟高效傳輸模式 keepalive_timeout 65; # 連接超時 server { # 第一個Server區(qū)塊開始,表示一個獨(dú)立的虛擬主機(jī)站點(diǎn) listen 80; # 提供服務(wù)的端口,默認(rèn)80 server_name localhost; # 提供服務(wù)的域名主機(jī)名 location / { # 第一個location區(qū)塊開始 root html; # 站點(diǎn)的根目錄,相當(dāng)于Nginx的安裝目錄 index index.html index.htm; # 默認(rèn)的首頁文件,多個用空格分開 } # 第一個location區(qū)塊結(jié)果 error_page 500502503504 /50x.html; # 出現(xiàn)對應(yīng)的http狀態(tài)碼時,使用50x.html回應(yīng)客戶 location = /50x.html { # location區(qū)塊開始,訪問50x.html root html; # 指定對應(yīng)的站點(diǎn)目錄為html } } ......
2.location匹配
#優(yōu)先級1,精確匹配,根路徑 location =/ { return 400; } #優(yōu)先級2,以某個字符串開頭,以av開頭的,優(yōu)先匹配這里,區(qū)分大小寫 location ^~ /av { root /data/av/; } #優(yōu)先級3,區(qū)分大小寫的正則匹配,匹配/media*****路徑 location ~ /media { alias /data/static/; } #優(yōu)先級4 ,不區(qū)分大小寫的正則匹配,所有的****.jpg|gif|png 都走這里 location ~* .*\.(jpg|gif|png|js|css)$ { root /data/av/; } #優(yōu)先7,通用匹配 location / { return 403; }
四、nginx反向代理
1.正向代理
正向代理,“它代理的是客戶端”,是一個位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個請求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端??蛻舳吮仨氁M(jìn)行一些特別的設(shè)置才能使用正向代理 正向代理的用途:
- 訪問原來無法訪問的資源,如Google
- 可以做緩存,加速訪問資源
- 對客戶端訪問授權(quán),上網(wǎng)進(jìn)行認(rèn)證
- 代理可以記錄用戶訪問記錄(上網(wǎng)行為管理),對外隱藏用戶信息
2.反向代理
反向代理,“它代理的是服務(wù)端”,主要用于服務(wù)器集群分布式部署的情況下,反向代理隱藏了服務(wù)器的信息 反向代理的作用:
- 保證內(nèi)網(wǎng)的安全,通常將反向代理作為公網(wǎng)訪問地址,Web服務(wù)器是內(nèi)網(wǎng)
- 負(fù)載均衡,通過反向代理服務(wù)器來優(yōu)化網(wǎng)站的負(fù)載
3.負(fù)載均衡
服務(wù)器接收不同客戶端發(fā)送的、Nginx反向代理服務(wù)器接收到的請求數(shù)量,就是我們說的負(fù)載量。 這些請求數(shù)量按照一定的規(guī)則進(jìn)行分發(fā)到不同的服務(wù)器處理的規(guī)則,就是一種均衡規(guī)則。 所以,將服務(wù)器接收到的請求按照規(guī)則分發(fā)的過程,稱為負(fù)載均衡
負(fù)載均衡也分硬件負(fù)載均衡和軟件負(fù)載均衡兩種,我們來講的是軟件負(fù)載均衡,關(guān)于硬件負(fù)載均衡的有興趣的靚仔可以去了解下 負(fù)載均衡的算法:
- 輪詢(默認(rèn)、加權(quán)輪詢、ip_hash)
- 插件(fair、url_hash),url_hash和ip_hash大同小異,一個基于ip一個基于url,就不過多介紹了
默認(rèn)輪詢
每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端某個服務(wù)器宕機(jī),能自動剔除故障系統(tǒng)。
# constPolling 作為存放負(fù)載均衡的變量 upstream constPolling { server localhost:10001; server localhost:10002; } server { listen 10000; server_name localhost; location / { proxy_pass http://constPolling; #在代理的時候接入constPolling proxy_redirect default; } }
加權(quán)輪詢
通過設(shè)置weight,值越大分配率越大 到的訪問概率越高,主要用于后端每臺服務(wù)器性能不均衡的情況下。其次是為在主從的情況下設(shè)置不同的權(quán)值,達(dá)到合理有效的地利用主機(jī)資源。
# constPolling 作為存放負(fù)載均衡的變量 upstream constPolling { server localhost:10001 weight=1; server localhost:10002 weight=2; } server { listen 10000; server_name localhost; location / { proxy_pass http://constPolling; #在代理的時候接入constPolling proxy_redirect default; } }
權(quán)重越大,被訪問的概率越大,比如上面就是33.33%和百分66.66%的訪問概率 訪問的效果:
localhost:10001、localhost:10002、localhost:10002、localhost:10001、localhost:10002、localhost:10002
ip_hash
每個請求都根據(jù)訪問ip的hash結(jié)果分配,經(jīng)過這樣的處理,每個訪客固定訪問一個后端服務(wù),如下配置(ip_hash可以和weight配合使用),并且可以有效解決動態(tài)網(wǎng)頁存在的session共享問題
upstream constPolling { ip_hash; server localhost:10001 weight=1; server localhost:10002 weight=2; }
fair
個人比較喜歡用的一種負(fù)載均衡算法,fair算法可以根據(jù)頁面大小和加載時間長短智能地進(jìn)行負(fù)載均衡,響應(yīng)時間短的優(yōu)先分配。
安裝upstream_fair模塊 附上fair安裝教程
哪個服務(wù)器的響應(yīng)速度快,就將請求分配到那個服務(wù)器上
upstream constPolling { server localhost:10001; server localhost:10002; fair; }
五、nginx錯誤頁面配置、開啟Gzip壓縮配置
1.錯誤頁配置
當(dāng)我們訪問的地址不存在的時候,我們可以根據(jù)http狀態(tài)碼來做對應(yīng)的處理,我們以404為例
2.Gzip壓縮
Gzip是網(wǎng)頁的一種網(wǎng)頁壓縮技術(shù),經(jīng)過gzip壓縮后,頁面大小可以變?yōu)樵瓉淼?0%甚至更小。更小的網(wǎng)頁會讓用戶瀏覽的體驗更好,速度更快。gzip網(wǎng)頁壓縮的實(shí)現(xiàn)需要瀏覽器和服務(wù)器的支持
gzip是需要服務(wù)器和瀏覽器同時支持的。當(dāng)瀏覽器支持gzip壓縮時,會在請求消息中包含Accept-Encoding:gzip,這樣Nginx就會向瀏覽器發(fā)送聽過gzip后的內(nèi)容,同時在相應(yīng)信息頭中加入Content-Encoding:gzip,聲明這是gzip后的內(nèi)容,告知瀏覽器要先解壓后才能解析輸出。 如果項目是在ie或者一些兼容性比較低瀏覽器上運(yùn)行的,需要去查閱確定是否瀏覽器支持gzip
server { listen 12089; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/html/gzip; # 開啟gzip壓縮 gzip on; # http請求版本 gzip_http_version 1.0; # 設(shè)置什么類型的文件需要壓縮 gzip_types text/css text/javascript application/javascript image/png image/jpeg image/gif; location / { index index.html index.htm index.php; autoindex off; } }
六、nginx綜合使用場景
同一個域名通過不同目錄指定不同項目目錄
在開發(fā)過程中,有一種場景,比如有項目有多個子系統(tǒng)需要通過同一個域名通過不同目錄去訪問 在A/B Test 灰度發(fā)布等場景也會用上
比如:
訪問 a.com/a/*** 訪問的是a系統(tǒng)
訪問 a.com/b/*** 訪問的是b系統(tǒng)自動適配PC/移動端頁面
限制只能通過谷歌瀏覽器訪問
前端單頁面應(yīng)用刷新404問題
七、常用全局變量
變量 | 含義 |
---|---|
$args | 這個變量等于請求行中的參數(shù),同$query_string |
$content length | 請求頭中的Content-length字段。 |
$content_type | 請求頭中的Content-Type字段。 |
$document_root | 當(dāng)前請求在root指令中指定的值。 |
$host | 請求主機(jī)頭字段,否則為服務(wù)器名稱。 |
$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驗證的用戶名。 |
$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相同。 |
總結(jié)
到此這篇關(guān)于前端ngnix部署的文章就介紹到這了,更多相關(guān)前端ngnix部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx設(shè)置HttpOnly Secure SameSite參數(shù)解決Cookie信息丟失
本文主要介紹了Nginx中Cookie缺少SameSite屬性的問題,并詳細(xì)解釋了HttpOnly、Secure和SameSite屬性的作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11詳解Nginx中的Rewrite的重定向配置與實(shí)踐
這篇文章主要介紹了詳解Nginx中的Rewrite的重定向配置與實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03利用nginx搭建RTMP視頻點(diǎn)播、直播、HLS服務(wù)器
本文主要介紹了利用nginx搭建RTMP視頻點(diǎn)播、直播、HLS服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05實(shí)現(xiàn)Nginx中使用PHP-FPM時記錄PHP錯誤日志的配置方法
最近在本地搭建的LNMP的開發(fā)環(huán)境。為了開發(fā)的時候不影響前端的正常開發(fā)就屏蔽的PHP里面php.ini中的一些錯誤提示。但是這樣一來,就影響到了后端開發(fā)的一些問題比如不能及時調(diào)試開發(fā)中的一些問題2014-05-05Nginx配置四層、七層網(wǎng)絡(luò)代理轉(zhuǎn)發(fā)的方法示例
nginx作為透明代理可以充分利用其高性能和靈活性來實(shí)現(xiàn)網(wǎng)絡(luò)流量的轉(zhuǎn)發(fā)和處理,本文主要介紹了Nginx配置四層、七層網(wǎng)絡(luò)代理轉(zhuǎn)發(fā)的方法示例,具有一定的參考價值,感興趣的可以了解一下2024-03-03生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過程解析
這篇文章主要介紹了生產(chǎn)環(huán)境之Nginx高可用方案實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08