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  

 

posted @ 2021-02-22 18:13  woaibaobei  阅读(1700)  评论(0编辑  收藏  举报