`
zhengdl126
  • 浏览: 2543045 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

nginx配备中proxy_redirect的作用

 
阅读更多

http://www.docin.com/p-292511923.html  使用keepalived对nginx负载均衡器热备 负载均衡 多个squid

 

摘要:proxy_pass 语法 :proxy_pass URL 默认值 :no 使用字段 :location, location中的if字段 这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加

 

 

 

proxy_pass

语法:proxy_pass URL 
默认值:no 
使用字段:location, location中的if字段 
这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式,例如:

proxy_pass http://localhost:8000/uri/;

或者一个unix socket:

proxy_pass http://unix:/path/to/backend.socket:/uri/;

路径在unix关键字的后面指定,位于两个冒号之间。
注意:HTTP Host头没有转发,它将设置为基于proxy_pass声明,例如,如果你移动虚拟主机example.com到另外一台机器,然后重新配置正常(监听example.com到一个新的IP),同时在旧机器上手动将新的example.comIP写入/etc/hosts,同时使用proxy_pass重定向到http://example.com, 然后修改DNS到新的IP。
当传递请求时,Nginx将location对应的URI部分替换成proxy_pass指令中所指定的部分,但是有两个例外会使其无法确定如何去替换:

  • location通过正则表达式指定;
  • 在使用代理的location中利用rewrite指令改变URI,使用这个配置可以更加精确的处理请求(break):
location  /name/ {
  rewrite      /name/([^/] +)  /users?name=$1  break;
  proxy_pass   http://127.0.0.1;
}

这些情况下URI并没有被映射传递。
此外,需要标明一些标记以便URI将以和客户端相同的发送形式转发,而不是处理过的形式,在其处理期间:

  • 两个以上的斜杠将被替换为一个: ”//” – ”/”;
  • 删除引用的当前目录:”/./” – ”/”;
  • 删除引用的先前目录:”/dir /../” – ”/“。

如果在服务器上必须以未经任何处理的形式发送URI,那么在proxy_pass指令中必须使用未指定URI的部分:

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}

在指令中使用变量是一种比较特殊的情况:被请求的URL不会使用并且你必须完全手工标记URL。
这意味着下列的配置并不能让你方便的进入某个你想要的虚拟主机目录,代理总是将它转发到相同的URL(在一个server字段的配置):

location / {
  proxy_pass   http://127.0.0.1:8080/VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot;
}

解决方法是使用rewrite和proxy_pass的组合:

location / {
  rewrite ^(.*)$ /VirtualHostBase/https/$server_name:443/some/path/VirtualHostRoot$1 break;
  proxy_pass   http://127.0.0.1:8080;
}

这种情况下请求的URL将被重写, proxy_pass中的拖尾斜杠并没有实际意义。
如果需要通过ssl信任连接到一个上游服务器组,proxy_pass前缀为 https://,并且同时指定ssl的端口,如:

upstream backend-secure {
  server 10.0.0.20:443;
}
 
server {
  listen 10.0.0.1:443;
  location / {
    proxy_pass https://backend-secure;
  }
}

proxy_pass_header

语法:proxy_pass_header the_name 
使用字段:http, server, location 
这个指令允许为应答转发一些隐藏的头部字段。
如:

location / {
  proxy_pass_header X-Accel-Redirect;
}

proxy_pass_request_body

语法:proxy_pass_request_body [ on | off ] ; 
默认值:proxy_pass_request_body on; 
使用字段:http, server, location 
可用版本:0.1.29
不管什么情况都将请求实体通过代理。
通常一直处于on状态。

proxy_pass_request_headers

语法:proxy_pass_request_headers [ on | off ] ; 
默认值:proxy_pass_request_headers on; 
使用字段:http, server, location 
可用版本:0.1.29
不管什么情况都将请求头部通过代理。
通常一直处于on状态。

proxy_redirect

语法proxy_redirect [ default|off|redirect replacement ] 
默认值proxy_redirect default 
使用字段:http, server, location 
如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。
假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/
这个指令:

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

将Location字段重写为http://frontend/one/some/uri/。
在代替的字段中可以不写服务器名:

proxy_redirect http://localhost:8000/two/ /;

这样就使用服务器的基本名称和端口,即使它来自非80端口。
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
例如下列两个配置等效:

location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   default;
}
 
location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   http://upstream:port/two/   /one/;
}

在指令中可以使用一些变量:

proxy_redirect   http://localhost:8000/    http://$host:$server_port/;

这个指令有时可以重复:

  proxy_redirect   default;
  proxy_redirect   http://localhost:8000/    /;
  proxy_redirect   http://www.example.com/   /;

参数off将在这个字段中禁止所有的proxy_redirect指令:

  proxy_redirect   off;
  proxy_redirect   default;
  proxy_redirect   http://localhost:8000/    /;
  proxy_redirect   http://www.example.com/   /;

利用这个指令可以为被代理服务器发出的相对重定向增加主机名:

proxy_redirect   /   /;

proxy_read_timeout

语法:proxy_read_timeout time 
默认值:proxy_read_timeout 60s 
使用字段:http, server, location 
决定读取后端服务器应答的超时时间,单位为秒,它决定nginx将等待多久时间来取得一个请求的应答。超时时间是指完成了两次握手后并且状态为established的超时时间。
相对于proxy_connect_timeout,这个时间可以扑捉到一台将你的连接放入连接池延迟处理并且没有数据传送的服务器,注意不要将此值设置太低,某些情况下代理服务器将花很长的时间来获得页面应答(例如如当接收一个需要很多计算的报表时),当然你可以在不同的location里面设置不同的值。
可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。
这个值不能大于597小时。

proxy_redirect

语法proxy_redirect [ default|off|redirect replacement ];
默认值proxy_redirect default;
使用字段:http, server, location
这个指令为被代理服务器应答中必须改变的应答头:”Location”和”Refresh”设置值。
我们假设被代理的服务器返回的应答头字段为:Location: http://localhost:8000/two/some/uri/。
指令:

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

会将其重写为:Location: http://frontend/one/some/uri/。
在重写字段里面可以不使用服务器名:

proxy_redirect http://localhost:8000/two/ /;

这样,默认的服务器名和端口将被设置,端口默认80。
默认的重写可以使用参数default,将使用location和proxy_pass的值。
下面两个配置是等价的:

location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   default;
}
 
location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   http://upstream:port/two/   /one/;
}

同样,在重写字段中可以使用变量:

proxy_redirect   http://localhost:8000/    http://$host:$server_port/;

这个指令可以重复使用:

proxy_redirect   default;
proxy_redirect   http://localhost:8000/    /;
proxy_redirect   http://www.example.com/   /;

参数off在本级中禁用所有的proxy_redirect指令:

proxy_redirect   off;
proxy_redirect   default;
proxy_redirect   http://localhost:8000/    /;
proxy_redirect   http://www.example.com/   /;

这个指令可以很容易的将被代理服务器的服务器名重写为代理服务器的服务器名:

proxy_redirect   /   /;

proxy_redirect_errors

不推荐使用,请使用 proxy_intercept_errors。

分享到:
评论

相关推荐

    Nginx之proxy_redirect使用详解

    在讨论Nginx的proxy_redirect指令时,我们首先要明确其在Nginx配置中的作用和重要性。proxy_redirect指令主要用于在反向代理过程中修改响应头中的Location和Refresh字段值。在Web服务器配置中,特别是在使用Nginx...

    nginx location中多个if里面proxy_pass的方法

    在Nginx配置中,`location`指令是用于定义URL路由和处理规则的关键部分,它决定了请求应如何被代理、重定向或静态文件服务。在本文中,我们将深入探讨`location`指令的匹配机制以及在多个`if`语句中使用`proxy_pass`...

    nginx中location中关于proxy_pass和rewrite的应用.rar

    `proxy_pass`是Nginx的一个关键指令,它用于将客户端的请求转发到上游服务器,通常用于反向代理。例如,当Nginx接收到一个特定的URL请求时,它可以将这个请求传递给内部的Web服务器(如Apache、Tomcat或Node.js服务...

    nginx静态文件缓存的解决方案1

    proxy_redirect off; proxy_cache cache_one; proxy_cache_valid 200 304 12h; proxy_cache_valid 301 302 1d; proxy_cache_valid any 1m; proxy_cache_key $uri$is_args$args; expires 30d; proxy_set_...

    nginx config reverse proxy for windows.pdf

    proxy_redirect off; proxy_set_header Host mnif.cn:8083; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ``` 上述配置将客户端的请求转发到 ...

    Windows_Nginx_Tomcat_负载均衡服务器

    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_...

    Nginx 性能优化实践1

    Nginx还提供了多种参数来优化代理行为,如proxy_redirect、proxy_set_header等,用于控制重定向、传递请求头信息以及设置超时时间。 接下来,我们讨论负载均衡。通过Nginx的upstream模块,我们可以将请求分发到多个...

    配置代理服务器NGINX

    3. **路径重写**:若需改变请求转发的路径,可以使用`proxy_redirect`指令进行重写,或者在`location`块中使用`rewrite`规则。 **三、Nginx配置实例** 在实际配置中,可能会遇到路径问题,如Nginx配置`proxy_pass`...

    Nginx+Tomcat 负载均衡 3分钟搞定

    proxy_redirect default; } 上述配置将所有请求代理到 upstream 模块配置的服务器上。 六、实现负载均衡的步骤 1. 下载和安装 Nginx 和 Tomcat 服务器。 2. 配置 Tomcat 服务器的启动端口。 3. 配置 Nginx ...

    Windows下Nginx的安装与配置

    proxy_store用于设置代理存储,proxy_temp_path用于设置代理临时文件路径,proxy_redirect用于设置代理重定向,proxy_set_header用于设置代理头信息。 nginx的安装与配置是非常重要的,需要根据实际情况进行配置,...

    nginx配置负载均衡和反向代理示例.txt

    - `proxy_redirect off` 关闭了自动重定向。 - 多个`proxy_set_header` 用于设置转发时的HTTP头信息,确保客户端的真实信息能够被后端服务器获取。 - `client_max_body_size 10m` 和 `client_body_buffer_size ...

    nginx配置文件祥解

    - `proxy_redirect off;`:关闭自动重定向,避免循环重定向问题。 - `proxy_set_header`:设置传递给后端服务器的请求头,如Host、X-Real-IP等。 - `client_max_body_size`:限制上传文件的最大大小。 - `proxy_...

    Nginx文件上传模块配置

    在本文中,我们将深入探讨如何配置Nginx以支持文件上传功能,特别是使用upload_module和upload_progress_module这两个第三方模块。Nginx是一个高效且灵活的HTTP服务器和反向代理,由Igor Sysoev开发,它支持模块化的...

    一分钟搞定 Nginx反向代理 nginx域名代理

    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; } } (完整拷贝上面的内容server_name www.**...

    linux下Nginx+tomcat整合的安装与配置

    proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 获取真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 获取代理者的真实IP client_max...

    Nginx 性能优化实践 (1)1

    反向代理的配置可以通过 Nginx 实现,仅需配置 location 中的 proxy_pass 属性,指向代理的服务器地址。例如: ``` location /luban/ { proxy_pass http://127.0.0.1:8010; } ``` 反向代理相关参数: * proxy_...

    windows下配置nginx反向代理tomcat

    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; proxy_set_header X-Forwarded-Proto $scheme; ...

    详解NGINX访问https跳转到http的解决方法

    总结起来,当遇到NGINX从HTTPS跳转到HTTP的问题时,我们可以通过在NGINX配置中使用`proxy_set_header`添加自定义头部,或者使用`proxy_redirect`指令来修正Location头,确保用户始终在安全的HTTPS连接中。...

Global site tag (gtag.js) - Google Analytics