nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪
前言
根據(jù) Netcraft 公布的最新的(2019年10月)Web 服務(wù)器調(diào)查報告,Nginx 的市場份額達(dá)到了 32.69%,毫無爭議地成為了最流行的 Web 服務(wù)器。這主要得益于 Nginx 在性能、穩(wěn)定性和可擴展等方面優(yōu)異的表現(xiàn)。
Nginx 以高性能著稱,為什么 Nginx 的性能這么高呢?要回答這個問題,得先從 Nginx 的進(jìn)程模型說起。Nginx 是多進(jìn)程的,簡單來說,Nginx 包含兩種進(jìn)程:Master 和 Worker 。Master 進(jìn)程是管理進(jìn)程,負(fù)責(zé)控制和監(jiān)控 Worker 進(jìn)程:接收命令,切割日志文件,停止、重新啟動 Worker 進(jìn)程;監(jiān)控 Worker 進(jìn)程,如果發(fā)現(xiàn) Worker 進(jìn)程異常退出,就重新啟動(respawn)一個新的 Worker 進(jìn)程。Worker 進(jìn)程是工作進(jìn)程,負(fù)責(zé)處理客戶端請求。Worker 進(jìn)程可以有多個,Worker 進(jìn)程之間是獨立且對等的,分別競爭(epoll_wait)處理請求(這種競爭有可能發(fā)生驚群效應(yīng))。Nginx 使用了 I/O 多路復(fù)用技術(shù),也就是說,一個 Worker 也可以同時處理成千上萬個請求。
官方測試,Nginx 單機使用 8 個核可以支撐起百萬并發(fā)。于是你興致勃勃地安裝了 Nginx,測試一看 Nginx 的 RPS 最高到十幾萬,再增加核心就沒啥作用了,增加的多了反而下降了。
說好的百萬并發(fā)呢?當(dāng)然首先要說明的是: 十幾萬 RPS 已經(jīng)很高了,要是我的產(chǎn)品能達(dá)到十幾萬 RPS,做夢都能笑醒了。但是追求極致性能是每一個有夢想的開發(fā)者的自我修養(yǎng)!萬一有一天用到了呢!
那么,Nginx 單機性能如何才能突破十幾萬呢?答案是,需要調(diào)優(yōu),從多個角度對 Nginx 進(jìn)行調(diào)優(yōu),比如緩存、CPU 親和性、事件處理模型、IO 操作等等。如果你對高性能服務(wù)器開發(fā)感興趣,你會發(fā)現(xiàn)這些調(diào)優(yōu)的方法正好是高性能服務(wù)器開發(fā)的關(guān)鍵原則!
Nginx的作用是什么?
(1)Nginx 是一個很強大的高性能Web服務(wù)器,在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品,能夠支持高達(dá) 50,000 個并發(fā)連接數(shù)的響應(yīng)。
(2)Nginx作為反向代理服務(wù)器,Nginx在反向代理時,提供性能穩(wěn)定,并且能夠提供配置靈活的轉(zhuǎn)發(fā)功能,Nginx可以根據(jù)不同的正則匹配,采取不同的轉(zhuǎn)發(fā)策略,比如在圖片文件結(jié)尾的走文件服務(wù)器,動態(tài)頁面走web服務(wù)器,對返回結(jié)果進(jìn)行錯誤頁跳轉(zhuǎn),異常判斷等。如果被分的服務(wù)器存在異常,他可以將請求重新轉(zhuǎn)發(fā)給另外一臺服務(wù)器,然后自動去除異常服務(wù)器。
(3)Nginx作為負(fù)載均衡服務(wù)器:Nginx 既可以在內(nèi)部直接支持 Rails 和 PHP 程序?qū)ν膺M(jìn)行服務(wù),也可以支持作為 HTTP代理服務(wù)器對外進(jìn)行服務(wù)。
(4)Nginx作為郵件代理服務(wù)器:Nginx 同時也是一個非常優(yōu)秀的郵件代理服務(wù)器(最早開發(fā)這個產(chǎn)品的目的之一也是作為郵件代理服務(wù)器)。
什么是反向代理
反向代理(Reverse Proxy)方式是指以==代理服務(wù)器來接受 internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請求連接的客戶端==,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。
首先我們理解正向代理:代理客戶端,統(tǒng)一請求網(wǎng)絡(luò)資源
正向代理是針對你的客戶端,而反向代理是針對服務(wù)器的:
這樣操作除了方便外,也更安全,便于統(tǒng)一安全部署,比如:加防火墻
配置反向代理
(1)修改 nginx.conf 配置文件:
worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 配置要代理的 網(wǎng)址 upstream tomcat-travel{ server 192.168.245.129:8080; } # 配置 index 訪問資源 server { listen 80; server_name www.travel.com; location / { # root index; # 對應(yīng)要代理的網(wǎng)址 proxy_pass http://tomcat-travel; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}(2)重新啟動 Nginx 然后用瀏覽器測試:http://www.travel.com (此域名須配置域名指向)
常見問題
在WEB服務(wù)前端配置Nginx的好處是什么?
配置Nginx服務(wù)器,最大的好處得益于反向代理以及負(fù)載均衡的功能。
反向代理
客戶端本來可以直接通過HTTP協(xié)議訪問某網(wǎng)站應(yīng)用服務(wù)器,網(wǎng)站管理員可以在中間加上一個Nginx,客戶端請求Nginx,Nginx請求應(yīng)用服務(wù)器,然后將結(jié)果返回給客戶端,此時Nginx就是反向代理服務(wù)器。
既然服務(wù)器可以直接HTTP訪問,為什么要在中間加上一個反向代理,不是多此一舉嗎?反向代理有什么作用?繼續(xù)往下看,下面的負(fù)載均衡、虛擬主機等,都基于反向代理實現(xiàn),當(dāng)然反向代理的功能也不僅僅是這些。
反向代理
負(fù)載均衡
負(fù)載均衡 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。 負(fù)載均衡,英文名稱為 Load Balance,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行,例如 Web 服務(wù)器、FTP 服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。
1.將請求輪詢分配到應(yīng)用服務(wù)器,也就是一個客戶端的多次請求,有可能會由多臺不同的服務(wù)器處理。
2.服務(wù)器的硬件配置可能有好有差,想把大部分請求分配給好的服務(wù)器,把少量請求分配給差的服務(wù)器,可以通過weight來控制。
負(fù)載均衡方式
配置負(fù)載均衡
(1)修改 nginx.conf 配置文件:
worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 配置要代理的 網(wǎng)址 upstream tomcat-travel{ server 192.168.245.129:8080; server 192.168.245.129:8081; server 192.168.245.129:8082; } # 配置 index 訪問資源 server { listen 80; server_name www.travel.com; location / { # root index; # 對應(yīng)要代理的網(wǎng)址 proxy_pass http://tomcat-travel; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}三種隨機可以訪問到:
(2)如果此時我想要一個 2:1:1 的幾率選擇:
虛擬主機
有的網(wǎng)站訪問量大,需要負(fù)載均衡。然而并不是所有網(wǎng)站都如此出色,有的網(wǎng)站,由于訪問量太小,需要節(jié)省成本,將多個網(wǎng)站部署在同一臺服務(wù)器上。
例如將www.aaa.com和www.bbb.com兩個網(wǎng)站部署在同一臺服務(wù)器上,兩個域名解析到同一個IP地址,但是用戶通過兩個域名卻可以打開兩個完全不同的網(wǎng)站,互相不影響,就像訪問兩個服務(wù)器一樣,所以叫兩個虛擬主機。虛擬主機的原理是通過HTTP請求頭中的Host是否匹配server_name來實現(xiàn)的,客戶端通過不同的域名訪問,根據(jù)server_name可以反向代理到對應(yīng)的應(yīng)用服務(wù)器。
還有別的反向代理服務(wù)器嗎?
其他反向代理服務(wù)器
文章到這里就結(jié)束了!
Nginx調(diào)優(yōu)
2021馬上就要過去了,小編這里整理了一份Nginx 性能調(diào)優(yōu)的思維導(dǎo)圖 ,還有一些微服務(wù)、SSM、 Redis、等技術(shù)真題資料,關(guān)注小編+轉(zhuǎn)發(fā)文章+私信【面試資料】獲取上述資料~ 重要的事情說三遍,轉(zhuǎn)發(fā)+轉(zhuǎn)發(fā)+轉(zhuǎn)發(fā),一定要記得轉(zhuǎn)發(fā)哦!!!
總結(jié)
以上是生活随笔為你收集整理的nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy 点乘_斯坦福CS217(六)
- 下一篇: 自定义曲线_完美动力小课堂:Animat