Nginx正向代理與反向代理及配置文件全解析
1. Nginx簡介與應用場景
Nginx是一款高性能的開源Web服務器和反向代理服務器,廣泛應用于高并發(fā)場景,如靜態(tài)資源托管、負載均衡、API網(wǎng)關等。其核心優(yōu)勢包括:
- 事件驅(qū)動模型:異步非阻塞架構(gòu),支持數(shù)萬并發(fā)連接。
- 模塊化設計:通過模塊擴展功能(如HTTP/2、gzip壓縮)。
- 輕量高效:內(nèi)存占用低,適合資源受限環(huán)境。
典型應用場景:
- 靜態(tài)文件托管
- 反向代理動態(tài)應用(如Node.js、Java服務)
- 負載均衡集群
- 安全防護(如DDoS防御、HTTPS加密)
2. 正向代理與反向代理的核心區(qū)別
2.1 正向代理(Forward Proxy)
- 定義:代理客戶端訪問外部資源,客戶端主動配置代理。
- 特點:
- 隱藏客戶端真實IP(如公司內(nèi)網(wǎng)訪問互聯(lián)網(wǎng))。
- 突破訪問限制(如訪問被封鎖的網(wǎng)站)。
配置示例:
server { listen 3128; # 監(jiān)聽端口 resolver 8.8.8.8; # DNS解析服務器 location / { proxy_pass http://$http_host; # 轉(zhuǎn)發(fā)所有請求 } }
2.2 反向代理(Reverse Proxy)
- 定義:代理服務端接收客戶端請求,客戶端無感知后端服務。
- 特點:
- 隱藏后端服務器,提供負載均衡和安全防護。
- 支持動態(tài)應用加速(如緩存、SSL終止)。
配置示例:
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; # 轉(zhuǎn)發(fā)到后端集群 proxy_set_header Host $host; # 傳遞原始域名 } }
對比總結(jié):
特性 | 正向代理 | 反向代理 |
---|---|---|
配置主體 | 客戶端 | 服務端 |
隱藏對象 | 客戶端IP | 后端服務IP |
典型用途 | 訪問控制、匿名訪問 | 負載均衡、安全防護 |
3. Nginx配置文件結(jié)構(gòu)總覽
Nginx的配置文件默認路徑為/etc/nginx/nginx.conf
,支持模塊化設計,包含以下核心層級:
# 全局塊(Main Context) user nginx; worker_processes auto; # events塊(Events Context) events { worker_connections 1024; } # http塊(HTTP Context) http { # HTTP全局配置 include mime.types; # server塊(虛擬主機) server { # server塊配置 listen 80; # location塊(請求路徑匹配) location / { root /var/www/html; } } } # stream塊(TCP/UDP代理,可選) stream { server { listen 3306; proxy_pass backend_mysql; } }
4.Nginx配置文件結(jié)構(gòu)全解析
1.全局塊(Main Context)
- 作用范圍:影響整個Nginx進程的全局配置。
- 核心指令:
user nginx; # 運行Nginx的用戶和組(安全必備) worker_processes auto; # 工作進程數(shù)(建議設為CPU核心數(shù)) error_log /var/log/nginx/error.log warn; # 錯誤日志路徑與級別(debug/info/notice/warn/error) pid /var/run/nginx.pid; # 存儲主進程PID的文件路徑
2.events塊(Events Context)
- 作用范圍:定義Nginx處理網(wǎng)絡連接的事件模型參數(shù)。
- 核心指令:
events { worker_connections 1024; # 單個工作進程的最大并發(fā)連接數(shù)(總并發(fā)量= worker_processes × worker_connections) use epoll; # 事件模型(Linux推薦epoll,F(xiàn)reeBSD用kqueue) multi_accept on; # 一次性接受所有新連接 accept_mutex off; # 高并發(fā)時建議關閉互斥鎖(減少上下文切換) }
3.http塊(HTTP Context)
3.1 http
塊全局指令
- 作用范圍:所有HTTP請求的全局配置。
- 核心指令:
http { # 基礎配置 include /etc/nginx/mime.types; # 包含MIME類型定義文件 default_type application/octet-stream; # 默認響應類型(未知文件類型時使用) # 日志配置 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log main; # 訪問日志路徑與格式 error_log /var/log/nginx/error.log warn; # 性能優(yōu)化 sendfile on; # 啟用高效文件傳輸模式 tcp_nopush on; # 僅在sendfile開啟時有效,減少網(wǎng)絡包數(shù)量 keepalive_timeout 65; # 長連接超時時間(單位秒) client_max_body_size 100m; # 客戶端請求體最大限制(防DDoS) # 壓縮配置 gzip on; gzip_types text/plain text/css application/json; # 安全增強 server_tokens off; # 隱藏Nginx版本號 }
3.2 server塊(虛擬主機配置)
- 作用范圍:定義單個虛擬主機(一個
http
塊可包含多個server
塊)。 - 核心指令:
server { listen 80; # 監(jiān)聽端口(可指定IP,如listen 192.168.1.1:80) server_name example.com; # 匹配的域名(支持通配符和正則表達式) root /var/www/html; # 網(wǎng)站根目錄 index index.html; # 默認首頁文件 # SSL配置(HTTPS) listen 443 ssl; ssl_certificate /etc/ssl/certs/example.crt; ssl_certificate_key /etc/ssl/private/example.key; # 訪問控制 deny 192.168.1.100; # 禁止特定IP訪問 allow all; # 錯誤頁面重定向 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; }
3.3 location
塊(請求路徑匹配)
- 作用范圍:在
server
塊內(nèi)定義,根據(jù)URI路徑匹配處理規(guī)則。 - 匹配模式:
- 精確匹配:
location = /path { ... }
- 前綴匹配:
location /prefix/ { ... }
- 正則匹配:
location ~ \.php$ { ... }
(區(qū)分大小寫)location ~* \.jpg$ { ... }
(不區(qū)分大小寫)
- 精確匹配:
常用指令:
location / { try_files $uri $uri/ /index.html; # 靜態(tài)文件優(yōu)先匹配,不存在則返回首頁 } location /images/ { alias /data/static/images/; # 路徑別名(替換URI中的/images/) expires 30d; # 瀏覽器緩存30天 } location /api/ { proxy_pass http://backend_server; # 反向代理到后端服務 proxy_set_header Host $host; # 傳遞原始域名 proxy_set_header X-Real-IP $remote_addr; # 傳遞客戶端真實IP } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 轉(zhuǎn)發(fā)PHP請求到FastCGI服務 include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
3.4 upstream
塊(負載均衡配置)
- 作用范圍:在
http
塊內(nèi)定義后端服務器集群,用于負載均衡。 - 核心指令:
upstream backend { # 負載均衡策略(默認輪詢) least_conn; # 最少連接數(shù)策略 # ip_hash; # 按客戶端IP哈希分配(會話保持) # 后端服務器列表 server 10.0.0.1:8080 weight=3; # 權(quán)重越高,分配請求越多 server 10.0.0.2:8080; server 10.0.0.3:8080 backup; # 備用服務器(主服務器宕機時啟用) } server { location / { proxy_pass http://backend; # 使用upstream配置的集群 } }
3.5stream
塊(TCP/UDP代理)
- 作用范圍:處理非HTTP流量(如數(shù)據(jù)庫、SSH、DNS)。
- 核心指令:
stream { upstream backend_mysql { server 10.0.0.1:3306; server 10.0.0.2:3306; } server { listen 3306; # 監(jiān)聽TCP端口 proxy_pass backend_mysql; proxy_connect_timeout 5s; } }
5. 配置文件示例與注釋
# 全局塊 user www-data; worker_processes auto; error_log /var/log/nginx/error.log warn; # events塊 events { worker_connections 2048; use epoll; } # http塊 http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # 虛擬主機1:靜態(tài)資源服務 server { listen 80; server_name static.example.com; root /var/www/static; location / { expires 7d; add_header Cache-Control "public"; } } # 虛擬主機2:反向代理動態(tài)應用 server { listen 80; server_name api.example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; } } # 負載均衡配置 upstream backend { server 10.0.0.1:8080; server 10.0.0.2:8080; } } # stream塊(MySQL負載均衡) stream { upstream mysql_cluster { server 10.0.0.1:3306; server 10.0.0.2:3306; } server { listen 3306; proxy_pass mysql_cluster; } }
到此這篇關于Nginx正向代理與反向代理及配置文件全解析的文章就介紹到這了,更多相關nginx正向代理與反向代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx+keepalived實現(xiàn)七層的負載均衡的高可用(最新解決方案)
這篇文章主要介紹了Nginx+keepalived實現(xiàn)七層的負載均衡的高可用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03Nginx配置多個端口進行監(jiān)聽的實現(xiàn)
隨著容器的應用越來越多,將nginx部署在容器中也是常有之事,本文主要介紹了Nginx配置多個端口進行監(jiān)聽的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Nginx應對Permission denied和File not found的配置
這篇文章主要介紹了Nginx應對Permission denied和File not found的錯誤配置,文中介紹了兩個PHP程序使用時出現(xiàn)相關問題后的解決案例,需要的朋友可以參考下2015-12-12Nginx+Tomcat搭建高性能負載均衡集群的實現(xiàn)方法
這篇文章主要介紹了Nginx+Tomcat搭建高性能負載均衡集群的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03