精华内容
下载资源
问答
  • 在linux服务器上传,Jdk从下载到安装到配置以及nginx从下载到安装配置
  • 搭建Nginx+Java环境

    千次阅读 2018-08-24 10:15:48
    虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。 二、下载安装: 下载nginx http://nginx.org/en/download.html 下载解压后放到F:\nginx-1.7.1(官网这样...

    一、简介:

    Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。

    二、下载安装:

    下载nginx

    http://nginx.org/en/download.html

    下载解压后放到F:\nginx-1.7.1(官网这样要求的,不知道放其它盘有没有问题)

    启动nginx.exe,然后在浏览器输入127.0.0.1即可

    配置自己的项目测试

    第二环节我们使用了默认的nginx.conf 。Nginx的配置文件都存于目录conf文件下,其中nginx.conf是它的主配置文件。

    以下为我加上注释并配置的新的虚拟server

    #运行用户
    #user  nobody;
    #开启进程数 <=CPU数
    worker_processes  1;
    #错误日志保存位置
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    #进程号保存文件
    #pid        logs/nginx.pid;
    
    #等待事件
    events {
        #Linux下打开提高性能
        #use epoll;
        #每个进程最大连接数(最大连接=连接数x进程数)
        worker_connections  1024;
    }
    
    
    http {
        #文件扩展名与文件类型映射表
        include       mime.types;
        #默认文件类型
        default_type  application/octet-stream;
        #日志文件输出格式 这个位置相于全局设置
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #请求日志保存位置
        #access_log  logs/access.log  main;
    
        #设定请求缓冲
        client_header_buffer_size 1k;
        large_client_header_buffers 4 4k;
    
        #打开发送文件
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #客户端上传文件大小控制
        client_max_body_size 8m;
    
        #打开gzip压缩
        #gzip  on;
    
        #设定负载均衡的服务器列表
        #upstream mysvr {
        #    #weigth参数表示权值,权值越高被分配到的几率越大
        #    #本机上的Squid开启3128端口
        #    #server 192.168.8.1:3128 weight=5;
        #    #server 192.168.8.2:80 weight=1;
        #    #server 192.168.8.3:80 weight=6;
        #}
    
        #第一个虚拟主机
        server {
            #监听IP端口
            listen       80;
            #主机名
            server_name  localhost;
            #root  
    
            #设置字符集
            #charset koi8-r;
            #本虚拟server的访问日志 相当于局部变量
            #access_log  logs/host.access.log  main;
            #日志文件输出格式
            #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            #                  '$status $body_bytes_sent "$http_referer" '
            #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #静态文件缓存时间设置
            #location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${         
            #    expires 30d;
            #}
    
            #静态文件缓存时间设置
            #location ~ .*\.(js|css)?${         
            #    expires 1h;
            #}
    
            #对本server"/"启用负载均衡
            #location / {
            #    proxy_pass http://mysvr;
            #    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 128k;
            #    proxy_connect_timeout 90;
            #    proxy_send_timeout 90;
            #    proxy_read_timeout 90;
            #    proxy_buffer_size 4k;
            #    proxy_buffers 4 32k;
            #    proxy_busy_buffers_size 64k;
            #    proxy_temp_file_write_size 64k;
            #}
    
            #设定查看Nginx状态的地址
            #location /NginxStatus {
            #    stub_status on;
            #    access_log on;
            #    auth_basic “NginxStatus”;
            #    auth_basic_user_file conf/htpasswd;
            #}
    
    
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration    
        server {
            #多监听       
            listen       localhost:8666;
            #主机名
            server_name  LIULJ2576;
            #WEB文件路径
            root         E:/Portal;
            #默认首页
            index        HomePage.html;        
            #location / {
            #    #这里相当于局部变量
            #    root   E:/Portal;
            #    index  HomePage.html;
            #}
        }
    
    
        # HTTPS server HTTPS SSL加密服务器
        #
        #server {
        #    listen       443;
        #    server_name  localhost;
    
        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_timeout  5m;
    
        #    ssl_protocols  SSLv2 SSLv3 TLSv1;
        #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        #    ssl_prefer_server_ciphers   on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    

    进入cmd。然后进入F:\nginx-1.7.1\
    dos环境运行命令:
    start nginx //启动nginx
    nginx -s stop // 停止nginx
    nginx -s reload // 重新加载配置文件
    nginx -s quit // 退出nginx

    nginx -t //检查配置文件是否正确

    二、Nginx可以通过以下两种方式来实现与Tomcat的耦合:

    将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。

    将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能进行多台Tomcat服务器的负载均衡。

    下面通过两个配置实例分别讲述这两种实现

    下载Tomcat6:http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41-windows-x86.zip
    在F:\nginx-1.7.1\路径新建tomcat文件夹。把下载后的apache-tomcat-6.0.41-windows-x86.zip解压。解压后把apache-tomcat-6.0.41更名为apache-tomcat-8080。并复制几个apache-tomcat-8080分别改名为apache-tomcat-8060,apache-tomcat-8090

    启动多个tomcat。修改tomcat里面的server.xml配置文件。注意以下修改的四处,各个tomcat配置里面的端口号不要有冲突。例如tomcat1里面的

    Server port=18006,则另外一个就不能用此端口。其他的依次类推

    《一》

    <!--  修改port端口:俩个tomcat不能重复,端口随意,别太小-->
    <Server port="18006" shutdown="SHUTDOWN">

    《二》

    <!-- port="18081" tomcat监听端口,随意设置,别太小 -->
    <Connector port="18081" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" />

    《三》

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    《四》

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

    在同一台电脑上启动两个tomcat。进入cmd命令模式,然后进入各自的tomcat路径,执行F:\nginx-1.7.1\tomcat\apache-tomcat-8090\bin>startup.bat
    F:\nginx-1.7.1\tomcat\apache-tomcat-8080\bin>startup.bat。则两个不同的tomcat已经启动完成

    在IE上输入http://localhost/index.jsphttp://localhost/,如果得到不同的界面表示成功

    最终的nginx.conf配置如下

    #运行用户
    #user  nobody;
    #开启进程数 <=CPU数
    worker_processes  1;
    #错误日志保存位置
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    #进程号保存文件
    #pid        logs/nginx.pid;
    
    #等待事件
    events {
        #Linux下打开提高性能
        #use epoll;
        #每个进程最大连接数(最大连接=连接数x进程数)
        worker_connections  1024;
    }
    
    
    http {
        #文件扩展名与文件类型映射表
        include       mime.types;
        #默认文件类型
        default_type  application/octet-stream;
        #日志文件输出格式 这个位置相于全局设置
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #请求日志保存位置
        #access_log  logs/access.log  main;
    
        #设定请求缓冲
        client_header_buffer_size 1k;
        large_client_header_buffers 4 4k;
    
        #打开发送文件
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #客户端上传文件大小控制
        client_max_body_size 8m;
    
        #打开gzip压缩
        #gzip  on;
        #gzip_min_length      1000;  
        #gzip_types         text/plain text/css application/x-javascript;
    
        #设定负载均衡的服务器列表
        upstream mysvr {
            #weigth参数表示权值,权值越高被分配到的几率越大
            #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。  
            #同一机器在多网情况下,路由切换,ip可能不同  
            server 127.0.0.1:8080 weight=1;
            server 127.0.0.1:8090 weight=2;
        }
    
        #第一个虚拟主机
        server {
            #监听IP端口
            listen       80;
            #主机名
            server_name  localhost;
            #root  
    
            #设置字符集
            #charset koi8-r;
            #本虚拟server的访问日志 相当于局部变量
            #access_log  logs/host.access.log  main;
            #日志文件输出格式
            #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            #                  '$status $body_bytes_sent "$http_referer" '
            #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
            #location / {
            #    root   html;
            #    index  index.html index.htm;
            #}
    
            #静态文件缓存时间设置
            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {         
                expires 30d;
            }
    
            #静态文件缓存时间设置
            location ~ .*\.(js|css)?$ {         
                expires 1h;
            }
    
            #对本server"/"启用负载均衡
            #如果开启了这里的location,则79行的location必须屏蔽
            #对各种静态还是动态的数据进行过滤
            #此处如果请求是.jsp、.do结尾的文件都交给Tomcat服务器
            #其他的交给nginx处理
            location ~ (\.jsp)|(\.do)$ {  
              proxy_pass http://mysvr;  
              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 128k;  
              proxy_connect_timeout 90;  
              proxy_send_timeout 90;  
              proxy_read_timeout 90;  
              proxy_buffer_size 4k;  
              proxy_buffers 4 32k;  
              proxy_busy_buffers_size 64k;  
              proxy_temp_file_write_size 64k;  
            }  
            #设定查看Nginx状态的地址
            location /NginxStatus {
                stub_status on;
                access_log on;
                auth_basic “NginxStatus”;
                auth_basic_user_file conf/htpasswd;
            }
    
    
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            #error_page   500 502 503 504  /50x.html;
            #location = /50x.html {
            #    root   html;
            #}
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration    
        server {
            #多监听       
            listen       localhost:50000;
            #主机名
            server_name  LIULJ2576;
            #WEB文件路径
            root         E:/Portal;
            #默认首页
            index        HomePage.html;        
            #location / {
            #    #这里相当于局部变量
            #    root   E:/Portal;
            #    index  HomePage.html;
            #}
        }
    
    
        # HTTPS server HTTPS SSL加密服务器
        #
        #server {
        #    listen       443;
        #    server_name  localhost;
    
        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_timeout  5m;
    
        #    ssl_protocols  SSLv2 SSLv3 TLSv1;
        #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        #    ssl_prefer_server_ciphers   on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    
    展开全文
  • 百试百灵的直播服务器搭建教程! 1.环境准备 Linux服务器一台(外网、内网都行) Docker环境安排一下 NGINX-RTMP镜像 推流工具点击下载 拉流工具点击下载 2.开撸 进入linux,安装docker,拉取nginx-rtmp镜像,修改...

    百试百灵的直播服务器搭建教程!

    1.环境准备

    1. Linux服务器一台(外网、内网都行)
    2. Docker环境安排一下
    3. NGINX-RTMP镜像
    4. 推流工具点击下载
    5. 拉流工具点击下载

    2.开撸
    进入linux,安装docker,拉取nginx-rtmp镜像,修改配置,启动镜像ok!

    拉取镜像

    docker pull tiangolo/nginx-rtmp
    

    创建流媒体Nginx服务器挂载目录

    mkdir -p /data/nginx1935/www /data/nginx1935/logs /data/nginx1935/conf /data/nginx1935/tmp
    

    创建流媒体服务器nginx.con配置文件

    touch /data/nginx1935/conf/nginx.conf
    

    启动nginx-rtmp镜像

    docker run -d -p 10935:1935 -p 10980:1980 -v /data/nginx1935/www:/usr/share/nginx/html -v /data/nginx1935/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx1935/tmp:/tmp -v /data/nginx1935/logs:/var/log/nginx --name nginx-rtmp tiangolo/nginx-rtmp
    
    

    nginx.conf配置

    
    worker_processes auto;
    rtmp_auto_push on;
    events {}
    rtmp {
        server {
            listen 1935;
            listen [::]:1935 ipv6only=on;
    
            application live {
                live on;
                record off;
                hls on;
                hls_path /tmp;
                hls_fragment 2s;
                hls_playlist_length 6s;
    			on_publish http://192.168.0.89:9052/Live/PushAuth;#这个是推流身份验证接口(JAVA程序写的)
    			on_play http://192.168.0.89:9052/Live/PullAuth;#这个是拉流身份验证接口(JAVA程序写的)
    			#这里的逻辑由拉流端访问拉流地址-->nginx-rtmp-->访问JAVA程序拉流者身份信息
    			#推流也是一样(不过多介绍)
            }
        }
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
        server {
            listen       1980;
            location /live {
             types {
              application/vnd.apple.mpegurl m3u8;
               video/mp2t ts;
               }
              alias /tmp/;
              add_header Cache-Control no-cache;
              add_header Access-Control-Allow-Origin *;
            }
        }
    }
    
    

    启动了流媒体服务器的同时也保证http服务器的正常运行

    推流地址:rtmp://192.168.0.188:1935/live/test
    拉流地址:http://192.168.0.188:1980/live/test.m3u8

    推流工具OBS Studio基本使用(只管搭建,不是视频专业出身,基本使用):
    安装好OBS Studio运行起来!
    在这里插入图片描述
    配置推流地址服务器+直播画面效果

    在这里插入图片描述
    设置场景+直播源(可以有本地视频,桌面录制、摄像头、麦、弹幕文字。。。)
    在这里插入图片描述

    拉流工具VLC media player基本使用(只管搭建,不是视频专业出身,基本使用):
    安装好VLC media player运行起来!

    在这里插入图片描述
    开始拉流(需要等待,根据服务器带宽和直播画质决定)
    在这里插入图片描述

    然后就ok了!!!

    展开全文
  • 搭建文件服务器,Java+Centos7+Nginx

    千次阅读 2019-12-22 19:04:17
    最近试着搭建一个文件服务器,因为在企业应用开发中文件往往都是单独存储在一个服务器中的,与应用服务器相分离,数据库层面引用该文件只需要保存一个文件的url即可; 大致流程就是,前端请求文件服务器接口,接口...

    前言

    最近试着搭建一个文件服务器,因为在企业应用开发中文件往往都是单独存储在一个服务器中的,与应用服务器相分离,数据库层面引用该文件只需要保存一个文件的url即可;
    大致流程就是,前端请求文件服务器接口,接口逻辑处理保存该文件到服务器中,并返回可以访问该文件的url给前端;

    技术栈

    后端Java,SpringBoot2.2.2.RELEASE
    服务器Centos7,Nginx

    后端处理详情

    • 分环境开发部署,开发环境和测试环境,因为开发环境下使用的是Windows系统,文件路径与Linux系统不太一样,而且记录日志的方式也不一样,开发环境下日志我就直接输出在控制台,生产环境下日志记录到文件,所以利用Maven的profiles部署两个环境
    	<profiles>
            <profile>
                <!-- 开发环境 -->
                <id>dev</id>
                <properties>
                    <profiles.active>dev</profiles.active>
                </properties>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
            <profile>
                <!-- 生产环境 -->
                <id>pro</id>
                <properties>
                    <profiles.active>pro</profiles.active>
                </properties>
            </profile>
        </profiles>
    

    分环境的不同配置,日志和存储路径

    spring:
      #指定当前的环境------在pom文件中取值使用@profiles.active@
      profiles:
        active: @profiles.active@
    
    #日志配置文件位置
    logging:
      config: classpath:log4j/${spring.profiles.active}/log4j2.xml
      
    ---
    spring:
      profiles: dev
    
    # 开发环境下第一层文件存储目录,windows下文档路径 / 和 \ 都可以
    filePath: K:/forFileUpload/
    
    ---
    spring:
      profiles: pro
    
    # 生产环境下第一层文件存储目录
    filePath: /fei/fileupload/
    

    不同环境的日志文件
    在这里插入图片描述

    • 避免文件名重复,使用UUID重命名文件名;根据日期每天生成一个次级文件夹;这都是具体接口的处理逻辑
    package com.fei.fileupload.web;
    
    import com.fei.common.data.ApiResult;
    import com.fei.common.log.Loggable;
    import com.fei.fileupload.model.FileModel;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.time.LocalDate;
    import java.util.UUID;
    
    /**
     * @Author: xiaoshijiu
     * @Date: 2019/12/19
     * @Description: 搭建文件服务器,接收文件入口
     */
    @RestController
    @RequestMapping("/file")
    public class FileUpload implements Loggable {
    
        @Value("${filePath}")
        private String filePath;
    
        @Value("${spring.profiles:dev}")
        private String profiles;
    
        @Value("${serverAddress}")
        private String serverAddress;
    
        @PostMapping("/upload")
        public ApiResult<FileModel> getFile(MultipartFile file) throws IOException {
    
            if (file.isEmpty()) {
                return ApiResult.fail("失败,文件不存在!!");
            }
    
            getLog().info("文件的大小是:{}", file.getSize());
            getLog().info("文件的类型是:{}", file.getContentType());
    
            String fileName = file.getOriginalFilename();
            getLog().info("文件的名称是:{}", fileName);
    
            // 文件名处理(避免文件重名覆盖),使用UUID
            String exname = fileName.substring(fileName.lastIndexOf("."));
            fileName = UUID.randomUUID().toString().replace("-", "") + exname;
    
            // 每天一个文件夹,第二层目录
            String fileDatePath = LocalDate.now().toString();
            String DateFileName = fileDatePath + "/" + fileName;
            String endFilePath = filePath + DateFileName;
    
            File fileTotlePath = new File(filePath + fileDatePath);
            // 总路径不存在,新建(这里路径必须要确保存在,以免下面转换的时候报FileNotFoundException)
            if (!fileTotlePath.exists()) {
                fileTotlePath.mkdirs();
            }
            // 将file转换到指定目录
            file.transferTo(new File(endFilePath));
    
            FileModel fileModel;
            if ("dev".equals(profiles)) {
                fileModel = new FileModel(endFilePath);
                getLog().info("文件最终url是:{}", endFilePath);
            } else {
                fileModel = new FileModel(serverAddress + DateFileName);
                getLog().info("文件最终url是:{}", serverAddress + DateFileName);
            }
            return ApiResult.ok(fileModel);
        }
    
    }
    
    
    • 新版SpringBoot配置接受的最大文件大小(跟之前版本不太一样,有一个新的类DataSize
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Value("${fileMaxSize:10}")
        private Long fileMaxSize;
    
        /**
         * 接受文件大小配置
         */
        @Bean
        public MultipartConfigElement multipartConfigElement() {
            MultipartConfigFactory factory = new MultipartConfigFactory();
            // 文件最大
            // DataSize.ofMegabytes(10L),10MB
            factory.setMaxFileSize(DataSize.ofMegabytes(fileMaxSize));
            // 设置总上传数据总大小
            factory.setMaxRequestSize(DataSize.ofMegabytes(fileMaxSize));
            return factory.createMultipartConfig();
        }
    }
    
    • 拦截器过滤ip,给指定的ip放行访问;因为有的公司搭建的文件服务器,可能只是为了供公司内网使用,这时候我们就需要对请求的客户端ip进行过滤
    package com.fei.fileupload.interceptor;
    
    import com.fei.common.exception.NotAuthException;
    import com.fei.common.server.iputil.GetClientIp;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @Author: xiaoshijiu
     * @Date: 2019/12/20
     * @Description: ip拦截器,文件服务器只供内部使用,所以需要拦截ip。选择性放行
     */
    public class IpInteceptor implements HandlerInterceptor {
    
        @Value("${permissionURL}")
        private String permissionURL;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                Object handler) throws Exception {
            // 获取ip
            String ipAdrress = GetClientIp.getIpAdrress(request);
            if (ipAdrress.contains(permissionURL)) {
                return true;
            }
            // 抛出去一个异常,供捕获返回
            throw new NotAuthException("对不起你没有权限,不允许访问!!");
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                Object handler, Exception ex) throws Exception {
    
        }
    }
    
    

    拦截器配置,注意这里配置拦截器的时候:最好要以 getIpInterceptor() 和 @Bean 的形式配置拦截器 不然在拦截器里面不能使用 @value 取值
    因为@Bean 的形式,spring管理bean,能够依赖注入

    package com.fei.fileupload.config;
    
    import com.fei.fileupload.interceptor.IpInteceptor;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.web.servlet.MultipartConfigFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.util.unit.DataSize;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import javax.servlet.MultipartConfigElement;
    
    /**
     * @Author: xiaoshijiu
     * @Date: 2019/12/19
     * @Description: Web的一些配置
     */
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Bean
        public IpInteceptor getIpInterceptor() {
            return new IpInteceptor();
        }
    
        /**
         * 注意事项:这里最好要以 getIpInterceptor() 和 @Bean 的形式配置拦截器 不然在拦截器里面不能使用 @value 取值
         * @Bean 的形式,spring管理bean,能够依赖注入
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 添加拦截器,指定拦截请求和排除请求
            registry.addInterceptor(getIpInterceptor()).addPathPatterns("/**")
                    .excludePathPatterns("/error");
        }
    
    }
    
    
    • 大致后端情况就这么多,还有一些其他的像什么全局异常处理Controller等啊,就不需要介绍了

    服务器Nginx配置

    网上也有些人使用的是Tomcat加设置虚拟目录的形式,达到可以在线访问指定目录的效果;但是在处理静态资源这一块,Nginx比Tomcat效率要高很多,也是第一选择;
    安装好Nginx,在/usr/local/nginx/conf里面找到nginx.conf
    加上一组location,进行映射,访问ip:port/file/xx.jpg就相当于访问/fei/fileupload/下面的xx.jpg

    location /file/ {
                alias   /fei/fileupload/;    
            }
    

    最后

    至此,文件服务器搭建完毕,前端请求Java的接口,经过处理保存到指定目录,并返回可以访问的url;

    展开全文
  • Linux系统java环境(以及Nginx反向代理) 主要安装jdk和Tomcat环境 1.tomcat环境安装 2.jak环境安装以及环境变量配置 两种方式: 第一种:使用yum方式安装jdk 第二种:直接官网下载压缩包进行安装(以下只讲第一种...

    Linux系统java环境(以及Nginx反向代理)

    主要安装jdk和Tomcat环境

    1.tomcat环境安装
    2.jak环境安装以及环境变量配置

    两种方式:

    第一种:使用yum方式安装jdk

    第二种:直接官网下载压缩包进行安装(以下只讲第一种方式,安装包自行前往官网下载)
    下载完解压到自己目录下 命令解压jdk到当前目录:环境变量配合第一种方式进行配置

    tar -zxvf jdk-8u60-linux-x64.tar.gz

    一、安装jdk和配置环境变量

    1.查看yum中管理的可用的JDK软件包列表:

    yum search java | grep -i --color JDK

    结果如下图所示:
    在这里插入图片描述

    2.选择合适版本,安装jdk,本人选择的是java-1.8.0-openjdk-devel.x86_64

    yum install java-1.8.0-openjdk-devel.x86_64

    出现如下显示时输入y,进行安装

    在这里插入图片描述

    3.配置环境变量。下面直接上命令

    vim /etc/profile

    i (进入编辑状态)

    将下面三行代码放在文件末尾
    
    ~~export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64(注意这行是照着别人写的,结果报错,我使用的下面那一行。具体看安装的版本,请自行替换)~~ 
    
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
    
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    export PATH=$PATH:$JAVA_HOME/bin
    

    按Esc(退出编辑状态)

    :wq(保存并退出)

    source /etc/profile (让设置立即生效)
    在这里插入图片描述
    java -version
    在这里插入图片描述
    能显示以上信息,就说明安装成功了。

    二 、安装tomcat

    首先在tomcat官方下载tomcat文件,然后利用ftp工具上传到linux服务器—自行百度下载ftp工具

    tar zxvf apache-tomcat-8.5.37.tar.gz(执行命令解压上传的tomcat)

    cd / (回到根目录)

    1、启动tomcat

    执行命令:/home/apache-tomcat8.5.37/bin/startup.sh(这个命令第一次安装是用成功了,后面还是要进入bin目录下,在输入启动命令,末尾有介绍)

    在这里插入图片描述

    2、开放8080端口

    在linux上开启的tomcat使用浏览器访问不了。主要原因在于防火墙的存在,导致的端口无法访问。

    CentOS7使用firewall而不是iptables。所以解决这类问题可以通过添加firewall的端口,使其对我们需要用的端口开放。

    1.使用命令 firewall-cmd --state查看防火墙状态。
    得到结果是running或者not running

    2.在running 状态下,向firewall 添加需要开放的端口,如果没开启 systemctl start firewalld 开启即可

    命令为 firewall-cmd --permanent --zone=public --add-port=8080/tcp //永久的添加该端口。去掉–permanent则表示临时。

    与之对应关闭的命令为firewall-cmd --zone=public --remove-port=8080/tcp --permanent

    3.firewall-cmd --reload //加载配置,使得修改有效。

    4.使用命令 firewall-cmd --permanent --zone=public --list-ports //查看开启的端口,出现8080/tcp这开启正确

    5.再次使用外部浏览器访问,这出现tomcat的欢迎界面。

    6.查看netstat -tunlp

    补充(CentOS7以下有专门的防火墙操作命令):
    开启防火墙的命令
    systemctl start firewalld.service
    关闭防火墙的命令
    systemctl stop firewalld.service
    开机自动启动
    systemctl enable firewalld.service
    关闭开机自动启动
    systemctl disable firewalld.service
    查看防火墙状态
    systemctl status firewalld下列显示表示没有问题。

    查看设置是否有效

    firewall-cmd --zone=public --query-port=8080/tcp
     在这里插入图片描述

    3.上传部署java WEB项目

    1.找到Tomcat下 conf/server.xml找到这个文件

    使用命令:vi server.xml 修改文件配置

    为了方便截图我这边使用软件打开xml文件

        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    在这里插入图片描述

    <Context path ="" docBase="自己的项目名.war"  reloadable="true"/>
    

    在这里插入图片描述
    上传项目的war文件–(我这边暂时用的是springboot)

    在pom.xml里面直接加上相关配置如图

    在这里插入图片描述
    如何导出war文件?(这边做Maven介绍)点击如下就能自动生成
    在这里插入图片描述
    会生成一个target文件如图(这个就是上传服务器的文件)
    在这里插入图片描述
    一般默认情况下生成的都是系统默认的名称,那如何自定义生成war文件名?
    还是修改pom.xml文件,如图,添加finlName标签导出时的war文件就是当前的文件名
    在这里插入图片描述
    首先是上传,但是100多M的war包用PuTTY竟然上传失败!没办法只好整了个xshell

    关于Xshell,直接去官方网站下载,需要你填写一个邮箱,然后你的邮箱会收到一个下载地址,点击下载就好啦。安装的时候选择个人学校免费版本的就好了。

    然后连接上Xshell,同样是访问 ip,用户名,密码这三个参数然后下面命令:

    rz (查看是否安装上传工具rz 指上传到linux服务器 )

    yum install -y lrzsz (安装上传工具)

    rz -be(或rz 选择你要上传的文件上传即可,我用rz 命令失败,涉及到二进制的问题)

    特别说明:上传的文件在你登录的用户名下,我用root登录,因此上传文件在root目录下。害我找半天,不在home目录下哦

    然后把war移动到tomcat的webapps文件下,再重新启动tomcat就好了。

    所有上传的项目必须放到webapps文件下

    这里多扯一句,如果有多个项目怎么办?如图
    在这里插入图片描述

    Linux下tomcat服务的启动、关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方

    式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录(cd usr/local/tomcat/bin)
    1,启动tomcat服务 方式一:直接启动 ./startup.sh 方式二:作为服务启动 nohup ./startup.sh &
    方式三:控制台动态输出方式启动 ./catalina.sh run 动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务
    解释:
    通过方式一、方式三启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也会立即停止,通过方式二可以作为linux服务一直运行
    通过方式一、方式二方式启动的tomcat,其日志会写到相应的日志文件中,而不能动态地查看tomcat控制台的输出信息与错误情况,通过方式三可以以控制台模式启动tomcat服务,
    直接看到程序运行时后台的控制台输出信息,不必每次都要很麻烦的打开catalina.out日志文件进行查看,这样便于跟踪查阅后台输出信息。tomcat控制台信息包括log4j和System.out.println()等输出的信息。
    2,关闭tomcat服务 ./shutdown.sh

    如何隐藏端口?

    方法一:修改tomcat server.xml文件
    在这里插入图片描述
    原理是:http请求的默认请求的是80端口,所以用80端口的话可以再域名后面省略端口号

    那如果那咱就是想用8080端口又不想让端口出现怎么办?

    第二种方式Nginx的反向代理

    安装就不做过多介绍了

    参考:Nginx安装以及Linux系统命令

    安装完Nginx后我们需要修改nginx配置文件,在/opt/nginx/config/nginx.conf文件中:

    server {
        listen       80;
        server_name  image.项目名.com;
    	# 监听域名中带有group的,交给FastDFS模块处理
        location ~/group([0-9])/ {
            ngx_fastdfs_module;
        }
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass:http://www.baidu.com:8080/;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    

    这里需要注意到的是 proxy_pass这个是转发到你的域名下面去,记住proxy_pass这个一定是你要转发的域名确保能访问到,listen会监听到80端口的请求这时候我们就不用在访问的时候带上端口号了

    最后来了几个我这次遇到的大坑(来了上硬菜了)

    腾讯云服务器tomcat端口无法访问

    1.https://console.cloud.tencent.com/cvm/securitygroup 需要去这个地址设置安全组。

    当然更改了安全组和防火墙还是不行。于是我查看Tomcat的记录,发现:

    /home/apache-tomcat-8.5.37/bin/catalina.sh: line 482: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/bin/java: No such file or directory

    很明显是环境变量配置的问题。原因是我前面安装图简单实用yum 安装而环境变量又是网上copy的三行代码,而自己根本没有仔细查看是否对不对。

    当然这个问题通过查看tomcat的运行状态也可以看出来

    ps -ef|grep tomcat
    在这里插入图片描述
    出现上图,表示是有问题的

    在这里插入图片描述
    这个是正常的,也就是受java环境吧变量配置的影响。

    实际安装的jdk信息和环境变量配置的对不上。于是修改了环境变量中java的版本信息

    在这里插入图片描述
    第二种情况:

    输入命令 netstat -tunlp 可以看到8080端口根本就没开放,如何访问。

    那么如何开启,因为Centos7以上用firewalld代替了iptables,也就是说firewalld开通了8080端口应该就行了。

    查看开放端口 netstat -tunlp

    在这里插入图片描述
    1.查看防火墙状态。

    firewall-cmd --state #查看防火墙状态。

    得到结果是running或者not running

    如果没开启

    systemctl start firewalld

    2.在running 状态下,向firewall 添加需要开放的端口

    firewall-cmd --permanent --zone=public --add-port=8080/tcp
    #永久的添加该端口。去掉–permanent则表示临时。

    与之对应关闭的命令为

    firewall-cmd --zone=public --remove-port=8080/tcp --permanent

    3.加载配置,使得修改有效。

    firewall-cmd --reload

    使用命令 查看开启的端口,出现8080/tcp这开启正确

    firewall-cmd --permanent --zone=public --list-ports
    

    别忘了关键一步 再次启动防火墙

    systemctl start firewalld.service 
    

    再查看端口8080就开放了
    在这里插入图片描述
    最坑爹的是腾讯云的服务器,在这些和安全组都设置好以后。你得等待一会,然后访问Tomcat就成功了。期间发生的访问错误都与操作无关。延时很严重。

    以上是这次自己部署腾讯云遇到的一些坑,耗费了不少时间,希望能给你们带来帮助,网上查阅了不少资料,总结这篇文章,如有错误望指出立马修正

    展开全文
  • 搭建Nginx+JAVA环境

    2015-09-19 13:25:00
    搭建Nginx+JAVA环境Apache对Java的支持很灵活,他们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用的支持。Apache一般采用一个内置模块来和Java应用服务器打交道。与Apache相比,Nginx在...
  • 我将带领大家使用Java、FFmpeg、Nginx亲手搭建“直播网站”。 主要内容包括: 1、亲手搭建Java+nginx直播网站,用源码方式编译nginx和rtmp模块。 2、亲手搭建FFmpeg环境,并使用命令行进行直播推流。 3、亲手搭建...
  • 上周公司要我用java获取客户那边大华摄像头进行页面上直播的效果,下面谈谈我的做法: 简单说一下nginx和ffmpeg 1.nginx服务器负责rtmp协议访问:rtsp->rtmp 2.ffmpeg 负责推拉视频流,对视频流进行处理。 ...
  • 本人最近练手在linux中搭建Nginx+Tomcat部署java web项目,遂随笔记录如下: 1. 资料准备:  Linux centos7系统安装完毕,本人在虚拟机中安装配置。具体过程自行百度吧  JDK1.8 官网下载:...
  • 2步搞定Linux搭建nginx图片服务器
  • 后端项目为test-project.jar ,将后端项目打包三个:test-project-1.jar、test-project-2.jar、test-project-3.jar...开发需要端口,下面我们进行搭建 1、部署后端jar项目 Linux 创建/root/work目录,将三个jar包分.
  • 前言 一般开发中,都会把图片上传到一个目录,然后将目录和文件名拼接存储在数据库中,但是,这种方法如果没弄好的话可能有一定的缺陷。...关于Docker和Nginx的介绍和优点在这里就不展开了,网上博客和教程也...
  • 搭建java 环境 安装nginx linux基础命令创建用户useradd $用户名 passwd $用户名查看Linux机器是32位还是64位uname -a; i686 or x86_64搭建java 环境 在usr目录下建立java安装目录 cd /usr mkdir java 将jdk-8u60-...
  • Nginx下载 下载地址: http://nginx.org/en/download.html 解压路径 提示:nginx安装路径尽量全为英文。 Nginx开启 nginx 默认占用80端口。 当Nginx正常开启时,后台默认创建俩个nginx.exe进程。一个为主...
  • Tomcat本身是一个JSP/Servlet动态服务器,却并不是一个好的静态资源服务器。在真实的Web应用中,JSP/Servlet的请求量相比静态资源(如图片、CSS、JS等等)的请求量要少得多。...1 Nginx服务器 1.1 Nginx简介 ...
  • 一、nginx服务器搭建及部署项目流程其实也是比较简单的,一切操作,都在一些特定条件下进行,如何进行nginx服务器项目搭建部署?1、root用户下进行操作   2、在SSH下操作   二、需要在已安装的产品项目...
  • Nginx的图片服务器的搭建Nginx的图片服务器的搭建Nginx的图片服务器的搭建Nginx的图片服务器的搭建
  • 基于java搭建的流媒体服务器(nginx+ffmpeg)可运行在linux上,具体文章说明:https://blog.csdn.net/weixin_40263855/article/details/87917484
  • 在Linux安装Nginx目前支持两种方式,一种是apt-get的方式,另一种是根据包安装的方式,其中apt安装十分便捷,仅需一行指令即可完成 1. apt-get安装Nginx 首先切换到root用户: sudo su root 使用apt-get安装: apt-...
  • Linux环境下搭建Nginx服务器

    千次阅读 2018-09-24 19:53:54
    [root@lee ~]# /usr/local/nginx/sbin/nginx 6. 启动 nginx 常用命令 重启: $ /usr/local/nginx/sbin/nginx 启动命令 重启: $ /usr/local/nginx/sbin/nginx –s reload 停止: $ /usr/local...
  • 1.修改nginx.conf配置文件,内容如下: server { listen 9000; #端口 server_name localhost; #服务名 charset utf-8; # 避免中文乱码 root E:\Download\java; #显示的根索引目录,注意这里要改成你自己的,目录...
  • 搭建nginx+tomcat+Java的负载均衡环境

    千次阅读 热门讨论 2015-10-23 18:59:46
    讲解nginx+tomcat+Java的负载均衡环境的搭建过程
  • 用途:在Javaweb项目中搭建图片服务器 前言 ftp有两种传输模式,主动和被动 主动模式是服务器告诉客户端打开一个端口,服务器获取该端口号,传输过去 被动模式是客户端让服务器开一个端口,客户端获取该端口号,...
  • java分布式商城项目环境搭建6-CentOS7.6搭建Nginx & FastDFS 整体架构 一、 Nginx 介绍 1.1 Nginx 简介 Nginx 是一款自由的、 开源的、 高性能的 HTTP 服务器和反向代理服务器; 同时也是一 个 IMAP、 POP3、 ...
  • CentOS 7 搭建Java Web服务(Nginx+Tomcat+MySql) 对于一个扎根Java编程的程序员来说,搭建Java Web服务是一个必备能力,所以在这里总结下,写了个安装教程。 教程环境为: CentOS 7.5 mini + ...
  • 很好的学习Windows+Nginx+Tomcat搭建负载均衡和集群环境教材,里面有详细的Demo。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,494
精华内容 14,997
关键字:

java搭建nginx

java 订阅