nginx能否替换服务器发送的301重定向的内容
最近在学习使用Nginx的https反向代理,选择知网作为被代理的真实服务器来进行测试。
配置文件cnki.conf:
server {
listen 8080;
server_name *.zhongxiaocnki.net;
include enable_ssl.conf;
### log files ###
access_log logs/access.log;
error_log logs/error.log debug;
location / {
proxy_pass http://cnki.net; #这个一定要是https
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host:$server_port;
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 https;
proxy_redirect off;
include url_rewrite/*.conf;
}
}
配置文件url_rewrite/*.conf:
set $prtc "https";
sub_filter_once off;
sub_filter_types *;
sub_filter 'http://piccache.cnki.net' '$prtc://$host:8081';
sub_filter 'http://r.cnki.net' '$prtc://$host:8082';
sub_filter 'http://kns.cnki.net' '$prtc://$host:8083';
sub_filter 'http://my.cnki.net' '$prtc://$host:8084';
sub_filter 'http://nvsm.cnki.net' '$prtc://$host:8085';
sub_filter 'http://www.cnki.net' '$prtc://$host:8080';
当访问https://zhongxiaotest.com:8080时代理cnki.net,并通过替换response里的url把一些子域名通过其他端口代理起来。
现在遇到两个问题:
1.页面上有些url指向的其实是一个目录,但是url最后没有加‘/’,这样导致在访问这个URL的时候,服务器会返回一个301重定向,重定向里有个Location字段给出了结尾为‘/’的新的url,但这个url是HTTP的:
(这里我为了截包没有使用HTTPS,此时这个URL刚好是我代理的HTTP的8082端口,因此可以访问成功,如果我的代理监听HTTPS的8082,这个URL就无法访问了)
在网上搜了半天关于Nginx处理重定向的问题,大多都是教你nginx自己如何配置重定向的,如何修改服务器的重定向没找到。不过找到了另一个方法:监听HTTPS的同时也监听HTTP,然后在HTTP的Server块里把HTTP改写成HTTPS。但是我的场景里指定了端口是8082,一个端口不能同时被HTTP和HTTPS监听吧?
所以我想问,Nginx对服务器发过来的301重定向,是否可以修改其中的Location为自己想要的URL。如果可以,使用什么模块的什么指令?
2.有些重定向是在脚本里面做的,比如这个url:“https://zhongxiaotest.com:8083//kns/RedirectPage.aspx?action=usercenter”,点击时访问RedirectPage.aspx,动作为跳转到用户中心,这种脚本里的跳转又该如何处理?
求指教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
proxy_redirect
了解一下