nginx使用proxy设置反向代理
proxy_pass
语法:proxy_pass URL;
配置块:location、if
将当前请求反向代理到指定的服务器上
URL可以是主机名或IP地址加端口的形式 proxy_pass http://localhost:8000/uri/; 也可以是UNIX句柄: proxy_pass http://unix:/path/to/backend.socket:/uri/; 还可以直接使用upstream块: upstream backend { ... } location / { proxy_pass http://backend; } 是否会附加location配置路径与proxy_pass配置的路径后是否有"/"有关,有"/"则不附加,如: location /test/ { proxy_pass http://127.0.0.1:8080/; } 请求/test/1.jpg,将会被nginx转发请求到http://127.0.0.1:8080/1.jpg(未附加/test/路径)
更换返回内容
http_sub_module模块用于http的内容替换,我们可以使用该模块的一些语法实现更改内容的需求,该模块可以在http, server, location 三个位置配置使用,该模块常用方法
sub_filter old_str new_str:替换字符串,new_str中可以使用变量 sub_filter_once on|off:是否只替换第一次匹配的字符串,默认on sub_filter_types "MIME_type":指定需要替换的文件MIME类型,默认"text/html",使用星号(*)可表示替换所有类型 sub_filter_last_modified on|off:是否允许在替换期间保留原始响应中的“Last-Modified”头字段,以便于响应缓存,默认off
proxy_method
语法:proxy_method method;
配置块:http、server、location
设置转发时的协议方法
如果proxy_method POST;那么客户端发来的GET请求在转发时方法名也会改为POST
proxy_set_header
语法:proxy_set_header option value;
配置块:location、if
自定义增加转发时请求头,如:
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header
语法:proxy_pass_header the_header;
配置块:http、server、location
Nginx默认禁止转发上游服务器响应的以下头部字段给客户端:Date、Server、X-Pad和X-Accel-*。
proxy_pass_header会将原来禁止转发的header项设置为允许转发
proxy_hide_header
语法:proxy_hide_header the_header;
配置块:http、server、location
和proxy_pass_header功能相反,指定哪些HTTP头部字段禁止转发
proxy_pass_request_headers
语法:proxy_pass_request_headers on | off;
配置块:http、server、location
是否向上游服务器转发HTTP头部,默认为on
proxy_pass_request_body
语法:proxy_pass_request_body on | off;
配置块:http、server、location
是否向上游服务器发送HTTP包体部分,默认为on
proxy_redirect
语法:proxy_redirect [ default|off|redirect replacement ];
配置块:http、server、location
当上游服务器返回响应码是301或者302时,可以更改HTTP头部的location或refresh字段以返回给客户端
值为off表示不更改location或者refresh字段的值 proxy_redirect http://domain1/one/ http://domain2/two/; #location或者refresh字段中http://domain1/one/替换为http://domain2/two/返回给客户端 值为default时会按照proxy_pass配置项和所属的location配置项重组发往客户端的location头部
proxy_next_upstream
语法:proxy_next_upstream [error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_404 | off ];
默认:proxy_next_upstream error timeout;
配置块:http、server、location
指定当向一台上游服务器转发请求出现错误时,哪些情况下会继续换一台上游服务器处理这个请求。
error:当向上游服务器发起连接、发送请求、读取响应时出错。 timeout:发送请求或读取响应时发生超时 invalid_header:上游服务器发送的响应是不合法的 http_500:上游服务器返回的HTTP响应码是500 http_502:上游服务器返回的HTTP响应码是502 http_503:上游服务器返回的HTTP响应码是503 http_504:上游服务器返回的HTTP响应码是504 http_404:上游服务器返回的HTTP响应码是404 off:关闭限制功能,一旦出错就选择另一台上游服务器再次转发
其他配置项
proxy_intercept_errors off; #是否开启状态码大于400的重定向,开启之后使用error_pag设置才能生效。 proxy_connect_timeout 90; #后端服务器发起握手等候响应超时时间(代理连接超时) proxy_send_timeout 90; #在规定时间之内后端服务器必须传完所有的数据(代理发送超时) proxy_read_timeout 90; #接成功并发送请求后,后端服务器处理响应超时时间(代理接收超时) proxy_buffering on; #是否打开后端响应内容的缓冲区 如果为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效 但是无论proxy_buffering是否开启,proxy_buffer_size都是生效的 proxy_buffers 4 32k; 设置用于读取后端服务器应答的数据缓冲区所占用的buffer的个数和每个buffer的大小,默为分页大小 所有buffer的大小为这两个数字的乘积。 proxy_buffer_size 4k; #设置一个特殊的buffer大小 通常情况下代理服务器的响应头header,就存到了这个buffer中 设置太小,会出现502错误码,因为这部分buffer不够存储header信息 默认情况下这个值为proxy_buffers中指定的一个缓冲区的大小 proxy_busy_buffers_size 64k; #忙时buffer的最大值 一个客户端一次只能从一个buffer中读取数据的同时,剩下的buffer会被放到队列中,等待发送到客户端,该参数指定在这个状态下的buffer的大小。 proxy_temp_path 语法:proxy_temp_path path [level1 level2 level3] 定义proxy的临时文件存在目录以及目录的层级。 例:proxy_temp_path /path/nginx/proxy_temp 1 2; 其中/path/nginx/proxy_temp为临时文件所在目录,1表示层级1的目录名为1个数字(0-9),2表示层级2目录名为2个数字(00-99) proxy_max_temp_file_size 100M; #设置临时文件的总大小 proxy_temp_file_write_size 64k; 设置同时写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长 设定缓存文件夹大小,大于这个值,将从upstream服务器传