nginx代理有三種模式
正向代理 反向代理 透明代理
透明代理不怎么常用。
這里主要討論的是正向代理和反向代理
首先要熟悉nginx的常用配置,大致了解它們的功能與用途以及配置參數
配置語法
語法:proxy_buffering on | off;
默認值:proxy_buffering on;
可配置段:http, server, location
作用:配置proxy緩沖區。
擴展:
- proxy_buffer_size:設置緩沖區大小(內存頁大小)
- proxy_buffers:設置緩沖區數量和大小(內存頁數量和大小)
- proxy_busy_buffers_size:設置最大緩沖區大小
語法:proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement;
默認值:proxy_redirect default;
可配置段:http, server, location
作用:配置proxy重定向。
擴展:
語法:proxy_buffering on | off;
默認值:proxy_buffering on;
可配置段:http, server, location
作用:配置proxy緩沖區。
擴展:
語法:proxy_set_header field value;
默認值:proxy_set_header Host $proxy_host; proxy_set_header Connection close;
可配置段:http, server, location
作用:配置proxy頭信息。
擴展:
- proxy_hide_header:設置隱藏頭信息字段;
- proxy_set_body:設置請求體返回信息。
語法:proxy_connect_timeout time;
默認值:proxy_connect_timeout 60s;
可配置段:http, server, location
作用:配置proxy超時。
擴展:
- proxy_hide_header:設置隱藏頭信息字段;
- proxy_set_body:設置請求體返回信息。
正向代理配置
vi /etc/nginx/conf.d/reverse.conf server{ resolver 8.8.8.8; #配置DNS解析IP地址 resolver_timeout 30s; #超時時間(5秒) listen 8080; access_log /var/log/nginx/reverse.access.log main; error_log /var/log/nginx/reverse.error.log warn; location / { proxy_pass http://$http_host$request_uri; #配置正向代理參數 proxy_set_header Host $http_host; #解決如果URL中帶"."后Nginx 503錯誤 proxy_buffers 256 4k; #配置緩存大小 proxy_max_temp_file_size 0; #關閉磁盤緩存讀寫減少I/O proxy_connect_timeout 30; #代理連接超時時間 proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; #配置代理服務器緩存時間 } }
nginx -t -c /etc/nginx/nginx.conf #檢查配置文件
nginx -s reload
配置釋義:
不能有hostname。
必須有resolver, 即dns,超時時間(30秒)可選。
配置正向代理參數,均是由 Nginx 變量組成。
提示:配置好后,重啟nginx,以瀏覽器為例,若需要使用這個代理服務器,則只需將瀏覽器代理設置為http://+服務器ip地址+:+80即可使用了。
反向代理配置
server {
listen
80
;
server_name forward.linuxds.com;
access_log
/
var
/
log
/
nginx
/
forward.access.log main;
error_log
/
var
/
log
/
nginx
/
forward.error.log warn;
location
/
{
proxy_pass https:
/
/
www.landiannews.com
/
;
proxy_redirect off;
# proxy_set_header Host $host;
proxy_set_header X
-
Real
-
IP $remote_addr;
proxy_set_header X
-
Forwarded
-
For $proxy_add_x_forwarded_for;
client_max_body_size
10m
;
#允許客戶端請求的最大單文件字節數
client_body_buffer_size
128k
;
#緩沖區代理緩沖用戶端請求的最大字節數
proxy_connect_timeout
300
;
#nginx跟后端服務器連接超時時間(代理連接超時)
proxy_send_timeout
300
;
#后端服務器數據回傳時間(代理發送超時)
proxy_read_timeout
300
;
#連接成功后,后端服務器響應時間(代理接收超時)
proxy_buffer_size
4k
;
#設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffers
4
32k
;
#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置
proxy_busy_buffers_size
64k
;
#高負荷下緩沖大小(proxy_buffers*2)
proxy_temp_file_write_size
64k
;
#設定緩存文件夾大小,大於這個值,將從upstream服務器傳
}
}
nginx -t -c /etc/nginx/nginx.conf #檢查配置文件
nginx -s reload
配置釋義:
proxy_set_header X-Real-IP $remote_addr:把源IP【$remote_addr,建立HTTP連接header里面的信息】賦值給X-Real-IP,從而通過$X-Real-IP來獲取源IP;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:在nginx作為代理服務器時,設置的IP列表,會把經過的機器ip,代理機器ip都記錄下來,用【,】隔開
其他代理配置說明
其他代理配置語句
proxy_pass:設置代理服務器的地址,可以是主機名稱、IP地址加端口號等形式。
proxy_pass URL
提示:
1:當代理的是一組服務器時可以使用 upstream 指令來設置。
2:當URL中含有uri時,(例如 "http://127.0.0.1:8080/"、"http://127.0.0.1:8080/demo.html")不管客戶端訪問的是地址中的uri是什么,代理服務器都會代理到URL的地址;當URL中不包含uri時(例如:"http://127.0.0.1:8080"),那么當客戶端訪問服務器時,代理服務器會根據客戶端請求的uri來訪問具體的URL地址。
proxy_pass_request_body on|off:用於配置是否將客戶端請求的請求體發送給代理服務器。
proxy_pass_request_headers on|off:用於配置是否將客戶端請求的頭信息發送給代理服務器。
proxy_set_header field value:可以更改nginx接收到的客戶端請求的請求頭信息,然后將新的請求頭信息發送給被代理的服務器。
proxy_set_body value:ngin接收到客戶端的請求后使用該指令可以修改request中的body體,然后將請求轉發給代理服務器。
proxy_connect_timeout time:nginx服務器與被代理服務器之間嘗試建立連接的的超時時間,默認為60s。
proxy_read_timeot time:nginx服務器接收被代理服務器數據時最大的等待時間,默認為60s。
proxy_send_timeout time:nginx服務器發送數據至被代理服務器的最大等待時間,例如60s內沒有發出一個字節則默認斷開連接,默認60s。
proxy_http_version 1.0|1.1:nginx服務器提供代理服務的http協議版本。
proxy_method method:nginx服務器設置請求被代理服務器時使用的請求方法,一般為POST或者GET。
proxy_ignore_client_abort:當客戶端中斷網絡請求時,nginx服務是否中斷對代理服務器的請求,默認off。
參考 https://www.cnblogs.com/itzgr/p/13327861.html