从环境搭建探讨做事的方法

背景:

最近团队在搞开发与测试环境整理。更换旧的IP段,启用新的IP段,一系列原来的上百台虚拟机上的成百上千个应用的“无缝”对接也是个问题,其实也不算是完全无缝,还是会有点小影响,但贵在对环境搭建熟悉的同事大有人在,所以倒不担心替换后有具体技术解决不了,这个过程中,到目前为止,其中难点不在于技术,在于做事的思考方法上,列举一个我认为比较不错的方法,当然这是别的同事想出来的。

原来我们开通外网访问的虚拟机上,一个tengine配置里有无数个应用,哪些有用,哪些没用,都不是太清楚,而又有些location配置一定要用根目录也不清楚为什么是否有可解方法,毕竟根目录只有一个

一向没有专人维护所以导致现在乱七八遭,这次一次整理了。

问题:

1、减少安全隐患

2、整理清楚原有环境配置

思路:

1、首先安全方面,只要开通了外网,就会很大安全隐患,这个世界不怕贼多就怕被贼惦记了,在安全层面,对这台外网的机器做了如下的处理:

a.限制单个上传文件20m
b.禁爬虫
c.禁http跳转->https
d.禁非公司域名
e.限制非本公司ip访问/admin

具体操作,可以百度或gogle,linux虚拟机设置

2、机器上服务启动关闭方面,做成 定时任务,把此机器上应用下班时候都停掉,shell脚本挺简单的

a、每天某个时间点进行强制停止服务,可以直接kill也可以直接进到服务中bin里面启动停止

b、某个时间点做停止服务操作,且在之后,每半小时会重新再停止一次,第二天早上8点开启服务

c、遇到加班情况,自行开启,但半小时会停止。

3、如果几十个应用都有外网访问的需求,那么tengine入口配置就会有几百个配置信息。太多了怎么办

a、由各项目负责人找配置管理员加相关配置,提供开通时长,到时间后自动删除,如果与预计时间有误差,删除后再重新添加,不会持续保留一再延期

b、tengine-conf配置按网站目录分类,这样同一类的配置文件就很少,例如

看一下入口tengine配置:加了一些过滤

server {
        listen       80 ;
        server_name  xx.(1x|2x|3x|4x|5x|6x|7x|8x).com.cn 127.0.0.1 localhost 192.168.*;  #允许访问的server名称

        include nginx_ssl.conf;  #增加https加密码访问配置

		#请求过滤:禁止http跳https,http跳https会有几次握手,用的协议就是CONNECT
        if ( $request ~* "CONNECT " ) {  
            return 403;
        }
		#请求过滤:防刷防爬虫
        if ( $http_user_agent ~* (pider|bot|Yahoo\!|dita) ) {
            return 403;
        }
		#请求过滤:过滤请求域名
        if ( $host !~* xx(1x|2x|3x|4x|5x|6x|7x|8x) ) {
            return 403;
        }
		#请求过滤:禁IP,
		#单看nginx模块名ngx_http_access_module,很多人一定很陌生,但是deny和allow相比没一个人不知道的,实际上deny和allow指令属于ngx_http_access_module.我们想控制某个uri或者一个路径不让人访问,在nginx就得靠它了。
        set $allowss true;
        if ( $request ~* /xx ){#访问请求URL带xx结尾的
            set $allowss p;
        }
		#来源IP限制:remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。什么是x_forwarded_for正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP
        if ( $remote_addr !~* (127.0.0.1|219.x.244.|x.136.x.|61.x.x.|192.168.|x.x.30.|x.5.251.|x.107.x.|x.77.x.|x.23.x.|14.x.x.|x.x.122.|x.90.x.|120.x.x.) ){
            set $allowss "${allowss}c";
        }
        if ( $allowss = pc) {
            #set $allowss false;
            return 403;
        }

        #teninge run status
        location = /nginx-status { stub_status on; access_log off; allow 127.0.0.1; allow 192.168.0.0/16; deny all;}

        include aa/*.conf;
        include bb/*.conf;
        include cc/*.conf;
        include dd/*.conf;
        include ee/*.conf;
        include ff/*.conf;
        include gg/*.conf;

 

 再来看一下具体到每一个应用的配置文件:

[root@vv /data/PRG/tengine_online/conf]$ cd aa/
[root@vv /data/PRG/tengine_online/conf/aa]$ ll
总计 8
-rw-r--r-- 1 root root 316 05-17 15:02 aa1.conf
-rw-r--r-- 1 root root 310 05-17 16:31 aa2.conf
[root@v72 /data/PRG/tengine_online/conf/pcauto]$ vim aa1.conf 

    location ~ ^/aa1{ #目录根据实际可以自己改名称
            proxy_pass   http://192.168.xx.xx:port; #直接写应用后端IP和端口
            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;
        }

其实在这一步,。也不是应用所有目录下的URL都有外网访问需求嘛,我们也可以指定某些路径下

是不是很简单明了呀!!!!

 

posted @ 2018-05-17 17:19  sincoolvip  阅读(264)  评论(0编辑  收藏  举报