利用Nginx配置文件转发

2023-11-04

编辑nginx.conf内容

cd /usr/local/nginx/conf
vi nginx.conf

内容如下所示:

error_log  logs/error.log  error ;
pid logs/nginx.pid;
user  root;
worker_processes  auto;
worker_rlimit_nofile 51200;

events {
    use epoll;
    worker_connections  51200;
}

http {
    client_body_buffer_size 32k;
    client_header_buffer_size 2k;
    client_max_body_size 100m;
    default_type application/octet-stream;
    log_not_found off;
    server_tokens off;
    include mime.types;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers  4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types  text/plain text/css text/xml text/javascript application/x-javascript application/xml application/rss+xml application/xhtml+xml application/atom_xml;
    gzip_vary on;
    #error_page   500 502 503 504  /50x.html;
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
  server {
        listen  8785;  ## 8785指定端口
        server_name  test.dgd.com;  ##域名,
        root /data/images;  ##图片实际存储的位置,如果没有对应的目录先创建
        access_log  /var/logs/nginx/access/images.log;
        location ~ .*\.(gif|jpg|jpeg|png)$ {
            proxy_store on;
            proxy_temp_path         /data/images;
            proxy_redirect          off;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size    10m;
            client_body_buffer_size 1280k;
            proxy_connect_timeout   900;
            proxy_send_timeout      900;
            proxy_read_timeout      900;
            proxy_buffer_size       40k;
            proxy_buffers           40 320k;
            proxy_busy_buffers_size 640k;
            proxy_temp_file_write_size 640k;
            if ( !-e $request_filename)
            {
                 proxy_pass  http://127.0.0.1:8785;
            }
        }
    }
}

java 代码示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.File;
import java.util.Date;
import java.util.Map;

@Controller
@RequestMapping("/import")
public class ImportController {
    private static Logger logger = LoggerFactory.getLogger(ImportController.class);

    @RequestMapping(value = "upload",method = RequestMethod.POST,
                    produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity uploadGoodsSupplierData(@RequestParam MultipartFile file,MultipartHttpServletRequest request) {
        ResponseJsonRender resultData = new ResponseJsonRender("上传成功");
        try {
            if (file != null) { 
                String url = getUploadFileUrl(file, request);
                log.info("图片访问路径:"+url);
            }else{
                resultData.setCode(-100);
                resultData.setMsg("没有发现可用的文件");
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            resultData.setCode(-100);
            resultData.setMsg(e.getMessage());
        }
        return new ResponseEntity(resultData, HttpStatus.OK);
    }
    /**
     * 获取文件的路径
     * @param file
     * @param request
     * @return
     * @throws Exception
     */
    private String getUploadFileUrl(MultipartFile file,
        MultipartHttpServletRequest request) throws Exception {
        //判断文件是否图片文件
        FileHelper.isFileFormatIMG(file);
        //获取上传文件的地址
        String imgName = FileHelper.getFileName4Saving(file.getOriginalFilename());
        String imgUrl = File.separator + imgName;
        String fullPath = FileHelper.generateParentFolder(request) + imgUrl;
        //保存文件
        FileHelper.save(file, fullPath);
        //生成访问的图片URL
        String path = FileHelper.generateFolderHttp(request)+"/"+imgName;
        return FileHelper.generateParentFolderURL(request,path);
    }
}
用到的工具类
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.UUID;

@Component
public class FileHelper {
    private static Logger logger = LoggerFactory.getLogger(FileHelper.class);

    private static final String[] XLS_EXTENSION = new String[]{"xls", "xlsx"};

    private static final String[] IMG_EXTENSION=new String[]{"jpg","jpeg","gif","png"};

    private static String SERVER_IMAGE_URL; // 指定图片文件url的前缀
    private static String SERVER_IMAGE_PATH; //图片实际存储的路径

    //从配置文件中读取常量
    @Value("#{application['server.image.url']}")
    public void setServerImageUrl(String serverImageUrl) {
        this.SERVER_IMAGE_URL = serverImageUrl;
    }
    @Value("#{application['server.image.path']}")
    public void setServerImagePath(String serverImagePath) {
        this.SERVER_IMAGE_PATH = serverImagePath;
    }

    public static boolean isFileFormatXLS(MultipartFile file) {
        if (!FilenameUtils.isExtension(file.getOriginalFilename().toLowerCase(), XLS_EXTENSION)) {
            throw new BsRuntimeExceptioin("文件解析错误",-100);
        }

        return true;
    }

    public static boolean isFileFormatIMG(MultipartFile file) {
        if (!FilenameUtils.isExtension(file.getOriginalFilename().toLowerCase(), IMG_EXTENSION)) {
            throw new BsRuntimeExceptioin("文件解析错误", -100);
        }
        return true;
    }

    public static String getBasePath() {
        logger.info("当前存放的路径是:"+SERVER_IMAGE_PATH);
        return SERVER_IMAGE_PATH;
    }

    public static void createParentFolder(String fullParentFolderPath) {
        File fullParentFolder = new File(fullParentFolderPath);
        if (!fullParentFolder.exists()) {
            fullParentFolder.mkdirs();
        }
    }

    public static String generateParentFolder(HttpServletRequest request) {
        String folder=generateFolder(request);
        String fullParentFolderPath = getBasePath() + folder;
        createParentFolder(fullParentFolderPath);
        return fullParentFolderPath;
    }

    //保存文件
    public static void save(MultipartFile file, String fullPath) {
        try {
            try (FileOutputStream os = new FileOutputStream(fullPath)) {
                os.write(file.getBytes());
                os.flush();
            }
        } catch (Exception e) {
            logger.error("Error occurs when saving file: ", e);
        }
    }
        //将文件URL前缀+生成的路径拼起来
        public static String generateParentFolderURL(HttpServletRequest request,String path){
            return SERVER_IMAGE_URL+"/"+path;
        }

    public static String generateFolderHttp(HttpServletRequest request) {
        String type = request.getParameter("folder");
        String folder = (type == null ? "data" : "data/" + type);
        Calendar calendar = Calendar.getInstance();
        //将文件按指定路径+年+月+日的格式路径存储
        return folder +
                "/"+ calendar.get(Calendar.YEAR) +
                "/" + (calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DATE);
    }

    public static String getFileName4Saving(String fileName) {
        return UUID.randomUUID() + fileName.substring(fileName.lastIndexOf("."));
    }
}
配置文件:application.properties
#图片发布地址,跟Nginx配置的域名和端口必须一致
server.image.url=http://test.dgd.com:8785 
#图片实际存储的路径(服务器为Linux系统),如果没有该文件目录先创建
server.image.path=/data/images/

为了能让FileHelper 类里的@Value(“#{application[‘server.image.url’]}”)
注解能正确读取配置文件里的值,需要在applicationContext.xml配置如下内容:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd
        "
       default-autowire="byType"
        >
    <!--启动spring MVC 注解-->
    <context:annotation-config />
    <!-- 定义扫描的包路径 -->
    <context:component-scan base-package="com"/>
    <!-- 加载配置属性文件 -->
    <util:properties id="application" location="file:application.properties"></util:properties>
</beans>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用Nginx配置文件转发 的相关文章

随机推荐

  • 关于MPEG4 码流(mpeg4 raw data)的格式分析

    MPEG4码流开头往往如下 00 00 01 B0 F5 00 00 01 B5 09 00 00 01 00 00 00 01 20 08 86 84 00 3F 18 58 21 20 A3 1F 00 00 01 B2 58 76 6
  • 故障诊断1—基础理论

    1 故障诊断概念 故障诊断主要研究如何对系统中出现的故障进行检测 分离和辨识 即判断故障是否发生 定位故障发生的部位和种类 以及确定故障的大小和发生的时间等 2 故障诊断方法 故障诊断防范可分为定性分析和定量分析两大类 如图 1 所示 其中
  • Hexo博客优化:在Next主题中设置进阶版Live2D看板娘————拒绝踩坑!!!!

    最初级的用法 使用官方包安装 安装非常简单 但效果一般 hexo live 2d地址 https github com xiazeyu live2d widget models git命令行中输入 npm install save hexo
  • [SWPUCTF 2022 新生赛]ez_ez_php

    这段代码是一个简单的PHP文件处理脚本 让我们逐行进行分析 error reporting 0 这行代码设置了错误报告的级别为0 意味着不显示任何错误 if isset GET file 这行代码检查是否存在一个名为 file 的GET参数
  • Redis第二十七讲 Redis集群批量操作带来的问题

    Redis集群批量操作 比如对我们之前搭建的三主三从集群进行批量数据插入操作会报什么错误呢 关于Redis集群搭建可以参考我之前的一篇博客 Redis第十九讲 Redis主从 哨兵 集群搭建讲解 Redis集群搭建相对于哨兵还是比较简单的
  • app服务器 数据库文件,app访问服务器mysql数据库文件

    app访问服务器mysql数据库文件 内容精选 换一换 云数据库RDS服务上的MySQL在使用上有一些固定限制 用来提高实例的稳定性和安全性 具体详见表1 对于mysqlpump工具 由于在并行备份场景有coredump问题 不建议您使用
  • 特征工程(一)-- 概述

    简介 特征工程本质上可以理解成数据预处理 其目的是最大限度地从原始数据中提取特征以供算法和模型使用 从而提高模型的准确率等指标 处理的数据中的特征直接影响到正在使用的模型以及能达到的最好的结果 当模型和特征都确定之后 通过调参带来的收益微乎
  • JVM(HotSpot)7种垃圾收集器

    JVM HotSpot 7种垃圾收集器 7种垃圾收集器作用于不同的分代 如果两个收集器之间存在连续 就说明他们可以搭配使用 从JDK1 3到现在 从Serial收集器 Parallel收集器 CMS G1 用户线程停顿时间不断缩短 但仍然无
  • 前端 token-防爆破(CSRF Token Bypass)-burpsuit

    知识点 利用 burpsuite 循环把前端页面上的 token 值加到登录的 token 上 前端页面
  • laravel 利用监听器进行sql语句记录

    利用监听器进行sql语句记录 1 监听sql语句的事件类已经定义 直接创建监听器类即可 监听sql make listener QueryListener event Illuminate Database Events QueryExec
  • 计算机组成-三个子系统互连

    文章目录 CPU与存储器的连接 数据总线 地址总线 控制总线 I O设备的连接 控制器 串行控制器 并行控制器 常用控制器 SCSI小型计算机系统接口 火线 通用串行总线 USB 高清清晰度多媒体接口 HDMI CPU与存储器的连接 CPU
  • SpringBoot中的项目属性配置

    概述 在项目中 很多时候需要用到一些配置信息 这些信息在测试环境和生产环境下可能会有不同的配置 后面根据实际业务情况有可能还需要再做修改 针对这种情况 我们不能将这些配置在代码中写死 最好是写到配置文件中 比如可以把这些信息写到 appli
  • Qml使用videooutput送入yuv数据无法显示视频

    表现 送入 yuv 数据进入 videooutput 无视频渲染 原因 系统环境变量存在 QMLSCENE DEVICE softwarecontext VideoOutput 不能使用 qt 的软渲染即 Qt Quick Software
  • 毕业设计-基于深度学习的遥感影像语义分割方法

    目录 前言 课题背景和意义 实现技术思路 一 基础理论与相关技术 二 多特征注意力融合的遥感影像语义分割网络 三 双分支轻量级的遥感影像语义分割网络 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面
  • 人工智能CV应用现状与发展 - 讲座记录

    简单介绍 CV应用现状与发展前景如何 算法工程师如何自我修炼 CV应用现状与发展前景如何 模型训练好后 新增场景case 则需要再次进行模型训练 模型固化 硬件部署 也固化 不同模型部署在不同硬件有挑战 比如 云雾和烟火雾的区别 毛肚的异常
  • VMware虚拟机安装Windows 7

    昨天我总结了win10和win11的教程 今天也把win7总结下 一来方便各位探索Windows7 二来也可以给自己备份 1 准备工作 首先我们在VMware里面安装Windows7需要做的准备工作 VMware Workstation软件
  • ISCC 2019 杂项 他们能在一起吗?(小明在网上向暗恋已久的女生表白了,对方只给小明发来了一个二维码作为回复,面对小明的求助,你会告诉他这名女生想表达的意思吗?)

    先打开下载吧 哈啊哈哈哈 点附件下载直接是这个二维码 让我们用手机扫描一下 得到一串字符串 如下 UEFTUyU3QjBLX0lfTDBWM19ZMHUlMjElN0Q 之后根据 我之前文章里的 格式 这个应该是个 base64加密过的 b
  • Linux网络编程之本地套接字

    Linux网络编程之本地套接字 一 本地套接字 二 对比本地套和网络套 三 本地套接字代码实现 一 本地套接字 二 对比本地套和网络套 三 本地套接字代码实现 接口C文件 include
  • 公钥和私钥

    概念 公钥 Public Key 与私钥 Private Key 是通过一种算法得到的一个密钥对 即一个公钥和一个私钥 公钥是密钥对中公开的部分 私钥则是非公开的部分 公钥通常用于加密会话密钥 验证数字签名 或加密可以用相应的私钥解密的数据
  • 利用Nginx配置文件转发

    编辑nginx conf内容 cd usr local nginx conf vi nginx conf 内容如下所示 error log logs error log error pid logs nginx pid user root