网站优化建设扬州如何用手机免费开网店
news/
2025/9/23 8:03:56/
文章来源:
网站优化建设扬州,如何用手机免费开网店,百度推广关键词匹配模式,互联网网站名字在nginx中#xff0c;将静态资源设为internal#xff1b;然后将前端的静态资源地址改为指向后端#xff0c;在后端的响应头部中写上静态资源地址。
近期客户对我们项目做安全性测评#xff0c;暴露出一些安全性问题#xff0c;其中一个是有些静态页面#xff08;*.html将静态资源设为internal然后将前端的静态资源地址改为指向后端在后端的响应头部中写上静态资源地址。
近期客户对我们项目做安全性测评暴露出一些安全性问题其中一个是有些静态页面*.html无须授权即可直接访问里面的信息一览无遗不安全。这些静态页面都是arcgis地图页面依赖arcgis for js没有办法做成一般意义上的动态页面。或者说该项目是个老项目目前只处于维护阶段大规模改头换面不现实。
怎么办有没有什么方法不改这些静态页面或者是不做大的调整就能实现只有登录后才能访问它们呢看到网上有文章介绍可以利用nginx的internal特性将静态资源设为内部访问即可实现需要鉴权才能访问。
原理说起来也比较简单。所谓内部访问是指你直接在浏览器输入静态资源地址将无法访问会直接报404只有通过后端向nginx发送特定信息才可以。而后端我们是要登录系统以后才能请求的所以就能实现我们想要的效果了。
具体来说就是假设我们前端部署在nginx原本我们要访问某个静态页面/A.html现在不行了要将地址改为 /api/static/getA改而向后端请求后端收到请求后在响应信息头里加上一句response.setHeader(X-Accel-Redirect, /A.html);返回nginx接收到响应信息后于是将/A.html最终返回。
现在来真的我们要实现/projects/dzzhyj/index.html的鉴权访问。以下是实现步骤
一、配置nginx
server {listen 8001;server_name 192.168.0.218;。。。location /projects/dzzhyj/ {alias /home/gzdd_html/gzdd/projects/dzzhyj/;#物理路径location ~* \.html$ {#只设置*.html为内部访问internal;}}
}二、修改前端代码
templatediv class-map-container
!-- iframe src/projects/dzzhyj/index.html /iframe --iframe src/api/dzzhyj/redirect/dzzhyj /iframe/div
/template三、增加后端代码
Controller
RequestMapping(redirect)
public class RedirectController {GetMapping(/dzzhyj)public void handleDzzhyj(HttpServletRequest request, HttpServletResponse response) throws Exception {response.setHeader(X-Accel-Redirect, /projects/dzzhyj/index.html);}
}四、运行结果 完美。
五、小结
这功能在nginx下才能使用。其他web服务器有没有类似机制不得而知。但我们平时开发用vue都直接用npm来跑所以后端代码做点更改判断是nginx发出的请求才做上述处理否则跳转
Controller
RequestMapping(redirect)
public class RedirectController {GetMapping(/dzzhyj)public void handleDzzhyj(HttpServletRequest request, HttpServletResponse response) throws Exception {String xForwardedForHeader request.getHeader(X-Real-IP);if (xForwardedForHeader ! null !xForwardedForHeader.isEmpty()) {// 请求经过了 Nginxresponse.setHeader(X-Accel-Redirect, /projects/dzzhyj/index.html);} else {// 请求未经过 NginxString[] hosts request.getHeader(X-Forwarded-Host).split(,);String url String.format(http://%s/projects/dzzhyj/index.html,hosts[0]);response.sendRedirect(url);}}
}其实没有方法能直接判断请求是否来自nginx我是比较了从node发出的请求和从nginx发出的请求所包含的键值看其中有没有包含“X-Real-IP”简单地做了一下判断不一定对。
参考文章 Nginx的internal路径和内部重定向X-Accel-Redirect
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911850.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!