有一台Debian服务器被入侵,PHP程序被挂马,用rm命令删除却如下提示无法删除:
Operation not permitted
查看文件属主和文件属性,发现都正常。用lsattr命令查看发现有一个 i 的属性,原来被设置了不允许删除,于是调用 chattr -i 命令去掉这个设置,然后再用rm命令,可以正常删除。
有一台Debian服务器被入侵,PHP程序被挂马,用rm命令删除却如下提示无法删除:
Operation not permitted
查看文件属主和文件属性,发现都正常。用lsattr命令查看发现有一个 i 的属性,原来被设置了不允许删除,于是调用 chattr -i 命令去掉这个设置,然后再用rm命令,可以正常删除。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
1、更新key
apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
2、将MongoDB的apt源加入/etc/apt/sources.list:
Debian系统:
deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen
Ubuntu系统:
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
3、更新apt:
apt-get update
4、安装最新版本MongoDB:
apt-get install mongodb-10gen
5、也可以安装以前的MongoDB版本:
apt-get install mongodb-10gen=2.2.3
这样通过apt-get就可以安装最新版本的MongoDB了。
nginx的配置文件if语句是不支持“并且”和“或者”这样的多重条件判断的。在一些情况下,我们又需要if语句进行多个条件的判断,那么如何来实现呢?我们可以利用nginx的set语句设置变量的方法来解决。
假设我们需要对 /admin/ 路径进行rewrite,但同时要排除 /admin/images/ 路径不对该路径进行rewrite,可以采用下面的解决办法:
set $doRewrite "0";
if ($request_uri ~ ^/admin/) {
set $doRewrite "1";
}if ($request_uri ~ ^/admin/images/) {
set $doRewrite "0";
}if ($doRewrite = "1") {
// do rewrite
}
本例子也有别的不用set变量的方法来实现。本文仅仅给大家提供一个思路,希望大家能抛砖引玉的应用到实际需求当中。
nginx对于静态文件的处理有一个gzip_static模块。该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。为了要兼容不支持gzip的浏览器,启用gzip_static模块就必须同时保留原始静态文件和gz文件。这样的话,在有大量静态文件的情况下,将会大大增加磁盘空间。我们可以利用nginx的反向代理功能实现只保留gz文件。
本文示例假设后端服务器IP为192.168.1.10,前端代理服务器IP为192.168.1.5。
(如果没有多台服务器,也可以用内网IP或者nginx监听不同的端口来实现同样的效果)
1、首先我们要确认nginx的gzip_static模块已经被编译进去:
nginx -V
如果该命令输出有--with-http_gzip_static_module,则说明nginx支持gzip_static模块。如果没有,需要加上 --with-http_gzip_static_module该参数重新编译nginx。
2、配置nginx
location ~ \.html$ {
gzip_static on;
}
3、配置代理服务器的nginx
server {
listen 80;
server_name YOUR_DOMAIN.com;
location / {
proxy_set_header Host $host;
proxy_set_header Accept-Encoding 'gzip';
proxy_pass http://192.168.1.10;
}
}
4、配置完成后,前端的代理服务器和后端的nginx重启以便配置生效:
nginx -s reload
5、测试是否生效:
后端服务器在网站目录里上传一个test.html文件,然后执行:
gzip test.html
完成后会生成test.html.gz文件,同时test.html文件会被删除。
然后打开浏览器访问前端的nginx:
http://192.168.1.5/test.html
如果页面正常显示,则说明配置成功。我们同时要验证一下在浏览器不支持gzip的情况下,是否能正常显示页面。下面我们采用telnet工具进行测试:
telnet 192.168.1.5 80
GET /test.html HTTP/1.0
注意:GET那一行最后连续两个回车。
如果正常输出了明文的HTML代码,说明配置是没有问题的。
6、配置成功之后,即可对自己的应用进行调整,生成html静态文件时,调用gzip命令生成gz压缩文件,这样大大减少静态文件占用硬盘空间的情况,同时也会减少每次进行gzip压缩所消耗的CPU资源。
nginx作为反向代理时,默认是不会将Accept-Encoding传给后端服务器的,也就是说后端服务器将网页内容传给前端的nginx时是不压缩的,这样会造成带宽浪费,同时也增加了传输时间,那么怎样让前端将Accept-Encoding传给后端服务器呢?很简单,只需要在配置文件里增加:
proxy_set_header Accept-Encoding 'gzip';
这个参数即可。这样无论客户端浏览器是否支持gzip,前端的nginx都会以gzip的方式向后端服务器发起请求。如果客户端不支持gzip,nginx会自动将后端返回的gzip内容解压缩,然后返回给客户端。
本文介绍如何在CentOS上安装socks5代理服务器软件dante-server。如果你使用Debian或者Ubuntu,可以参考这篇文章:Debian/Ubuntu安装socks5代理服务器dante-server
1、下载源码:
在dante-server的官方网页上下载最新稳定版本源码(目前是1.3.2):
http://www.inet.no/dante/download.html
2、编译:
tar -xzf dante-1.3.2.tar.gz
cd dante-1.3.2
./configure
make
make install
3、添加用户用于socks5代理客户端的验证:
useradd proxyuser
4、给刚添加的用户设置密码:
passwd proxyuser
5、编辑 /etc/passwd,将proxyuser的shell改成 /bin/nologin,禁止该用户登录系统的权限。
6、编辑 /etc/sockd.conf,将内容设置如下:
logoutput: /var/log/sockd.log
internal: eth0 port = 10080
external: eth0method: username
clientmethod: none
user.privileged: root
user.notprivileged: proxyuser
user.libwrap: nobody
compatibility: sameport
#compatibility: reuseaddr
extension: bind
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp
}
6、启动dante-server
sockd -D
7、检查端口监听是否成功:
netstat -anp | grep LISTEN
安装完Debian或Ubuntu之后,我们会发现经常会出现一些乱码。这通常是因为Debian或Ubuntu的终端输出是UTF-8编码的,我们可以在SSH客户端上设置编码为UTF-8,其实还可以简单的设置一个变量LC_ALL。
在命令行执行:
export LC_ALL=C
这样就可以解决终端输出的乱码问题。
将该命令添加到 .bashrc 文件中并保存,以后登陆就不用再手工执行该命令。
现在使用iPhone,iPad等智能移动设备终端的用户已经很流行了,做好一个网站应当针对移动设备进行优化处理。本文介绍如何在nginx里判断访问的用户是否是移动设备终端。 编辑 nginx.conf,在需要处理的网站server区域添加以下内容:
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
// 添加你需要处理的语句,比如rewrite等
}
上面是常见的移动设备的判断,有一些设备没有判断,可以根据自己的需要添加判断的关键字。
然后重新启动nginx以使配置生效。
有时候我们需要禁止某个IP或某个IP段的用户访问网站,那么nginx里如何实现这个功能呢?很简单,只需要加上以下内容即可:
禁止单个IP的写法:
deny x.x.x.x;
禁止IP段的写法:
deny 10.0.0.0/24;
也可以实现只允许某个IP或某个IP段用户访问,其它的用户全都禁止:
allow x.x.x.x;
allow 10.0.0.0/24;
deny all;
重新启动nginx即可生效。
本文介绍如何配置nginx实现图片防止被盗链的方法。
假设网站域名是 www.mywebsite.com。
编辑nginx.conf,在 www.mywebsite.com 区域添加如下内容:
location ~* \.(gif|png|jpg|bmp|swf|flv)$ {
valid_referers none blocked www.mywebsite.com mywebsite.com;
if ($invalid_referer) {
return 403;
}
}
以上的例子可以实现扩展名为 gif,png,jpg,bmp,swf,flv的url防止被盗链。如果你需要其它的url防止被盗链,添加相应的后缀即可。
编辑完成之后,重新启动nginx以便配置生效。
小提示:nginx中 location ~ 和 location ~*的区别:
location ~* 不区分大小写,location ~ 区分大小写。