Ubuntu 14.04上的Apache服务器限制单个用户的下载带宽

今天突然发现自己的服务器访问异常缓慢,从阿里云的监控平台上看到,CPU的利用率并不高,但是带宽却已经被吃满了,导致网站访问异常缓慢,跟踪了一下发现是某个用户下载网站上的大文件导致了带宽吃紧的情况。因此需要限制某个用户的独占带宽。

具体操作


1.安装带宽限制模块

2.启用模块

3.配置网站对于带宽的限制规则

在原有的

之间增加如下内容

然后重启 Apache2.

注意,如果配置了HTTPS,那么对应的配置文件也需要调整。

参考链接


Ubuntu 14.04检查是谁占用了带宽

今天突然发现自己的服务器访问异常缓慢,从阿里云的监控平台上看到,CPU的利用率并不高,但是带宽却已经被吃满了,导致网站访问异常缓慢,于是想看看究竟是哪个连接导致的,网上搜索了一下,找到 iftop工具。
安装如下:

阿里云的ECS服务器上,外网网卡默认是eth1,因此执行如下命令:

可以看看是哪些连接长时间占用了带宽,然后去 Apache2的访问日志中对应看看 IP地址在访问哪些文件就知道具体情况了。

下面是原文照抄

利用iftop找出是谁占用了带宽

有时候我们的网络缓慢并不是由远程服务器或路由器所引起,而只是因为系统中的某些进程占用了太多可用带宽。虽然从直观角度我们很难确定哪些进程正在使用带宽,但也有一些工具能帮大家把这些捣蛋的家伙揪出来。

top就是这样一款出色的故障排查工具,它的出现还带来一系列思路相似的衍生品,例如 iotop--能够确定到底是哪些进程占用了大部分磁盘I/O性能。最终名为 iftop的工具横空出世,能够在网络连接领域提供同等功能。与top不同,iftop不会亲自关注进程情况,而是列出用户服务器与远程IP之间占用带宽最多的连接对象。举例来说,我们可以在iftop中快速查看备份服务器IP地址在输出结果中的位置来判断备份工作有没有大量占用网络带宽。

iftop输出图示

红帽与 Debian的各个发行版都能使用 iftop这一名称的软件包,但在红帽发行版方面大家可能需要从第三方资源库才能获取。一旦安装过程完成,我们在命令行中运行 iftop命令即可启用(需要 root权限)。和 top命令一样,我们可以点Q键退出。

iftop界面屏幕的最上方是显示全局流量的信息栏。信息栏之下则是另外两列信息,一列为源IP、另一列为目标IP,二者之间以箭头填充帮助我们了解带宽被用于从自己的主机向外发送数据还是从远程主机端接收数据。再往下则是另外三个栏位,表示两台主机之间在2秒、10秒及40秒中的数据传输速率。与平均负载相似,大家可以看到目前带宽使用是否达到峰值,或者在过去的哪个时段达到过峰值。在屏幕的最下方,我们会找到传输数据(简称TX)与接收数据(简称RX)的总体统计结果。与 top差不多, iftop的界面也会定期更新。

在不添加额外参数的情况下, iftop命令通常能够满足我们故障排查的全部需求;但有的时候,我们可能也希望利用一些选项实现特殊功能。 iftop命令在默认情况下会显示查找到的第一个端口的统计信息,但在某些服务器中大家可能会使用多个端口,所以如果我们希望让 iftop打理第二个以太网端口(即实例中的 eth1),那么请输入 iftop -i eth1

默认情况下, iftop会试图将所有IP地址通过解析转换为主机名称。这样做的缺点在于一旦远程 DNS服务器速度缓慢,报告的生成速度也将随之惨不忍睹。另外,所有DNS解析活动都会增加额外的网络流量,而这些都会显示在 iftop的报告界面当中。因此要禁用网络解析功能,别忘了在 iftop命令后面加 -n哦。

一般说来, iftop显示的是主机之间所使用的全局带宽;但为了帮助大家缩小排查范围,我们可能希望每台主机具体使用哪个端口进行通信。毕竟只要找到了主机中占用最大带宽的网络端口,我们就可以在判断是否接入 FTP端口之外进行其它排查手段。启动 iftop之后,按P键可以切换端口的显示与隐藏状态。不过大家可能会注意到,有时候显示所有端口状态可能导致我们正在关注的主机被挤出当前显示屏幕。如果出现这种情况,我们还可以按 SD键来仅显示来自特定源或特定目标的端口。由于服务项目众多,目标主机可能随机使用多个端口并发生带宽占用峰值,这将导致工具无法识别出正在使用的服务,因此仅显示源端口还是相当有用的。不过服务器上的端口也可能与当前设备上的服务相对应。在这种情况下,我们可以使用前面提到的 netstat -lnp来找出服务所侦听的端口。

与大多数 Linux命令相似, iftop也拥有多种高级选项。我们在文章中提到的这些已经足以涵盖大多数故障排查需求,但为了满足大家进一步了解 iftop功能的愿望,我教各位一个小技巧:只要输入 man iftop,就可以阅读包含在软件包当中的使用手册、获得更多与之相关的知识。

参考链接


Linux服务器故障排查指南:出是谁占用了带宽

Linux ls列出目录下所有文件数量

1.查看统计当前目录下文件的个数

2.查看统计当前目录下文件的个数,包括子目录里的。

3.查看某目录下文件夹(目录)的个数,包括子目录里的。

参考链接


linux ls列出目录下所有文件数量

Tomcat 7使用AJP协议导致AJP端口被意外暴露给外网

使用Ubuntu 13.10 Apache 2.2 通过 AJP 整合 Tomcat 7中的方法配置了通过 AJP协议来通过 Apache进行访问的代理。

但是最近发现 Tomcat有时候会崩溃掉。刚刚开始以为是正常的 OOM,后来分析日志,并没有找到相关的记录,反倒是发现如下内容:

于是感觉有些奇怪,因为 AJP协议应该不会发生非常频繁的通信协议错误问题。结果尝试从外网连接 TomcatAjp端口 8009,发现竟然可以通过 telnet连接成功!!说明端口意外暴露给了外网。

那么根据The AJP Connector中的介绍说明(注意 address部分),如果没有指定 IP地址的话,默认是绑定任意地址,这样就导致外网也可以访问这个端口。因此出于安全考虑,我们需要增加这个 address的设置,并且绑定到 127.0.0.1。最终结果如下:

而我在配置的时候,恰恰少设置了 address="127.0.0.1".这个这种错误有些低级啊。

Linux入门-使用脚本

在linux上开发,经常有一些重复性劳动,建议写成脚本,省时省力还不出错。

1.新建一个文件

vi filename

如vi test.sh

2.编辑内容,linux上sh的形式比较一致

#!/bin/sh
#comments

然后跟上自己的命令就可以了,比如

mkdir tmp

cd tmp

3.最后chmod +x test.sh,可执行,就可以执行了

4.执行完毕后,你会发现确实创建了tmp,但当前目录没有变。

这是因为脚本执行时会创建一个子环境,执行完毕后回到当前环境,如果你想直接改变当前环境,使用source 来执行脚本就可以了

source test.sh

就可以看到目录切到tmp下。

Linux服务器-windows远程开发

最近项目需要在Linux环境下,本人的本是windows,怎么办么?

答:申请一台服务器,linux环境,用ssh工具就可以开发了

不过服务器上只能用vim开发,开发起来惨不忍睹,怎么办?

答:远程开发

远程开发的原理很简单,就是把服务器上的文件夹映射到windows上,就可以像windows本地开发一样了。

首先在Linux服务器上安装samba,装好后给自己配置一个samba用户,具体方法请自行百度,参考链接:http://blog.csdn.net/i_chips/article/details/19191957。

window端打开计算机,有一个映射网络驱动器选项

samba_3

打开后有两个选项

samba_4

第一个是盘符,默认就行,红框所选的地方 写上要映射的服务器文件夹地址。

填好之前在samba上配置的账号/密码,就可以用了。

openssl 如何查看 der 和 pem格式的证书

One way to verify if "keytool" did export my certificate using DER and PEM formats correctly or not is to use "OpenSSL" to view those certificate files. To do this, I used the "openssl x509" command to view keytool_crt.der and keytool_crt.pem:

原文链接:openssl 如何查看 der 和 pem格式的证书

如何在Ubuntu 12.04上部署免费的SSL证书(Let's Encrypt)

Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
Let's Encrypt虽然还在测试当中,但是市场需求非常大,已经有非常多的朋友迫不及待地安装并用上了Let's Encrypt。Let's Encrypt向广大的网站提供免费SSL证书,不管是对于网站站长、互联网用户,还是对整个Web互联网,都是非常有利的,它有利于整个互联网的安全。
本篇文章就来为大家讲解一下如何获取Let's Encrypt免费SSL证书,并附上Apache的SSL证书配置方法。

一、 安装Let's Encrypt免费SSL准备


1.Let's Encrypt官网:
官方网站:https://letsencrypt.org/
项目主页:https://github.com/letsencrypt/letsencrypt
2.安装Let's Encrypt脚本依赖环境:(这一部分可以跳过,因为官方提供的Let's Encrypt脚本会自动检测并安装)

 

二、获取Let's Encrypt免费SSL证书


1.获取Let's Encrypt免费SSL证书很简单,你只需要执行以下命令,就会自动在你的VPS上生成SSL证书和私钥。

如果只想生成证书,则最后一句使用如下命令(貌似我目前只能用下面的命令,用上面的命令会报错):

2.执行上述命令后,会弹出对话框,同意用户协议。

3.接着会提示让你关闭Nginx或者Apache。

4.Let's Encrypt需要用到80和443端口,所以你需要关闭那些占用这两个端口的应用。

5.当你看以下内容时,就表明你的Let's Encrypt免费SSL证书获取成功了。

注意: 目前阿里云的服务器域名解析不支持 DNS Certification Authority Authorization (CAA) Resource Record,导致在进行签名的时候返回如下错误信息:

目前还没有解决方法,具体的讨论参考 DNS query timeout #1610

目前根据提交给阿里云的工单,今天2016年1月26日已经正式支持了Let's Encrypt,目前验证,一切正常了。

三、证书续期


Let's Encrypt有多种方法来验证你是否是域名的所有人,而 acme-tiny这个小工具用的是最简单的方法,也就是利用 http文件验证。
简单来说,就是生成一个验证文件,放在 http://www.mobibrw.com/.well-known/acme-challenge/下,Let's Encrypt官方验证这个文件是否存在、内容是否正确。如果一切正确,说明域名是你所有。因此我们下面的脚本中会出现创建,删除 .well-known/acme-challenge/这个目录的动作。

1.生成证书自动化请求脚本

里面内容如下:

2.赋予脚本执行权限

3.脚本添加到计划任务,每隔60天执行一次

在文件的最后增加

4.查看是否添加成功

5.重启 cron服务

参考链接:


如何在Nginx上部署 Let's Encrypt 证书
Let's Encrypt 试用记
免费SSL安全证书Let's Encrypt安装使用教程(附Nginx/Apache配置)