首页 > 清河洛 > nginx使用proxy设置反向代理
2020
06-11

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/路径)

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服务器传
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。