Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎、并發、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構設計、大廠真題等,在線隨時刷題!
先靈魂拷問一下:寫了一堆接口卻不會部署?服務器被惡意請求打崩過?靜態資源加載慢到用戶想摔手機?別慌!Nginx 作為后端工程師的「部署瑞士軍刀」,能搞定反向代理、負載均衡、限流防刷等一堆騷操作。記住咯:不會部署項目的后端不是一個合格的后端,咱摸魚可以,但服務器必須穩如老狗!
一、Nginx 是啥?能摸魚嗎?
簡單說,Nginx 是個高性能的「反向代理服務器」,就像你公司門口的保安:
? 外部請求先經過它,再轉發到你的后端服務(反向代理)
? 它能同時處理上萬個并發連接,比 Tomcat 單線程傻等強 100 倍(高并發處理)
? 還能幫你處理靜態文件、壓縮數據、防惡意攻擊(摸魚時的安全保鏢)
舉個栗子:寫了個電商接口,直接暴露 IP 怕被攻擊?讓 Nginx 當「中間人」,外部只知道 Nginx 的地址,真實服務器 IP 藏得嚴嚴實實,安心摸魚不怕被抓包!
二、實戰場景一:反向代理 & 負載均衡(高并發必備)
場景:多個后端服務負載不均,大促時部分服務器被壓爆
配置目標:讓 Nginx 把請求均勻轉發到 3 臺后端服務器,隱藏真實 IP,還能自動剔除掛掉的節點
# 全局配置:定義Nginx運行的基本參數 user nginx; # 運行用戶,默認就行 worker_processes 1; # 工作進程數,一般設為CPU核心數,摸魚主機設1也行 # 錯誤日志和PID文件 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # 負載均衡配置:定義后端服務器列表 upstream backend_servers { # 輪詢策略:默認按順序轉發請求 server 192.168.1.10:8080; # 后端服務器A server 192.168.1.11:8080; # 后端服務器B server 192.168.1.12:8080; # 后端服務器C # 進階配置:健康檢查(服務器掛了自動踢掉) least_conn; # 最小連接數策略,哪個服務器空閑就轉發給誰 keepalive 32; # 保持32個長連接,減少TCP三次握手開銷 proxy_next_upstream error timeout http_500; # 轉發失敗時,自動重試下一臺服務器 } # 服務器配置:定義Nginx對外提供服務的端口和規則 server { listen 80; # 監聽80端口(HTTP) server_name www.yourdomain.com; # 域名,改成你的域名或IP # 反向代理規則:所有以/api/開頭的請求轉發到后端服務器 location /api/ { proxy_pass http://backend_servers/; # 轉發到upstream定義的服務器組 # 傳遞客戶端真實IP(后端需要獲取用戶IP時用) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超時配置:防止某個請求長時間阻塞 proxy_connect_timeout 30s; proxy_read_timeout 60s; proxy_send_timeout 60s; } }摸魚關鍵點:
? 后端服務器 IP 全藏在 Nginx 里,外部只能訪問 Nginx 的公網 IP;
? 大促時流量均勻分散到 3 臺服務器,再也不用擔心自己寫的接口被壓崩。
場景:前端小姐姐抱怨圖片 / JS 加載慢,甩鍋說后端接口卡
配置目標:讓 Nginx 直接處理圖片、CSS、JS 等靜態文件,減輕后端壓力
server { listen 80; server_name www.yourdomain.com; # 靜態資源路徑:假設圖片存在/data/images/,JS/CSS在/data/static/ location /static/ { root /data/; # 根路徑,實際文件路徑是/data/static/... autoindex off; # 禁止列出目錄(安全考慮) expires 30d; # 瀏覽器緩存30天,減少重復請求 gzip on; # 開啟壓縮,減小文件傳輸大小 gzip_types text/css application/javascript image/png; # 壓縮類型 } location /images/ { root /data/; # 防盜鏈:防止其他網站盜用你的圖片 valid_referers none blocked www.yourdomain.com; if ($invalid_referer) { return 403; # 非法引用返回403錯誤 } } # 動態請求(如登錄接口)還是轉發給后端 location /api/ { proxy_pass http://backend_servers/; } }摸魚關鍵點:
? 靜態文件直接由 Nginx 返回,速度比后端處理快 10 倍以上;
? 瀏覽器緩存 + 壓縮,用戶第二次訪問秒加載,前端小姐姐再也不甩鍋。
場景:接口被惡意 IP 高頻訪問,服務器日志爆滿
配置目標:限制單個 IP 的并發連接數和請求頻率,拉黑惡意 IP
# 先定義限流策略,放在http塊里(和upstream同級) http { # 1. 并發連接限制:單個IP最多同時保持10個連接 limit_conn_zone $binary_remote_addr zone=ip_conn:10m; # 定義存儲IP連接數的共享內存區 # 2. 請求頻率限制:單個IP每秒最多5個請求(令牌桶算法) limit_req_zone $binary_remote_addr zone=ip_req:10m rate=5r/s; # 每秒生成5個令牌 # 3. 黑白名單:定義允許/禁止訪問的IP段 set $allow_ip "192.168.1.0/24"; # 允許訪問的內網IP段 deny 10.0.0.1; # 單獨禁止某個IP } server { listen 80; server_name www.yourdomain.com; location /api/login { # 登錄接口重點保護 # 應用并發連接限制:每個IP最多10個并發連接 limit_conn ip_conn 10; # 應用請求頻率限制:突發請求最多排隊10個(超出返回503) limit_req zone=ip_req burst=10 nodelay; # 黑白名單檢查 if ($remote_addr !~* $allow_ip) { # 如果IP不在允許列表 return 403; # 禁止訪問 } proxy_pass http://backend_servers/; } }摸魚關鍵點:
? 惡意 IP 頻繁刷接口?直接返回 403,服務器日志再也不會爆了;
? 登錄接口限流后,再也不用擔心被 CC 攻擊打崩。
場景:用戶反饋登錄時瀏覽器提示「不安全」,被產品經理罵哭
配置目標:啟用 HTTPS,讓數據加密傳輸,瀏覽器顯示小綠鎖
server { listen 443 ssl; # 監聽443端口(HTTPS) server_name www.yourdomain.com; # 證書路徑(從CA機構申請的證書和私鑰) ssl_certificate /etc/nginx/ssl/yourdomain.crt; ssl_certificate_key /etc/nginx/ssl/yourdomain.key; ssl_protocols TLSv1.2 TLSv1.3; # 啟用安全的TLS協議版本 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384; # 加密算法 ssl_prefer_server_ciphers on; # 優先使用服務器端的加密算法 # 重定向HTTP到HTTPS(讓用戶輸入http自動轉https) rewrite ^(.*)$ https://$host$1 permanent; location / { proxy_pass http://backend_servers/; } }摸魚關鍵點:
? 小綠鎖一亮,產品經理再也挑不出毛病;
? 數據加密傳輸,用戶密碼不怕被中間人竊取。
六、如何讓 Nginx 跑起來?(摸魚式部署)1.安裝 Nginx:
?Linux:
yum install nginx(CentOS)或apt-get install nginx(Ubuntu)?Windows:官網下載解壓,雙擊nginx.exe(摸魚專用)
sudo systemctl start nginx # 啟動 sudo systemctl restart nginx # 改完配置后重啟3.檢查配置是否正確:nginx -t # 報錯的話回去改配置,別硬啟動!總結:Nginx 摸魚指南
?反向代理:藏好后端 IP,安心摸魚不怕攻擊;
?負載均衡:流量均分,再也不用背鍋服務器崩了;
?靜態資源:讓 Nginx 處理圖片 JS,后端專注寫接口;
?限流防刷:惡意請求全攔下,日志清凈心情好;
?HTTPS:小綠鎖一掛,產品經理笑哈哈。
記住:Nginx 配置不是一次性的!上線后要根據服務器壓力、用戶反饋動態調整,比如大促時加大限流閾值,發現惡意 IP 及時拉黑。
最后送大家一句摸魚箴言:代碼可以慢慢寫,Nginx 必須穩如狗;配置寫對了,摸魚才安心!
來源:https://juejin.cn/post/7510819038953930763
公眾號“Java精選”所發表內容注明來源的,版權歸原出處所有(無法查證版權的或者未注明出處的均來自網絡,系轉載,轉載的目的在于傳遞更多信息,版權屬于原作者。如有侵權,請聯系,筆者會第一時間刪除處理!
最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!
文章有幫助的話,點在看,轉發吧!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.