一:正向代理
? ? ? ?正向代理(Forward Proxy)是一種位于客戶端和原始服務器之間的代理服務器,其主要作用是將客戶端的請求轉發給目標服務器,并將響應返回給客戶端Nginx的正向代理充當客戶端的“中間人”,代表用戶訪問外部資源并隱藏真實IP。它是企業內網管控、安全審計與加速訪問的核心工具。用于場景一般是:
- 內網訪問控制:限制員工訪問特定網站(如社交媒體)
- 匿名訪問:通過代理服務器隱藏用戶真實身份。
- 資源緩存加速:緩存公共資源(和軟件包、鏡像文件》,減少外網帶寬消耗。
1.編譯安裝
(1)安裝支持軟件
在編譯安裝 Nginx 之前,需要安裝一些必要的支持軟件。以常見的 Linux 系統(如 CentOS)為例:
gcc
:GNU 編譯器套件,用于編譯 Nginx 的 C 代碼,可通過?yum install gcc
?安裝。pcre
(Perl Compatible Regular Expressions):Perl 兼容正則表達式庫,Nginx 對 URL 等的正則匹配依賴它,安裝命令為?yum install pcre pcre-devel
。zlib
:用于數據壓縮,Nginx 對 HTTP 響應的壓縮會用到,安裝指令是?yum install zlib zlib-devel
。openssl
:提供加密功能,當你需要配置 HTTPS 時會用到,安裝方式為?yum install openssl openssl-devel
。
(2)創建運行用戶,組和日志目錄
為了安全和權限管理,不建議以 root 用戶運行 Nginx。
- 創建用戶組:
groupadd nginx
- 創建用戶并加入用戶組:
useradd -r -g nginx nginx
- 創建日志目錄:
mkdir /var/log/nginx
- 設置目錄權限:
chown -R nginx:nginx /var/log/nginx
(3)編譯安裝Nginx?
- 下載 Nginx 源碼包,可從官方網站獲取。
- 解壓源碼包:
tar -zxvf nginx-x.x.x.tar.gz
(x.x.x
?為版本號) - 進入解壓后的目錄:
cd nginx-x.x.x
- 配置編譯選項,例如:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
其中?--user
?和?--group
?指定運行 Nginx 的用戶和組;--prefix
?指定安裝目錄;--with-http_ssl_module
?表示啟用 HTTPS 模塊。 - 編譯并安裝:
make
make install
(4)添加Nginx系統服務
為了方便管理 Nginx 的啟動、停止和重啟,可將其添加為系統服務。以 CentOS 7 為例,創建?/etc/systemd/system/nginx.service
?文件,內容如下:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
2.配置正向代理
(1)編輯主文件添加正向代理相關配置:
打開 Nginx 配置文件(默認在?/usr/local/nginx/conf/nginx.conf
),在?http
?塊中添加如下配置示例:
http {upstream target_server {server target.example.com:80; # 目標服務器地址和端口}server {listen 8080; # 本地監聽端口location / {proxy_pass http://target_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
(2)驗證正向代理:
? ? ? 配置完成后,重啟 Nginx 服務。在客戶端設置代理服務器為運行 Nginx 的服務器地址和監聽端口(如 8080),然后訪問目標服務器資源,查看 Nginx 日志(/var/log/nginx/access.log
)確認請求是否通過正向代理成功轉發。
二:反向代理
? ? ? 反向代理是指代理服務器接受客戶端請求,然后將請求轉發到后端的多個服務器,并將后端服務器的響應返回給客戶端,隱藏了后端服務器的真實地址
1.配置nginx七層代理
(1)環境安裝
? ? 確保已安裝好 Nginx 及相關依賴,安裝過程同正向代理部分的編譯安裝步驟。
(2)配置 nginx 七層代理轉發
在 Nginx 配置文件的?http
?塊中配置后端服務器組和代理規則,示例如下:
http {upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
(3)驗證轉發效果
? ? ? ?重啟 Nginx 服務后,通過客戶端訪問 Nginx 服務器的 IP 和端口,查看請求是否正確轉發到后端服務器,可查看后端服務器的日志確認請求到達情況。
2.配置nginx四層代理
(1)配置四層代理
在 Nginx 配置文件中使用?stream
?塊進行四層代理配置,示例如下:
stream {upstream tcp_backend_servers {server backend1.example.com:3306;server backend2.example.com:3306;}server {listen 3306;proxy_pass tcp_backend_servers;}
}
(2)驗證四層代理
? ? ? 使用客戶端連接到 Nginx 服務器的四層代理端口(如 3306),檢查是否能正確連接到后端服務器,可通過后端服務器的連接日志進行確認。
三:Nginx緩存
? ? ? 使用客戶端連接到 Nginx 服務器的四層代理端口(如 3306),檢查是否能正確連接到后端服務器,可通過后端服務器的連接日志進行確認。
1.緩存功能的核心原理和緩存類型
緩存功能的核心原理
Nginx 將用戶請求的響應數據存儲在本地緩存中,當有相同請求再次到來時,直接從緩存中返回數據,而無需再次向后端服務器請求。
緩存類型
- 代理緩存:用于代理請求時,緩存后端服務器的響應內容。
- 瀏覽器緩存:通過設置 HTTP 響應頭(如?
Cache-Control
、Expires
?等),讓瀏覽器緩存資源,減少重復請求。
2.代理緩存功能設置
(1)反向代理配置
在反向代理的基礎上,添加緩存相關配置,示例如下:
http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}
}
(2)設置緩存功能
? ? proxy_cache_path
?指令定義了緩存路徑、層級結構、緩存區域名稱、大小、非活動緩存的過期時間等。proxy_cache
?指定使用的緩存區域,proxy_cache_valid
?設置不同響應狀態碼的緩存有效期。
(3)驗證緩存功能
? ? ? 重啟 Nginx 服務后,多次請求相同資源,查看 Nginx 日志(/var/log/nginx/access.log
)中的緩存命中情況,也可查看緩存目錄下的文件變化來確認緩存是否生效。
四:Nginx rewrite和正則
1.Nginx正則
? ? ? Nginx 支持 Perl 兼容正則表達式(PCRE),用于匹配 URL、請求頭等字符串。常見的正則表達式元字符包括?.
(匹配任意單個字符)、*
(匹配前面的字符零次或多次)、+
(匹配前面的字符一次或多次)、^
(匹配字符串開頭)、$
(匹配字符串結尾)等。
2.nginx location
(1)location 的語法
location [= | ~ | ~* | ^~] /uri/ { ... }
=
:精確匹配 URL,優先級最高。~
:區分大小寫的正則匹配。~*
:不區分大小寫的正則匹配。^~
:以指定字符串開頭的匹配,一旦匹配成功就不再進行正則匹配。
(2)location驗證
? ? ? 通過配置不同的?location
?塊,訪問相應的 URL,查看 Nginx 是否按照配置的規則進行處理,可通過查看 Nginx 日志(/var/log/nginx/error.log
?和?access.log
)來確認處理情況。
3.Rewrite
(1)Rewrite語法
rewrite regex replacement [flag];
regex
?是用于匹配的正則表達式,replacement
?是替換后的字符串,flag
?是可選的標志,常見的有:
last
:停止處理當前?server
?塊內后續的?rewrite
?指令,重新匹配?location
。break
:停止處理當前?location
?內后續的?rewrite
?指令。redirect
:返回 302 臨時重定向。permanent
:返回 301 永久重定向。
(2)rewrite flag驗證
? ? ? 配置不同?flag
?的?rewrite
?指令,訪問相應的 URL,查看瀏覽器的地址欄變化和 Nginx 的日志記錄,確認?flag
?是否按預期工作。
(3)rewrite 中的捕獲組
在正則表達式中使用括號?()
?定義捕獲組,在?replacement
?中可以使用?$1
、$2
?等引用捕獲組的內容。例如:
rewrite ^/user/(\d+)$ /profile?id=$1 last;
(4)nginx中的set指令
set $variable value;
?用于設置變量,可在?rewrite
?等指令中使用設置的變量,增強配置的靈活性。例如:
set $new_uri /new_path;
rewrite ^/old_path$ $new_uri last;