nginx正向和反向代理配置详解
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