Nginx配置實(shí)戰(zhàn)之手把手教你搞定生產(chǎn)級配置
先靈魂拷問一下:寫了一堆接口卻不會部署?服務(wù)器被惡意請求打崩過?靜態(tài)資源加載慢到用戶想摔手機(jī)?別慌!Nginx 作為后端工程師的「部署瑞士軍刀」,能搞定反向代理、負(fù)載均衡、限流防刷等一堆騷操作。記住咯:不會部署項(xiàng)目的后端不是一個(gè)合格的后端,咱摸魚可以,但服務(wù)器必須穩(wěn)如老狗!
一、Nginx 是啥?能摸魚嗎?
簡單說,Nginx 是個(gè)高性能的「反向代理服務(wù)器」,就像你公司門口的保安:
外部請求先經(jīng)過它,再轉(zhuǎn)發(fā)到你的后端服務(wù)(反向代理)
它能同時(shí)處理上萬個(gè)并發(fā)連接,比 Tomcat 單線程傻等強(qiáng) 100 倍(高并發(fā)處理)
還能幫你處理靜態(tài)文件、壓縮數(shù)據(jù)、防惡意攻擊(摸魚時(shí)的安全保鏢)
舉個(gè)栗子:你寫了個(gè)電商接口,直接暴露 IP 怕被攻擊?讓 Nginx 當(dāng)「中間人」,外部只知道 Nginx 的地址,真實(shí)服務(wù)器 IP 藏得嚴(yán)嚴(yán)實(shí)實(shí),安心摸魚不怕被抓包!
二、實(shí)戰(zhàn)場景一:反向代理 & 負(fù)載均衡(高并發(fā)必備)
場景:多個(gè)后端服務(wù)負(fù)載不均,大促時(shí)部分服務(wù)器被壓爆
配置目標(biāo):讓 Nginx 把請求均勻轉(zhuǎn)發(fā)到 3 臺后端服務(wù)器,隱藏真實(shí) IP,還能自動剔除掛掉的節(jié)點(diǎn)
# 全局配置:定義Nginx運(yùn)行的基本參數(shù) user nginx; # 運(yùn)行用戶,默認(rèn)就行 worker_processes 1; # 工作進(jìn)程數(shù),一般設(shè)為CPU核心數(shù),摸魚主機(jī)設(shè)1也行 # 錯(cuò)誤日志和PID文件 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # 負(fù)載均衡配置:定義后端服務(wù)器列表 upstream backend_servers { # 輪詢策略:默認(rèn)按順序轉(zhuǎn)發(fā)請求 server 192.168.1.10:8080; # 后端服務(wù)器A server 192.168.1.11:8080; # 后端服務(wù)器B server 192.168.1.12:8080; # 后端服務(wù)器C # 進(jìn)階配置:健康檢查(服務(wù)器掛了自動踢掉) least_conn; # 最小連接數(shù)策略,哪個(gè)服務(wù)器空閑就轉(zhuǎn)發(fā)給誰 keepalive 32; # 保持32個(gè)長連接,減少TCP三次握手開銷 proxy_next_upstream error timeout http_500; # 轉(zhuǎn)發(fā)失敗時(shí),自動重試下一臺服務(wù)器 } # 服務(wù)器配置:定義Nginx對外提供服務(wù)的端口和規(guī)則 server { listen 80; # 監(jiān)聽80端口(HTTP) server_name www.yourdomain.com; # 域名,改成你的域名或IP # 反向代理規(guī)則:所有以/api/開頭的請求轉(zhuǎn)發(fā)到后端服務(wù)器 location /api/ { proxy_pass http://backend_servers/; # 轉(zhuǎn)發(fā)到upstream定義的服務(wù)器組 # 傳遞客戶端真實(shí)IP(后端需要獲取用戶IP時(shí)用) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超時(shí)配置:防止某個(gè)請求長時(shí)間阻塞 proxy_connect_timeout 30s; proxy_read_timeout 60s; proxy_send_timeout 60s; } }
摸魚關(guān)鍵點(diǎn):
后端服務(wù)器 IP 全藏在 Nginx 里,外部只能訪問 Nginx 的公網(wǎng) IP
大促時(shí)流量均勻分散到 3 臺服務(wù)器,再也不用擔(dān)心自己寫的接口被壓崩
三、實(shí)戰(zhàn)場景二:靜態(tài)資源處理 & 動靜分離(網(wǎng)頁加載速度起飛)
場景:前端小姐姐抱怨圖片 / JS 加載慢,甩鍋說后端接口卡
配置目標(biāo):讓 Nginx 直接處理圖片、CSS、JS 等靜態(tài)文件,減輕后端壓力
server { listen 80; server_name www.yourdomain.com; # 靜態(tài)資源路徑:假設(shè)圖片存在/data/images/,JS/CSS在/data/static/ location /static/ { root /data/; # 根路徑,實(shí)際文件路徑是/data/static/... autoindex off; # 禁止列出目錄(安全考慮) expires 30d; # 瀏覽器緩存30天,減少重復(fù)請求 gzip on; # 開啟壓縮,減小文件傳輸大小 gzip_types text/css application/javascript image/png; # 壓縮類型 } location /images/ { root /data/; # 防盜鏈:防止其他網(wǎng)站盜用你的圖片 valid_referers none blocked www.yourdomain.com; if ($invalid_referer) { return 403; # 非法引用返回403錯(cuò)誤 } } # 動態(tài)請求(如登錄接口)還是轉(zhuǎn)發(fā)給后端 location /api/ { proxy_pass http://backend_servers/; } }
摸魚關(guān)鍵點(diǎn):
靜態(tài)文件直接由 Nginx 返回,速度比后端處理快 10 倍以上
瀏覽器緩存 + 壓縮,用戶第二次訪問秒加載,前端小姐姐再也不甩鍋
四、實(shí)戰(zhàn)場景三:限流防刷 & IP 黑白名單(防惡意攻擊)
場景:接口被惡意 IP 高頻訪問,服務(wù)器日志爆滿
配置目標(biāo):限制單個(gè) IP 的并發(fā)連接數(shù)和請求頻率,拉黑惡意 IP
# 先定義限流策略,放在http塊里(和upstream同級) http { # 1. 并發(fā)連接限制:單個(gè)IP最多同時(shí)保持10個(gè)連接 limit_conn_zone $binary_remote_addr zone=ip_conn:10m; # 定義存儲IP連接數(shù)的共享內(nèi)存區(qū) # 2. 請求頻率限制:單個(gè)IP每秒最多5個(gè)請求(令牌桶算法) limit_req_zone $binary_remote_addr zone=ip_req:10m rate=5r/s; # 每秒生成5個(gè)令牌 # 3. 黑白名單:定義允許/禁止訪問的IP段 set $allow_ip "192.168.1.0/24"; # 允許訪問的內(nèi)網(wǎng)IP段 deny 10.0.0.1; # 單獨(dú)禁止某個(gè)IP } server { listen 80; server_name www.yourdomain.com; location /api/login { # 登錄接口重點(diǎn)保護(hù) # 應(yīng)用并發(fā)連接限制:每個(gè)IP最多10個(gè)并發(fā)連接 limit_conn ip_conn 10; # 應(yīng)用請求頻率限制:突發(fā)請求最多排隊(duì)10個(gè)(超出返回503) limit_req zone=ip_req burst=10 nodelay; # 黑白名單檢查 if ($remote_addr !~* $allow_ip) { # 如果IP不在允許列表 return 403; # 禁止訪問 } proxy_pass http://backend_servers/; } }
摸魚關(guān)鍵點(diǎn):
惡意 IP 頻繁刷接口?直接返回 403,服務(wù)器日志再也不會爆了
登錄接口限流后,再也不用擔(dān)心被 CC 攻擊打崩
五、實(shí)戰(zhàn)場景四:HTTPS 配置(數(shù)據(jù)加密傳輸)
場景:用戶反饋登錄時(shí)瀏覽器提示「不安全」,被產(chǎn)品經(jīng)理罵哭
配置目標(biāo):啟用 HTTPS,讓數(shù)據(jù)加密傳輸,瀏覽器顯示小綠鎖
server { listen 443 ssl; # 監(jiān)聽443端口(HTTPS) server_name www.yourdomain.com; # 證書路徑(從CA機(jī)構(gòu)申請的證書和私鑰) ssl_certificate /etc/nginx/ssl/yourdomain.crt; ssl_certificate_key /etc/nginx/ssl/yourdomain.key; ssl_protocols TLSv1.2 TLSv1.3; # 啟用安全的TLS協(xié)議版本 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384; # 加密算法 ssl_prefer_server_ciphers on; # 優(yōu)先使用服務(wù)器端的加密算法 # 重定向HTTP到HTTPS(讓用戶輸入http自動轉(zhuǎn)https) rewrite ^(.*)$ https://$host$1 permanent; location / { proxy_pass http://backend_servers/; } }
摸魚關(guān)鍵點(diǎn):
小綠鎖一亮,產(chǎn)品經(jīng)理再也挑不出毛病
數(shù)據(jù)加密傳輸,用戶密碼不怕被中間人竊取
六、如何讓 Nginx 跑起來?(摸魚式部署)
1.安裝 Nginx:
Linux:yum install nginx(CentOS)或apt-get install nginx(Ubuntu)
Windows:官網(wǎng)下載解壓,雙擊nginx.exe(摸魚專用)
2.啟動 / 重啟:
sudo systemctl start nginx # 啟動 sudo systemctl restart nginx # 改完配置后重啟
3.檢查配置是否正確:
nginx -t # 報(bào)錯(cuò)的話回去改配置,別硬啟動!
總結(jié):Nginx 摸魚指南
反向代理:藏好后端 IP,安心摸魚不怕攻擊
負(fù)載均衡:流量均分,再也不用背鍋服務(wù)器崩了
靜態(tài)資源:讓 Nginx 處理圖片 JS,后端專注寫接口
限流防刷:惡意請求全攔下,日志清凈心情好
HTTPS:小綠鎖一掛,產(chǎn)品經(jīng)理笑哈哈
記?。?strong>Nginx 配置不是一次性的!上線后要根據(jù)服務(wù)器壓力、用戶反饋動態(tài)調(diào)整,比如大促時(shí)加大限流閾值,發(fā)現(xiàn)惡意 IP 及時(shí)拉黑。
到此這篇關(guān)于Nginx配置實(shí)戰(zhàn)之手把手教你搞定生產(chǎn)級配置的文章就介紹到這了,更多相關(guān)Nginx配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx服務(wù)器對數(shù)據(jù)傳輸速度限制的基本配置方法講解
這篇文章主要介紹了Nginx服務(wù)器對數(shù)據(jù)傳輸速度限制的基本配置方法講解,包括第三方開發(fā)的限速模塊Nginx-limit-traffic-rate-module的使用介紹,需要的朋友可以參考下2016-01-01Nginx方向代理wss或ws的實(shí)現(xiàn)示例
本文主要介紹了Nginx方向代理wss或ws的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10Nginx+Tomcat負(fù)載均衡集群安裝配置案例詳解
Nginx是一款非常優(yōu)秀的http服務(wù)器軟件,它能夠支持高達(dá)50000個(gè)并發(fā)連接數(shù)的相應(yīng),Nginx+Tomcat負(fù)載均衡集案列是應(yīng)用于生產(chǎn)環(huán)境的一套可靠的Web站點(diǎn)解決方案,對Nginx Tomcat負(fù)載均衡集群相關(guān)知識感興趣的朋友一起看看吧2021-10-10Nginx中worker connections問題的解決方法
這篇文章主要介紹了Nginx中worker connections問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Nginx如何進(jìn)行流量按比例轉(zhuǎn)發(fā)
Nginx 可以借助split_clients指令或通過 weight 參數(shù)以及 Lua 腳本實(shí)現(xiàn)流量按比例轉(zhuǎn)發(fā),下面小編就為大家介紹一下兩種方式具體的操作步驟吧2025-03-03阿里云Nginx配置https實(shí)現(xiàn)域名訪問項(xiàng)目(圖文教程)
這篇文章主要介紹了阿里云Nginx配置https實(shí)現(xiàn)域名訪問項(xiàng)目(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09