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

