nginx 反向代理+重定向

问题场景:

在上次app改版中,我们把app对应的站外项目进行了重构,同时也针对域名进行了统一的规划,但是因为公司人员调整,造成了安卓app版本落后一个,由此导致接口上线后,安卓中的分享地址还是之前的,许多功能分享出来后没有数据,在不重新发apk的情况下,我想到了利用nginx的301重定向,来永久改变这个地址,

解决方案:

打开nginx,之前已经配置过了反向代理,这里不做重点描述

配置如下

server {
        listen       80;
        server_name  xx.yy.com;
        location / {
        proxy_pass http://10.10.10.136:80;
   }
		
        access_log  /var/log/nginx/xx.yy.com.access.log;
        error_log  /var/log/nginx/xx.yy.com.error.log  info;
}
更改这个配置

server {
        listen       80;
        server_name  xx.yy.com;
        location / {
        proxy_pass http://10.10.10.136:80;
   }
		if ($request_filename ~* a/fx/envelope.html) { 
			rewrite ^/(.*)$ http://zz.yy.com/a/jsp/fxf/share/envelope.jsp?$args? permanent; 
		}
		if ($request_filename ~* ffyy/fx/replyLetter.html) { 
			rewrite ^/(.*)$ http://zz.yy.com/a/jsp/fxf/share/replyLetter.jsp?$args? permanent; 
		}
		
        access_log  /var/log/nginx/xx.yy.com.access.log;
 error_log  /var/log/nginx/xx.yy.com.error.log  info;
}
 
  
参数说明

$args, 请求中的参数;
$content_length, HTTP请求信息里的"Content-Length";
$content_type, 请求信息里的"Content-Type";
$document_root, 针对当前请求的根路径设置值;
$document_uri, 与$uri相同;
$host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate, 对连接速率的限制;
$request_method, 请求的方法,比如"GET"、"POST"等;
$remote_addr, 客户端地址;
$remote_port, 客户端端口号;
$remote_user, 客户端用户名,认证用;
$request_filename, 当前请求的文件路径名
$request_body_file
$request_uri, 请求的URI,带查询字符串;
$query_string, 与$args相同;
$scheme, 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1";
$server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name, 请求到达的服务器名;
$server_port, 请求到达的服务器端口号;
$uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。

1.这里使用 $request_filename  获取当前请求的文件路径名,网上大多使用$host,因为我们这里其它的请求不做重定向,如果使用是$host的话,获取的是xx.yy.com,这里并 不包含a/fx/envelope.html 或者a/fx/replyLetter.html,所以if是无效的

2.rewrite ^/(.*)$ http://xx.yy.com/a/jsp/fxf/share/envelope.jsp?$args? permanent; 这句话中,第一个?是我们自己url带参的字符,不需保留,第二个?是为了避免nginx处理两次参数串而添加的字符

3.覆盖服务器上的配置文件,执行 nginx -s reload 命令,nginx命令生效

注:刚改完可能修改未生效,我的就是改完后刷新连接猜生效,直接打开还是错误连接,在纠结是不是哪里没修改对时,边找问题边刷新,过了大概2分钟,正确的结果就出来了,并不是我配置错误,可能是缓存或者延时,这个并没有深挖原因

你可能感兴趣的:(nginx重定向)