Debian/Ubuntu上通过apt-get安装mongoDB

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了。

发表在 Debian, Ubuntu | 标签为 | 留下评论

nginx配置文件实现if语句多重条件判断的方法

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 | 标签为 , | 留下评论

nginx反向代理和gzip_static模块的高级应用

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 | 标签为 , , | 留下评论

nginx反向代理的gzip设置

nginx作为反向代理时,默认是不会将Accept-Encoding传给后端服务器的,也就是说后端服务器将网页内容传给前端的nginx时是不压缩的,这样会造成带宽浪费,同时也增加了传输时间,那么怎样让前端将Accept-Encoding传给后端服务器呢?很简单,只需要在配置文件里增加:

proxy_set_header Accept-Encoding 'gzip';

这个参数即可。这样无论客户端浏览器是否支持gzip,前端的nginx都会以gzip的方式向后端服务器发起请求。如果客户端不支持gzip,nginx会自动将后端返回的gzip内容解压缩,然后返回给客户端。

发表在 nginx | 标签为 , , | 留下评论

CentOS安装socks5代理服务器dante-server

本文介绍如何在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: eth0

method: 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

发表在 CentOS | 标签为 , , | 留下评论

Debian/Ubuntu设置LC_ALL解决乱码问题

安装完Debian或Ubuntu之后,我们会发现经常会出现一些乱码。这通常是因为Debian或Ubuntu的终端输出是UTF-8编码的,我们可以在SSH客户端上设置编码为UTF-8,其实还可以简单的设置一个变量LC_ALL。

在命令行执行:

export LC_ALL=C

这样就可以解决终端输出的乱码问题。

将该命令添加到 .bashrc 文件中并保存,以后登陆就不用再手工执行该命令。

发表在 Debian, Ubuntu | 标签为 , , | 留下评论

nginx判断手机移动设备用户的方法

现在使用iPhone,iPad等智能移动设备终端的用户已经很流行了,做好一个网站应当针对移动设备进行优化处理。本文介绍如何在nginx里判断访问的用户是否是移动设备终端。 编辑 nginx.conf,在需要处理的网站server区域添加以下内容:

if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
// 添加你需要处理的语句,比如rewrite等
}

上面是常见的移动设备的判断,有一些设备没有判断,可以根据自己的需要添加判断的关键字。

然后重新启动nginx以使配置生效。

发表在 nginx | 标签为 , | 留下评论

如何配置nginx实现禁止某个IP或某个IP段的用户访问

有时候我们需要禁止某个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 | 标签为 , | 留下评论

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 ~ 区分大小写。

发表在 nginx | 标签为 | 留下评论

nginx使用GeoIP模块限制某个地区的用户访问(Debian/Ubuntu环境)

本文介绍如何使用GeoIP模块让nginx实现限制某个地区用户访问的功能。nginx要加上 --with-http_geoip_module 参数进行编译。

1、首先我们检查一下nginx是否编译了GeoIP模块

nginx -V

如果你在输出界面看到了 --with-http_geoip_module,那么就说明nginx已经编译了GeoIP模块。

2、接下来我们安装GeoIP数据库
在Debian/Ubuntu系统,我们可以执行下面的命令进行安装:

apt-get install geoip-database libgeoip1

安装完成之后,GeoIP数据库会被安装在 /usr/share/GeoIP/GeoIP.dat。

这个GeoIP.dat是GeoIP数据库文件,使用apt-get命令安装的话这个文件不是最新的,我们可以从 http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz 这里下载最新的GeoIP数据库文件。

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak

cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

3、现在来配置nginx.conf文件

vi /etc/nginx/nginx.conf

将下面的内容添加进 http {} 区域,并且要放在任何 include 语句之前。

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
FK no;
FM no;
EH no;
}

上面这些语句是除了 FK,FM,EH这三个地区的用户允许其它地区的用户访问。

也可以只允许部分地区用户访问:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
FK yes;
FM yes;
EH yes;
}

上面这些语句是除了 FK,FM,EH这三个地区的用户其它地区的用户都不允许访问。

上面的语句只是设置了一个 $allowed_country 变量,要最终实现禁止设置的地区用户访问,我们要对 $allowed_country 变量进行判断处理。
在 server {} 区域里添加以下内容:

if ($allowed_country = no) {
return 403;
}

也可以针对某个特定url进行限制:

location /special {
if ($allowd_country = no) {
return 403;
}
}

4、重启nginx

/etc/init.d/nginx reload

这样我们就实现了nginx限制某个地区用户访问的功能。

发表在 Debian, nginx, Ubuntu | 标签为 , | 留下评论