Nignx 概述+项目应用

Nignx 概述+项目应用

Nginx概述

Nginx 是高性能的Http 和反向代理服务器,处理高并发能力是十分强大的,能经受高负载的考验,可支持高达5w 个并发的连接数。

Nginx功能介绍

反向代理:

正向代理:某种情况下,代理我们去访问服务器,需要用户手动设置代理服务器的IP和端口号。
反向代理:这是用来代理服务器的,代理我们要访问的目标服务器,代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),并将从服务器上得到的结果放回给客户端,此时代理服务器对外就表现为一个服务器。

负载均衡:

多在并发情况下需要使用,其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器集群共同完成工作任务,从而提高数据的吞吐量

动静分离

Nginx提供的动静分离是指把动态请求和静态请求分开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。
Nginx可以根据配置对不同的请求做不同的转发,这是对动态分离的基础。静态请求对应的静态资源可以直接放在Nginx做缓存。动态请求由相应的后端服务器处理。

项目中的应用(动静分离)

java+Nginx 实现文件上传

1.在pom 中加入对应的依赖

<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

2.前端页面

<formaction="upphoto"method="post"
enctype="multipart/form-data">
File:<input type="file" name="file"multiple="multiple">
		<!-- Desc:<input type="text" name="desc"> -->
		<input type="submit" value="Submit">
</form>

3.stfp连接工具类

package com.hk.utils;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

public class SFTPUtil implements AutoCloseable {

    private Session session = null;
    private ChannelSftp channel = null;


    /**
     * 连接sftp服务器
     *
     * @param serverIP 服务IP
     * @param port     端口
     * @param userName 用户名
     * @param password 密码
     * @throws SocketException SocketException
     * @throws IOException     IOException
     * @throws JSchException   JSchException
     */
    public void connectServer(String serverIP, int port, String userName, String password) throws SocketException, IOException, JSchException {
        JSch jsch = new JSch();
        // 根据用户名,主机ip,端口获取一个Session对象
        session = jsch.getSession(userName, serverIP, port);
        // 设置密码
        session.setPassword(password);
        // 为Session对象设置properties
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        // 通过Session建立链接
        session.connect();
        // 打开SFTP通道
        channel = (ChannelSftp) session.openChannel("sftp");
        // 建立SFTP通道的连接
        channel.connect();

    }

    /**
     * 自动关闭资源
     */
    public void close() {
        if (channel != null) {
            channel.disconnect();
        }
        if (session != null) {
            session.disconnect();
        }
    }

    public List<ChannelSftp.LsEntry> getDirList(String path) throws SftpException {
        List<ChannelSftp.LsEntry> list = new ArrayList<>();
        if (channel != null) {
            Vector vv = channel.ls(path);
            if (vv == null && vv.size() == 0) {
                return list;
            } else {
                Object[] aa = vv.toArray();
                for (int i = 0; i < aa.length; i++) {
                    ChannelSftp.LsEntry temp = (ChannelSftp.LsEntry) aa[i];
                    list.add(temp);

                }
            }
        }
        return list;
    }

    /**
     * 下载文件
     *
     * @param remotePathFile 远程文件
     * @param localPathFile  本地文件[绝对路径]
     * @throws SftpException SftpException
     * @throws IOException   IOException
     */
    public void downloadFile(String remotePathFile, String localPathFile) throws SftpException, IOException {
        try (FileOutputStream os = new FileOutputStream(new File(localPathFile))) {
            if (channel == null)
                throw new IOException("sftp server not login");
            channel.get(remotePathFile, os);
        }
    }

    /**
     * 上传文件
     *
     * @param remoteFile 远程文件
     * @param localFile
     * @throws SftpException
     * @throws IOException
     */
    public void uploadFile(String remoteFile, String localFile) throws SftpException, IOException {
        try (FileInputStream in = new FileInputStream(new File(localFile))) {
            if (channel == null)
                throw new IOException("sftp server not login");
            channel.put(in, remoteFile);
        }
    }


}

controller层+Nginx配置文件中Nginx.conf中的配置

Nignx 概述+项目应用alias : 把当前路径下的图片都能拿到
Server_name : 是访问地址的IP
/img/:访问路径
Listen:端口号(80)

@Controller
@RequestMapping("/user")
public class EmployeeController {
	/**
	 * 导入Jackson-Databind
	 */
	@PostMapping("/upphoto")
	public String upPhoto(@RequestParam("file") MultipartFile[] file,HttpServletRequest request) throws IOException {
		// String str ="";
		// 实例化工具类,填写用户名,密码,ip地址,端口号,用来连接linux
		SftpUtil sftpUtil = new SftpUtil("root", "dxt980409", "192.168.58.129", 22);
		// 连接服务器
		sftpUtil.login();
		try {
			for (MultipartFile multipartFile : file) {
				System.out.println("filename:" + multipartFile.getOriginalFilename());
				System.out.println("InputStream" + multipartFile.getInputStream());
				// 上传文件
				String path = sftpUtil.upload("/usr/src/nginx-1.12.2/imags", multipartFile.getOriginalFilename(), multipartFile.getInputStream());
				request.setAttribute("ph",path);
				System.out.println(path);
			}
		} catch (Exception e) {
			// System.out.println("上传失败");
		} finally {
			// 释放连接
			sftpUtil.logout();
		}
		return "WEB-INF/views/upFile.jsp";
	}
}
备注

此代码为上传图片到Nginx服务器,项目中静态资源图片的展示也要从Nginx服务器获取,需要吧静态资源图片的路径改为Nginx服务器储存图片的路径。

上一篇:centOS下安装Nignx


下一篇:基于@vue-cli3的多页面应用改造及nignx配置