当前位置: 首页 > news >正文

固定ip做网站怎么备案怎么手动安装网站程序

固定ip做网站怎么备案,怎么手动安装网站程序,上海住房和城乡建设部网站首页,网络营销论文3000字背景 FTP文件服务器在我们日常开发中经常使用#xff0c;在项目中我们经常把FTP文件下载到内存中#xff0c;然后转为base64给前端进行展示。如果excel中也需要导出图片#xff0c;数据量大的情况下会直接返回一个后端的开放接口地址#xff0c;然后在项目中对接口的参数进…背景 FTP文件服务器在我们日常开发中经常使用在项目中我们经常把FTP文件下载到内存中然后转为base64给前端进行展示。如果excel中也需要导出图片数据量大的情况下会直接返回一个后端的开放接口地址然后在项目中对接口的参数进行鉴权或者实效性检验等最后从FTP下载图片用流的方式传到浏览器中。 但是这种方式会加大内存的消耗所有的文件相关的都在内存中下载回传给前端报表下载的数据量很大的情况下服务很容易拖垮。所以就设想通过两层nginx反向代理的方式是否可以满足文件的直接访问。 假设FTP文件服务器的照片存放地址为:/upload/signature 传统实现 首先我们在下载excel的时候需要组装一个url如下所示的get请求就是一个对外开放无需权限的接口真实情况下会对realFilePath进行加密组装里面放一些timestamp或者redis的key来验证实效性、安全性等。 GetMapping(/signatureImage/{path})public void signatureImage(PathVariable(path) String realFilePath, HttpServletResponse response) throws IOException {//realFilePath /20231206/qhyu.pngString fileName qhyu.png; //可以切割获取。String path /upload/signature; // 固定的存放路径ByteArrayOutputStream outputStream new ByteArrayOutputStream();try (Ftp ftp new Ftp(Ftp_address, Ftp_port, username, password)) {ftp.download(pathrealFilePath, fileName, outputStream);} catch (Exception e) {log.error(FTP文件下载出错:{}, e.getMessage());throw new QhyuException(MessageCode.FILE_DOENLOAD_ERROR.getCode());}// 将内存中的文件内容转换为输入流InputStream inputStream new ByteArrayInputStream(outputStream.toByteArray());// 设置响应的内容类型为图片格式String contentType MediaType.IMAGE_PNG_VALUE; // 假设为PNG格式response.setContentType(contentType);org.apache.commons.io.IOUtils.copy(inputStream, response.getOutputStream());response.flushBuffer();// 关闭内存流和FTP连接inputStream.close();outputStream.close();}Nginx实现 要通过Nginx实现的话基本上网上的方案都是让使用lua。虽然可以但是没必要。因为我从官网上找到了解决方案如下所示。 提供一下proxy相关参数的含义 proxy_set_header Host $host; 此参数设置了将客户端请求中的Host头部信息传递给代理服务器。$host变量表示客户端请求中的主机名。proxy_intercept_errors on; 当启用此参数时代理服务器会拦截后端服务器返回的错误响应并将其作为代理服务器的响应返回给客户端。这允许代理服务器处理后端服务器的错误响应并可以进行自定义的错误处理。proxy_set_header X-Real-IP $remote_addr; 此参数设置了将客户端的真实IP地址传递给代理服务器。$remote_addr变量表示客户端的IP地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 此参数设置了将客户端的IP地址添加到X-Forwarded-For头部信息中。$proxy_add_x_forwarded_for变量表示将客户端IP地址添加到现有的X-Forwarded-For头部信息中。proxy_buffering off; 当启用此参数时禁用代理缓冲。代理缓冲可以在接收完整的响应后再将其发送给客户端以提高性能和效率。禁用缓冲意味着代理服务器会立即将收到的数据发送给客户端适用于需要实时数据传输的场景。 下面就是我的nginx配置 server {listen 10086;charset utf-8;access_log /var/log/nginx/qhyu/qhyu_access.log;error_log /var/log/nginx/qhyu/qhyu_error.log;location /verify {proxy_pass http://host:port/api/signatureImage/validate?realFilePath$arg_realFilePathsignature$arg_signature;proxy_set_header Host $host;proxy_intercept_errors on;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_buffering off;error_page 418 custom_redirect;error_page 420 custom_error;}location custom_error{default_type application/json;return 200 error image;}location custom_redirect {rewrite ^ /signature/$arg_realFilePath last;}location /signature {alias /upload/signature/;} } }然后就是编写了一个接口也就是在调用的时候可以访问/verify接口带上参数就会跳转到这个接口进行校验如果返回的http状态码是418说明校验通过如果返回的是420说明校验失败。 GetMapping(/signatureImage/validate)public Object signatureValidate(String realFilePath,String signature,HttpServletResponse httpServletResponse){String redisKey AesEncryptUtil.decryption(signature);if (StrUtil.isBlank(redisKey)){httpServletResponse.setStatus(420);return RenderResult.success();}Object value redisService.get(redisKey);if (value null) {httpServletResponse.setStatus(420);return RenderResult.success();}ListString signatureUrls JSON.parseArray(JSON.toJSONString(value), String.class);if (signatureUrls null || signatureUrls.isEmpty()){httpServletResponse.setStatus(420);return RenderResult.success();}if (!signatureUrls.contains(realFilePath)){httpServletResponse.setStatus(420);return RenderResult.success();}// greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx// for processing with the error_page directive// http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errorshttpServletResponse.setStatus(418);return RenderResult.success();}分析结果 nginx的实现方式在校验失败的时候页面返回error image跳转的是420 error_page成功的时候会访问FTP文件服务器的路径反正图片到页面展示。在实际的开发过程中外层可能还会有一个nginx反向代理本文主要讲解了一下如何使用这个方式对访问的文件进行鉴权。 这样做的好处就是不需要每个文件都下载到内存然后使用流的方式传输直接访问的方式减少了后端服务的压力并且像头像、签名这种可能访问频繁的接口使用这种方式来处理是很棒的一种方式。 主要的思路就是拿到proxy_pass的返回信息如果使用lua的话可以获取到我们返回的body内容但是不使用lua的时候我们可以迂回处理使用status code也一样可以达到目的。
http://www.pierceye.com/news/869834/

相关文章:

  • 北京手机网站开发公司wordpress用户列表
  • 上海 企业网站制成都营销型网站建设熊掌号
  • 无锡网站优化哪家好北京注册公司地址可以是住宅吗
  • 中国十大热门网站深圳哪做网站
  • 木渎网站建设聚美优品网站建设情况
  • 企业形象网站用什么语言开发网站优化要做哪些工作
  • 中国建设银行官网站电话号码wordpress关键词排名
  • 南通网站建设机构博物馆网站建设的根本意义
  • 食品企业网站建设中信建设有限责任公司陈晓佳
  • 中国网站服务器哪个好店名注册查询
  • 网站设计制作案例软件定制开发的发展前景
  • 中国联通网站备案小程序是什么原理
  • 企业网站建设御彩云dz做电影网站
  • 做网站需要的东西网站改版是什么
  • 网站需要哪些北京正规网站建设比较
  • 建设公共网站的手续成都公司网站制作
  • 怎么用安卓机顶盒做网站服务器怎样建立微信公众号平台
  • 专业的集团网站开发开发平面设计软件哪个好用
  • 天津模板建站代理咖啡厅网站开发目标
  • 电子商务网站运营 需要确立如何自己做网页
  • 邯郸市魏县建设局网站个人免费网站申请
  • 建设网站需要备案wordpress文章管理插件
  • 企业网站源码程序多少钱?桓台网站建设
  • vps服务器购买网站自己做的网站可以买东西吗
  • 必应网站建设深圳设计大厦
  • 如何禁止ip访问网站常州网站建设公司推荐
  • 大型论坛网站建设设计公司
  • 河北网诚网站建设企业采购平台有哪几个知名
  • wordpress 站点迁移做跨境电商哪个平台好
  • 想建设一个网站 一般多少钱营口软件开发