新聞中心
無(wú)論是運(yùn)維、開(kāi)發(fā)、測(cè)試,Nginx技術(shù)棧的學(xué)習(xí)總是必不可少的,只是不同的崗位掌握的深度與廣度不同而已。所以,民工哥利用周末休息時(shí)間,將往期推送的Nginx文章給大家重新整理出來(lái),整理出成體系的Nginx知識(shí)體系,供大家學(xué)習(xí)與參考。

創(chuàng)新互聯(lián)建站專(zhuān)注于瑤海網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供瑤海營(yíng)銷(xiāo)型網(wǎng)站建設(shè),瑤海網(wǎng)站制作、瑤海網(wǎng)頁(yè)設(shè)計(jì)、瑤海網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造瑤海網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供瑤海網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
碼字不易,如有幫助,請(qǐng)點(diǎn)在看與轉(zhuǎn)發(fā)朋友圈支持一波,感謝?。。?!
Nginx 簡(jiǎn)介
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)單。
官方網(wǎng)站:http://www.nginx.org
Nginx 特點(diǎn)
Web服務(wù)器
高性能的WEB服務(wù)器軟件,與Apache相比,它支持更多的并發(fā)連接且占用服務(wù)器資源少,效率高
反向代理或負(fù)載均衡服務(wù)器
作為負(fù)載均衡服務(wù)器,它可以作為HTTP SERVER或DB等服務(wù)的代理服務(wù)器,類(lèi)似Haproxy代理軟件的功能,Nginx的代理功能相對(duì)簡(jiǎn)單,效率也不及Haproxy,同時(shí)它也是一個(gè)優(yōu)秀的郵件代理服務(wù)軟件
緩存服務(wù)器
Nginx還可以作緩存服務(wù)器,類(lèi)似于專(zhuān)業(yè)的緩存軟件功能
Nginx 優(yōu)缺點(diǎn)
Nginx 優(yōu)點(diǎn)
- 高并發(fā):能支持1-2萬(wàn)甚至更多的并發(fā)連接(靜態(tài)小文件)
- 內(nèi)存消耗少
- 可以做HTTP反向代理——負(fù)載均衡的功能
- 內(nèi)置對(duì)集群節(jié)點(diǎn)服務(wù)器的健康性查功能,不過(guò)功能相對(duì)較弱
- 通過(guò)cache插件可以實(shí)現(xiàn)緩存軟件能夠?qū)崿F(xiàn)的功能
Nginx 的缺點(diǎn)
Nginx 僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn)
對(duì)后端服務(wù)器的健康檢查,只支持通過(guò)端口來(lái)檢測(cè),不支持通過(guò) url來(lái)檢測(cè)。不支持 Session 的直接保持,但能通過(guò) ip_hash 來(lái)解決
Nginx 應(yīng)用場(chǎng)景
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 的很多理念類(lèi)似, 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ù)邏輯的處理,兩者可以完美組合。
用一張圖表示:
Apache VS Nginx
Apache和Nginx都屬于Web服務(wù)器,兩者都實(shí)現(xiàn)了HTTP 1.1協(xié)議。無(wú)論是選擇哪個(gè),都是根據(jù)應(yīng)用場(chǎng)景來(lái)決定的,所以些文件僅從應(yīng)用場(chǎng)景出發(fā),來(lái)對(duì)比兩者之間的各自特點(diǎn)。要讓正確的工具,做出正確的事。
功能對(duì)比
Nginx和Apache一樣,都是HTTP服務(wù)器軟件,在功能實(shí)現(xiàn)上都采用模塊化結(jié)構(gòu)設(shè)計(jì),都支持通用的語(yǔ)言接口,如PHP、Perl、Python等,同時(shí)還支持正向和反向代理、虛擬主機(jī)、URL重寫(xiě)、壓縮傳輸、SSL加密傳輸?shù)取?/p>
- 在功能實(shí)現(xiàn)上,Apache的所有模塊都支持動(dòng)、靜態(tài)編譯,而Nginx模塊都是靜態(tài)編譯的,
- 對(duì)FastCGI的支持,Apache對(duì)Fcgi的支持不好,而Nginx對(duì)Fcgi的支持非常好;
- 在處理連接方式上,Nginx支持epoll,而Apache卻不支持;
- 在空間使用上,Nginx安裝包僅僅只有幾百K,和Nginx比起來(lái)Apache絕對(duì)是龐然大物。
Nginx相對(duì)apache的優(yōu)點(diǎn)
- 輕量級(jí),同樣起web 服務(wù),比apache 占用更少的內(nèi)存及資源
- 靜態(tài)處理,Nginx 靜態(tài)處理性能比 Apache 高 3倍以上
- 抗并發(fā),nginx 處理請(qǐng)求是異步非阻塞的,而apache則是阻塞型的,在高并發(fā)下nginx 能保持低資源低消耗高性能。在- - Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現(xiàn)Apache進(jìn)程數(shù)飆升,從而拒絕服務(wù)的現(xiàn)象。
- 高度模塊化的設(shè)計(jì),編寫(xiě)模塊相對(duì)簡(jiǎn)單
- 社區(qū)活躍,各種高性能模塊出品迅速啊
apache相對(duì)nginx的優(yōu)點(diǎn)
- rewrite,比nginx 的rewrite 強(qiáng)大
- 模塊超多,基本想到的都可以找到
- 少bug,nginx的bug相對(duì)較多
- 超穩(wěn)定
- Apache對(duì)PHP支持比較簡(jiǎn)單,Nginx需要配合其他后端用
Nginx 安裝
本文以CentOS 7.x 系統(tǒng)為例,使用 yum 安裝 Nginx。
yum install nginx -y
安裝完成后,通過(guò) rpm -ql nginx 命令查看 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 # 重啟
Nginxnginx -s stop # 快速關(guān)閉
nginx -s quit # 等待工作進(jìn)程處理完成后關(guān)閉
nginx -T # 查看當(dāng)前 Nginx 最終的配置
nginx -t # 檢查配置是否有問(wèn)題
Nginx 配置文件
Nginx 的配置文件結(jié)構(gòu)如下:
# 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ò)展名與類(lèi)型映射表
default_type application/octet-stream; # 默認(rèn)文件類(lèi)型
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 172.168.22.11; # 禁止訪問(wèn)的ip地址,可以為all
allow 172.168.33.44;# 允許訪問(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ù)載均衡配置不可或缺的部分;
更多關(guān)于Nginx配置文件的介紹可以參考下列文章:
Nginx常用的內(nèi)置變量
Nginx 的進(jìn)程模型
Nginx 服務(wù)器,正常運(yùn)行過(guò)程中:
- 多進(jìn)程:一個(gè) Master 進(jìn)程、多個(gè) Worker 進(jìn)程
- Master 進(jìn)程:管理 Worker 進(jìn)程
- 對(duì)外接口:接收外部的操作(信號(hào))
- 對(duì)內(nèi)轉(zhuǎn)發(fā):根據(jù)外部的操作的不同,通過(guò)信號(hào)管理 Worker
- 監(jiān)控:監(jiān)控 worker 進(jìn)程的運(yùn)行狀態(tài),worker 進(jìn)程異常終止后,自動(dòng)重啟 worker 進(jìn)程
- Worker 進(jìn)程:所有 Worker 進(jìn)程都是平等的
- 實(shí)際處理:網(wǎng)絡(luò)請(qǐng)求,由 Worker 進(jìn)程處理;
- Worker 進(jìn)程數(shù)量:在 nginx.conf 中配置,一般設(shè)置為核心數(shù),充分利用 CPU 資源,同時(shí),避免進(jìn)程數(shù)量過(guò)多,避免進(jìn)程競(jìng)爭(zhēng) CPU 資源,增加上下文切換的損耗。
Nginx優(yōu)化配置
其實(shí)核心內(nèi)容主要是通過(guò)修改 Nginx 配置文件來(lái)進(jìn)行調(diào)優(yōu)的!
在我們的日常工作學(xué)習(xí)中,我們會(huì)該如何去優(yōu)化自己的Nginx服務(wù)器?遇到以下問(wèn)題我們?cè)撊绾翁幚砟兀?/p>
- 如何自定義返回給客戶端的404錯(cuò)誤頁(yè)面
- 如何查看服務(wù)器狀態(tài)信息
- 如何優(yōu)化Nginx并發(fā)量
- .......
Nginx 是如何實(shí)現(xiàn)并發(fā)的?為什么 Nginx 不使用多線程?Nginx常見(jiàn)的優(yōu)化手段有哪些?502錯(cuò)誤可能原因有哪些?這種面試問(wèn)題你肯定是經(jīng)常被問(wèn)到。
最后給大家分享2個(gè)基于HTTPS優(yōu)化案例:
Nginx 日志相關(guān)
介紹完了安裝、配置、優(yōu)化這些常用的場(chǎng)景之后,日志這塊也是非常重要的,大家都知道日常排錯(cuò),日志起著舉足輕重的作用。
Nginx日志主要分為兩種:access_log(訪問(wèn)日志)和error_log(錯(cuò)誤日志)。通過(guò)訪問(wèn)日志我們可以得到用戶的IP地址、瀏覽器的信息,請(qǐng)求的處理時(shí)間等信息。錯(cuò)誤日志記錄了訪問(wèn)出錯(cuò)的信息,可以幫助我們定位錯(cuò)誤的原因。
error_log /var/log/nginx/error.log warn;
#配置錯(cuò)誤日志的級(jí)別及存儲(chǔ)目錄
events {
worker_connections 1024;
}
http {
..................
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;
#配置訪問(wèn)日志存儲(chǔ)目錄
}
由于nginx功能強(qiáng)大,性能突出,越來(lái)越多的web應(yīng)用采用nginx作為http和反向代理的web服務(wù)器。而nginx的訪問(wèn)日志不管是做用戶行為分析還是安全分析都是非常重要的數(shù)據(jù)源之一。如何有效便捷的采集nginx的日志進(jìn)行有效的分析成為大家關(guān)注的問(wèn)題。
Nginx版本升級(jí)
這里我們來(lái)聊一聊,在企業(yè)實(shí)際生產(chǎn)環(huán)境中經(jīng)常遇到的一個(gè)情況,如何升級(jí)Nginx到新的版本和如何回滾至舊版本。
版本升級(jí)其實(shí)就是針對(duì)二進(jìn)制文件的升級(jí),過(guò)程如下:
[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v
nginx version: nginx/1.12.2
[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/
[root@nginx sbin]# mv nginx nginx-1.12.2
#首先備份原來(lái)的舊版本nginx二進(jìn)制文件
[root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./
#拷貝新版本的二進(jìn)制文件到當(dāng)前目錄
注:其實(shí)升級(jí)新版本,最重要的就是平滑升級(jí),讓前端用戶無(wú)感知(也就是不中斷服務(wù),這個(gè)其實(shí)不難,生產(chǎn)中多臺(tái)依次灰度升級(jí))。
對(duì)于升級(jí)來(lái)說(shuō),最難的不是升級(jí),而是回滾,因?yàn)樵趯?shí)際生產(chǎn)環(huán)境回滾的機(jī)率是存在,比如:新版本由于某些未知bug導(dǎo)致與現(xiàn)有應(yīng)用不兼容、或出現(xiàn)運(yùn)行不穩(wěn)定的情況等等。
Nginx 反向代理與負(fù)載均衡
反向代理簡(jiǎn)介
反向代理(Reverse Proxy)方式是指以代理服務(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ù)。
配置實(shí)例
http {
.............
upstream product_server{
127.0.0.1:8081;
}
upstream admin_server{
127.0.0.1:8082;
}
upstream test_server{
127.0.0.1:8083;
}
server {
#默認(rèn)指向product的server
location / {
proxy_pass http://product_server;
}
location /product/{
proxy_pass http://product_server;
}
location /admin/ {
proxy_pass http://admin_server;
}
location /test/ {
proxy_pass http://test_server;
}
}
}
。nginx 每個(gè)location都是一個(gè)匹配目錄,nginx的策略是:訪問(wèn)請(qǐng)求來(lái)時(shí),會(huì)對(duì)訪問(wèn)地址進(jìn)行解析,從上到下逐個(gè)匹配,匹配上就執(zhí)行對(duì)應(yīng)location大括號(hào)中的策略,并根據(jù)策略對(duì)請(qǐng)求作出相應(yīng)。
反向代理的優(yōu)勢(shì):
- 隱藏真實(shí)服務(wù)器;
- 負(fù)載均衡便于橫向擴(kuò)充后端動(dòng)態(tài)服務(wù);
- 動(dòng)靜分離,提升系統(tǒng)健壯性;
Nginx 負(fù)載均衡
nginx能實(shí)現(xiàn)負(fù)載均衡,什么是負(fù)載均衡呢?就是說(shuō)應(yīng)用部署在不同的服務(wù)器上,但是通過(guò)統(tǒng)一的域名進(jìn)入,nginx則對(duì)請(qǐng)求進(jìn)行分發(fā),將請(qǐng)求分發(fā)到不同的服務(wù)器上去處理,這樣就可以有效的減輕了單臺(tái)服務(wù)器的壓力。
配置實(shí)例
upstream server_pools {
server 192.168.1.11:8880 weight=5;
server 192.168.1.12:9990 weight=1;
server 192.168.1.13:8989 weight=6;
#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
}
server {
listen 80;
server_name mingongge.com;
location / {
proxy_pass http://server_pools;
}
}
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ù)器。
- 客戶端 ip 綁定策略:來(lái)自同一個(gè) ip 的請(qǐng)求永遠(yuǎn)只分配一臺(tái)服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁(yè)存在的 session 共享問(wèn)題。
Nginx 動(dòng)靜分離
Nginx動(dòng)靜分離是讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁(yè)根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開(kāi)來(lái),動(dòng)靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。
server {
listen 80;
server_name mingongge.com;
location /static {
root /wwww/web/web_static_site;
}
}
也可以使用下面的方法
location /image {
alias /web/nginx/static/image/;
}
注意:使用alias末尾一定要添加/,并且它只能位于location中
使用前后端分離后,可以很大程度提升靜態(tài)資源的訪問(wèn)速度,即使動(dòng)態(tài)服務(wù)不可用,靜態(tài)資源的訪問(wèn)也不會(huì)受到影響。
Nginx 高級(jí)功能
重定向配置
location / {
return 404; #直接返回狀態(tài)碼
}
location / {
return 404 "pages not found"; #返回狀態(tài)碼 + 一段文本
}
location / {
return 302 /blog ; #返回狀態(tài)碼 + 重定向地址
}
location / {
return https://www.mingongge.com ; #返回重定向地址
}
示例如下
server {
listen 80;
server_name www.mingongge.com;
return 301 http://mingongge.com$request_uri;
}
server {
listen 80;
server_name www.mingongge.com;
location /cn-url {
return 301 http://mingongge.com.cn;
}
}
server{
listen 80;
server_name mingongge.com; # 要在本地hosts文件進(jìn)行配置
root html;
location /search {
rewrite ^/(.*) https://www.mingongge.com redirect;
}
location /images {
rewrite /images/(.*) /pics/$1;
}
location /pics {
rewrite /pics/(.*) /photos/$1;
}
location /photos {
}
}
流量拷貝
需求:將生產(chǎn)環(huán)境的流量拷貝到預(yù)上線環(huán)境或測(cè)試環(huán)境,這樣做有很多好處,比如:
- 可以驗(yàn)證功能是否正常,以及服務(wù)的性能;
- 用真實(shí)有效的流量請(qǐng)求去驗(yàn)證,又不用造數(shù)據(jù),不影響線上正常訪問(wèn);
- 這跟灰度發(fā)布還不太一樣,鏡像流量不會(huì)影響真實(shí)流量;
- 可以用來(lái)排查線上問(wèn)題;
- 重構(gòu),假如服務(wù)做了重構(gòu),這也是一種測(cè)試方式;
限流
Nginx按請(qǐng)求速率限速模塊使用的是漏桶算法,即能夠強(qiáng)行保證請(qǐng)求的實(shí)時(shí)處理速度不會(huì)超過(guò)設(shè)置的閾值。
Nginx官方版本限制IP的連接和并發(fā)分別有兩個(gè)模塊:
- limit_req_zone 用來(lái)限制單位時(shí)間內(nèi)的請(qǐng)求數(shù),即速率限制,采用的漏桶算法 "leaky bucket"。
- limit_req_conn 用來(lái)限制同一時(shí)間連接數(shù),即并發(fā)限制。
緩存
Nginx 緩存作為性能優(yōu)化的一個(gè)重要手段,可以極大減輕后端服務(wù)器的負(fù)載。下面我們將介紹 Nginx 緩存配置的相關(guān)指令以及 http 緩存機(jī)制,以及 Nginx 緩存實(shí)踐案例分析。
灰度發(fā)布
執(zhí)行過(guò)程:
- 當(dāng)用戶請(qǐng)求到達(dá)前端代理服務(wù)Nginx,內(nèi)嵌的lua模塊解析Nginx配置文件中的lua腳本代碼;
- Lua變量獲得客戶端IP地址,去查詢memcached緩存內(nèi)是否有該鍵值,如果有返回值執(zhí)行@client_test,否則執(zhí)行@client。
- Location @client_test把請(qǐng)求轉(zhuǎn)發(fā)給部署了new版代碼的服務(wù)器,location @client把請(qǐng)求轉(zhuǎn)發(fā)給部署了normal版代碼的服務(wù)器,服務(wù)器返回結(jié)果。整個(gè)過(guò)程完成。
封殺惡意訪問(wèn)
看了 nginx 的訪問(wèn)日志,發(fā)現(xiàn)每天有好多國(guó)外的 IP 地址來(lái)訪問(wèn)我的網(wǎng)站,并且訪問(wèn)的內(nèi)容基本上都是惡意的。因此我決定禁止國(guó)外 IP 來(lái)訪問(wèn)我的網(wǎng)站
Nginx+keepalived 實(shí)現(xiàn)高可用
Keepalived軟件起初是專(zhuān)為L(zhǎng)VS負(fù)載均衡軟件設(shè)計(jì)的,用來(lái)管理并監(jiān)控LVS集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài),后來(lái)又加入了可以實(shí)現(xiàn)高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協(xié)議)功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。keepalived高可用集群服務(wù)
Nginx 終極指南
介紹用來(lái)提高Nginx服務(wù)器的安全性,穩(wěn)定性和性能的12種操作。
- 保持Nginx的及時(shí)升級(jí)
- 去掉不用的Nginx模塊
- 禁用server_tokens項(xiàng)
- 禁止非法的HTTP User Agents
- 禁掉不需要的 HTTP 方法
- 設(shè)置緩沖區(qū)容量上限
- 限制最大連接數(shù)
- 設(shè)置日志監(jiān)控
- 阻止圖片外鏈
- 禁止 SSL 并且只打開(kāi) TLS
- 證書(shū)加密(HTTPS)
- 重定向HTTP請(qǐng)求到HTTPS
Nginx 監(jiān)控
監(jiān)控Web服務(wù)器對(duì)于查看網(wǎng)站上發(fā)生的情況至關(guān)重要。關(guān)注最多的便是日志變動(dòng),查看實(shí)時(shí)日志文件變動(dòng)大家第一反應(yīng)應(yīng)該是'tail -f /path/to/log'命令吧,但是如果每個(gè)網(wǎng)站的訪問(wèn)日志都是使用這種方式查看也是相當(dāng)崩潰的,今天小編就跟大家分享一個(gè)強(qiáng)大的Nginx日志監(jiān)控工具。
日常生產(chǎn)環(huán)境搭建了Nginx集群后,就需要繼續(xù)深入研究的就是日常Nginx監(jiān)控。Nginx如何監(jiān)控?相信百度就可以找到:nginx-status
通過(guò)Nginx-status,實(shí)時(shí)獲取到Nginx監(jiān)控?cái)?shù)據(jù)后,如何和現(xiàn)有監(jiān)控系統(tǒng)集成?一個(gè)很好的解決方案:Nginx+Telegraf+Influxdb+Grafana
即通過(guò)Telegraf監(jiān)控插件定時(shí)收集Nginx的監(jiān)控狀態(tài),存儲(chǔ)到時(shí)序數(shù)據(jù)庫(kù)Influxdb中,然后通過(guò)Grafana展現(xiàn)即可。
這是我發(fā)現(xiàn)的又一款管理神器,可以實(shí)現(xiàn)配置管理,和性能監(jiān)控。
文章題目:神器Nginx的學(xué)習(xí)手冊(cè)
標(biāo)題URL:http://fisionsoft.com.cn/article/dphjjhi.html


咨詢
建站咨詢
