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

天津网站建设优化wordpress网页登录

天津网站建设优化,wordpress网页登录,网站根目录相对路径,深圳网站建设公司佰达背景 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.yutouwan.com/news/444813/

相关文章:

  • 如何做网站服务器映射网络优化软件有哪些
  • 设计网站公司好评y湖南岚鸿ok有文化内涵又高雅的公司名字
  • 爱站关键词挖掘查询工具做网站类网站费用
  • 网站信息可以一键制作网站软件
  • dream网站怎么做框架商务网站建设的优势
  • 网站建设公司专业网站开发研发四川在线
  • 上海外贸建站北京的互联网企业
  • 建设论坛网站网站一键生成手机网站
  • 购物网站系统设计wordpress更改首页
  • 商用营销型网站建设抖音品牌推广方案
  • 广西网站建设推广网络服务机构
  • html网站开发 工具电商培训机构
  • 利用小说网站做本站优化个人免费域名注册网站
  • 做网站最便宜要多少钱做网页素材
  • 做seo怎么设计网站如何规划网站栏目
  • 网站资源整合与建设查询网站到期时间
  • 新乡网站建设报价网页代码查看
  • 网站开发业务怎么做free免费空间
  • 网页设计师必须知道的网站软件开发的前景
  • 做网站用php还是html好番禺网站建设哪家强
  • 网站优化免费软件起飞页做网站
  • 江苏建设信息电子证查深圳品牌seo
  • 网站制作器手机版flash可以做网站
  • 建设一个导航网站网站底部怎么做
  • 大型网站建设报价方案app页面设计软件
  • 网站开发工程师岗位说明书appui设计公司
  • 如何查询网站icp备案做字网站
  • 网站模板下平面设计公司广告语
  • 学做网站难不难有哪些做平面设计好的网站有哪些内容
  • 定州建设厅网站个人在湖北建设厅网站申请强制注销