怎么做一个文件软件管理服务器

怎么做一个文件软件管理服务器,第1张

前言

由于要使运维工作更加的规范,于是要对一些 *** 作进行统一和调整
例如一些软件的安装包(tar.gz zip rpm Centos镜像),对这些文件按版本进行整理,可以做一个类似镜像网站

首先最低满足以下需求:
<1>要对日常或工作中需要的软件的安装包的存放位置,上传下载方式进行统一,使其不在散乱
上传通过个人jumpserver账号 下载通过wget

<2>在不同的局域网或网络环境下,凡是可以访问公网的,都可以使用这边提供的域名或url进行下载,避免某些环境软件的时候还得rzsz等方式下载

<3>使用浏览器访问或wget下载,并且需要用户名和密码的验证

<4>满足临时传文件的需求,放到对应目录就能下载



方案一
云盘

看到上面的要求有时候可能会想到云盘,但是大部分开源的云盘为了安全或者 更好的查看文件的需求,需要下载客户端.在一个封闭的局域网并且也许不存在桌面的情况下,需要下载对应客户端的软件并登陆,是一件麻烦的事情。像python yum curl一样使用命令行可直接进行下载或安装是最方便的。但是如果你没有 具有复杂局域网环境(防火墙及各种限制)的 用户,使用云盘也不错。



方案二
nginx代理FTP服务

通过配置一台或几台ftp通过nginx使用代理出去,使用这个方法可以实现身份认证和wget下载等需求,并且还有 目录的界面

但是存在一些缺点:
FTP本身存在的一些安全隐患;
FTP被动模式下,端口范围较宽,Nginx配置麻烦,且nginx也要开放较多端口,设置iptables繁杂
这边并不需要和允许用户去上传文件

如果放到公网访问绝对不考虑,如果是个人内网使用也可以



方案三
nginx代理访问本地文件资源

使用ngx_http_auth_basic_module身份认证,
ngx_http_limit_conn_module 限制速度和访问

这2个一般是默认开启的,除非是编译的时候关闭了



<1>生成加密后的密码

yum install -y httpd-tools

htpasswd -c ./pass.db  wangwu;

-c:默认是使用md5加密, pass.db是指定密码填入的文件,名称任意
最后一个是用户名


<2>安装并配置nginx或openresty

nginx.conf

include /data/nginx/conf.d/*.conf

为了方便管理,去conf.d下配置分站


cat conf.d/management.conf


limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn_zone $server_name zone=perserver:10m;


	server {
		listen 80;
		server_name localhost ; 
        charset utf-8;
        
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;

       
		
		
		#配置跨域
		add_header Access-Control-Allow-Origin *;
    	add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Headers Content-Type,Authorization;
        
        #限制爬虫
        if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
                return 403;
        }

       auth_basic "Login";
       auth_basic_user_file /data/nginx/conf/pass.db;

		location / {
		    #限速1024k/s
            limit_rate 1024k;
            #单个ip最多10个线程
            limit_conn addr 10;
            #单个server最多并发连接数100
            limit_conn perserver 100;
            #达到指定大小后再限速
            #limit_rate_after 10m;
			#代理的本地文件夹
			root /test;
			#开启目录浏览功能;如果没有此项,要访问文件不填写具体路径时,页面为空白
			autoindex on;  
			#关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;			
			autoindex_exact_size off;  
			#开启以服务器本地时区显示文件修改日期! 			
			autoindex_localtime on;
            
            #允许访问的网段
            allow 114.247.62.0/24;
            #禁止其他网段访问
            deny all;

		}
	}


#为了统一,增加了反爬,跨域,限速,限制ip,可根据需求添加修改


补充:
limit_conn_zone $binary_remote_addr zone=addr:10m;
addr就是这个zone的命名,任意起名称,但是需要全局唯一,不可以和其他的limit_conn_zone的相同

$binary_remote_addr限制同一客户端ip地址
$server_name限制同一server最大并发数
limit_conn限制并发连接数
limit_rate限制下载速度



<3>浏览器访问,输入账号和密码



<4>wget下载方式

wget --http-user=用户 --http-passwd=密码 -r -p -np -k -nH http://IP:端口/地址

示例
wget --http-user=test --http-passwd=test -r -p -np -k -nH http://test.com/tmp/online/mysql


下载下来的目录格式为

tmp
├── online
   └── mysql
       └── 等等文件
--http-user             登陆的用户
--http-passwd           用户对应的密码
-c                      断点续传
-r                      递归下载,下载指定网页某一目录下(包括子目录)的所有文件
-nd                     递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-np                     递归下载时不搜索上层目录
-k                      将绝对链接转为相对链接,下载整个站点后脱机浏览网页,最好加上这个参数
-L                      递归时不进入其它主机
-p                      下载网页所需的所有文件
-A                      指定要下载的文件样式列表,多个样式用逗号分隔
-i                      后面跟一个文件,文件内指明要下载的URL


方案四
nginx代理tomcat

这个方案和前面的一个基本相似
当资源在别的服务器的时候,部署tomcat,nginx再代理tomcat服务

优点:方便nginx代理做高可用和负载均衡



<1>在资源所在的服务器部署tomcat和java

建议:
tomcat7 or tomcat8
jdk 1.8



<2>server.xml配置

      <Host name="localhost"  appBase="webapps"
		  unpackWARs="true" autoDeploy="true"
		  xmlValidation="false" xmlNamespaceAware="false">
		
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
		   <Context path="/testone/" docBase="/test/" debug="0" > 
	    </Context>	
      </Host>
    </Engine>
  </Service>
</Server>

path        为访问的路径
docBase     为项目所在的目录,一般为绝对路径,也可以写相对路径(相对路径是相对于tomcat安装目录的webapps目录)
workDir     是tomcat运行是对JSP文件做编译后的文件
debug       建议设置为0


<3>软链配置(可选)

如果你的项目或代码所在的目录中有软链接,需要开启软链配置
https://blog.csdn.net/GX_1_11_real/article/details/91956016

这种常见于通过nfs挂载过来的资源



<4>web.xml

允许显示目录和文件列表,默认是禁止的

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
        </init-param>
        <init-param>
                <param-name>listings</param-name>
                <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>


关闭欢迎页,将其注释或删除

<welcome-file-list>
        <welcome-file>index.html</welcome-file>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>index.action</welcome-file>

</welcome-file-list>


<5>处理tomcat启动慢的问题

vim $JAVA_HOME/jre/lib/security/java.security

securerandom.source=file:/dev/random
替换为
securerandom.source=file:/dev/urandom
or
securerandom.source=file:/dev/./urandom

替换有2种的原因:有些版本/dev/urandom后并不会生效,需要加.,有人说是bug,有人说是故意这样设计的


<6>修改完后,重启tomcat



<7>配置nginx

安装和加密参考方案三

nginx.conf

include /data/nginx/conf.d/*.conf

为了方便管理,去conf.d下配置分站


以下ip均为演示
123.123.123.123即为示例中部署tomcat的服务器



cat conf.d/management.conf

upstream manage{
        server 123.123.123.123:8080;
        server 121.121.121.121:8080;
        ip_hash;
       }    
       
       
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn_zone $server_name zone=perserver:10m;


	server {
		listen 80;
		server_name localhost ; 
        charset utf-8;
        
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html; 
		
		
		#配置跨域
		add_header Access-Control-Allow-Origin *;
    	add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Headers Content-Type,Authorization;
        
        #限制爬虫
        if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
                return 403;
        }

       auth_basic "Login";
       auth_basic_user_file /data/nginx/conf/pass.db;
       
       #允许访问的网段
       allow 114.247.62.0/24;
       #禁止其他网段访问
       deny all;

		location / {
            limit_rate 1024k;
            limit_conn addr 10;
            limit_conn perserver 100;
                      
            proxy_pass http://manage/testone/;
            proxy_set_header host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
	}


#为了统一,增加了反爬,跨域,限速,可根据需求添加修改


<8>访问和下载方式参考方案三



补充:
最后2个方案是常见的2种配置
由于是运维内部使用,不强求界面的美观
如果是对界面有特殊的需求或追求美观建议联系前端工作人员或自己找办法美化各个界面
关于nginx的认证其实也可以配置和ldap对接,但是由于并不需要一些ldap的用户去登陆,就没演示配置

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/800690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存