使用 letsencrypt 生成 SSL 证书开启 HTTPS

HTTP 和 HTTPS 是什么?

  HTTP 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://yun.pfan123.com,其网页上的文字、图片、CSS、JS 等文件都是通过 http 协议传输到我们浏览器的。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

SSL/TLS 是什么?

SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下:

svg基本形状

  • SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0,它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
    SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

  • TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
    TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

SSL/TLS协议提供的服务主要有:

  • 1.认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • 2.加密数据以防止数据中途被窃取;
  • 3.维护数据的完整性,确保数据在传输过程中不被改变。

HTTPS与HTTP的一些区别

1.HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费,免费的推荐可以使用 letsencrypt
2.HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
3.HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

如何HTTPS部署改造

一个网站要全站由HTTP替换成HTTPS,可能需要关注以下几点:

  • 1.安装CA证书,一般的证书都是需要收费的,这边推荐一个比较好的购买证书网站:1)Let’s Encrypt,免费,快捷,支持多域名(不是通配符),三条命令即时签署+导出证书。2)Comodo PositiveSSL,收费,但是比较稳定。
  • 2.在购买证书之后,在证书提供的网站上配置自己的域名,将证书下载下来之后,配置自己的web服务器,同时进行代码改造。
  • 3.HTTPS 降低用户访问速度。SSL握手,HTTPS 对速度会有一定程度的降低,但是只要经过合理优化和部署,HTTPS 对速度的影响完全可以接受。在很多场景下,HTTPS 速度完全不逊于 HTTP,如果使用 SPDY,HTTPS 的速度甚至还要比 HTTP 快。
  • 4.相对于HTTPS降低访问速度,其实更需要关心的是服务器端的CPU压力,HTTPS中大量的密钥算法计算,会消耗大量的CPU资源,只有足够的优化,HTTPS 的机器成本才不会明显增加。

Let’s Encrypt 介绍

Let’s Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

ISRG 是一个关注网络安全的公益组织,其赞助商从非商业组织到财富100强公司都有,包括 Mozilla、Akamai、Cisco、Facebook,密歇根大学等等。ISRG 以消除资金,技术领域的障碍,全面推进加密连接成为互联网标配为自己的使命。

申请 Let’s Encrypt 证书不但免费,还非常简单,虽然每次只有 90 天的有效期,但可以通过certbot脚本定期更新, Let’s Encrypt有了certbot自动化工具,配置管理起来非常容易。

 certbot生成证书

1.下载安装 certbot

1
2
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

 certbot生成证书

2.获取CA申请证书

1
./certbot-auto certonly

 certbot生成证书

3.查看 fullchain.pemprivkey.pem, 配置nginx

查看 etc/letsencrypt/live/[DOMAIN]/, 发现含有 fullchain.pemprivkey.pem ,然后配置 nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {

listen 443 ssl;

server_name yun.pfan123.com;

ssl_certificate /etc/letsencrypt/live/yun.pfan123.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/yun.pfan123.com/privkey.pem;

ssl_dhparam /etc/ssl/certs/dhparams.pem;

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

ssl_prefer_server_ciphers on;

……

}

4.配置 http 强制跳转到 https:

1
2
3
4
5
6
7
8
9
server {

listen 80;

server_name www.saxieyu.com;

return 301 https://$server_name$request_uri;

}

5.验证服务器证书

如上修改过 nginx 配置,并 reload 过 nginx 服务后,使用浏览器访问 https://yun.pfan123.com,验证服务器证书是否正确生效。

也可以使用 ssllabs 在线测试服务器证书强度及配置正确性.

6.letsencrypt 证书更新

1
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

cron 自动更新

1
30 2 15 * * /root/ssl/certbot-auto renew >> /var/log/le-renew.log

参考资料:

certbot

certbot github

letsencrypt docs

探究iPhone不同显示模式device-width值变化

背景

  为了更好的大屏显示效果,苹果为 iPhone 6、iPhone 6s、iPhone 6 Plus、iPhone 7、iPhone 7 Plus 都新增了“放大显示”模式,并提示用户使用“标准”或者“放大”模式来获得更适合自己的显示效果。

  通过观察我们可以发现,iPhone 6 Plus 和 iPhone 7 Plus 在放大模式下的显示内容是和 iPhone 6、iPhone 6s、iPhone 7 的标准模式一样的,这意味着 iPhone 6、iPhone 6s、iPhone 7 放大模式的内容数量,和 iPhone 5s 的显示内容是几乎一致的。

zoomdisplaycompare

此时,设备视口宽度(device-width)、高度(device-height), 将变为与iphone 5s一致。具体,可以参照 paintcode 的信息图, 如下:

iphoneDevice

而判断iphone6plus等大屏条件手机如下:

1
2
3
if(window.screen.width >= 375 && window.devicePixelRatio == 3) || (window.screen.width >= 414 && window.devicePixelRatio == 3){
//此为iphone大屏手机ip6p,ip7p
}

而无法准确判断区分iphone5、iphone5s与iphone6、iphone6s。

参考资料:

信不信由你!iPhone6屏幕宽度不一定是375px,iPhone6 Plus屏幕宽度不一定是414px

The Ultimate Guide To iPhone Resolutions

Fiddler实战深入研究

本文介绍的工具是 Fiddler,它能够在本机和服务端之间建立一个代理,通过这个代理,可以对所有经过的请求和响应进行拦截、修改、分析等。理论上说,只要你使用的软件支持代理,都可以用 Fiddler 进行拦截,包括浏览器、命令行等。

类似的软件有很多,比如 WireShark、HttpWatch 等,如果只是模拟发请求的话,Chrome 中有几个插件也很不错,比如 Postman、REST Client 等。

基本术语

会话(Session)

不同于服务端的 Session,这里仅仅指一次HTTP请求而已。会话面板在工具左侧,如下图所示。

fiddler1

图中显示了三条请求,每一列的具体含义都很清晰,认识英文单词就能懂了。

只是左边 # 号下的图标,帮各位找了一下,见下图。

fiddler2

默认情况下,一旦开启 Fiddler,就会走它的代理。想暂停这种行为,那请看到左下方有个状态栏。

fiddler3

单击一下左边的 Capturing,就能停止拦截,想再开启,就再单击一下。

它的右边是会话的来源,可以设置仅仅拦截浏览器发出的请求。

右边还有有三种选择:1、在请求发出之前进行断点;2、在响应回来的时候进行断点;3、不设断点。

审查(Inspector)

随便单击一条会话,右侧就会显示详细信息。

fiddler4

首先,这里有上下两栏,上面是 Request,下面是 Response。

Request 中有三个比较重要的:

  • Headers、Cookies,并且可以对请求体格式化,以 WebForms、JSON、Raw 等方式查看。具体每种方式的区别可以自己感受一下。一般来说,想要查看请求的参数的话,WebForms 的方式就挺直观的。
  • AutoResponder:这个地方可以模拟服务端返回值。顾名思义,当浏览器发出的请求满足你设置的匹配条件的话,Fiddler 就自动响应了,并不需要走网络。
  • Composer:模拟向服务端发送请求,用于测试服务端接口是否正确。

Response 中常用也有三个:

  • Headers:响应头。比如 Content-Type、Access-Control-Allow-Origin 等这些属性都在这个 tab 展示。
  • Cookies:查看由服务端带回来的 cookie。
  • JSON:将返回的内容以 JSON 格式显示。这个很有用,特别是当服务端返回的内容本身就是 JSON 的时候。

QuickExec

它位于状态栏的上方,有个 QuickExec 的提示,非常显眼。

其实,当你看到它的时候,就已经会了第一个命令

1
help

输入help会带你到命令行的帮助页,上面列举了所有可用的命令。不是很多,而且都很直观。这里同样把常用的列一下。

  • ?sometext:高亮包含匹配文字的会话。比如 ?/foo 就可以把所有包含 /foo 的请求都找出来。

其他的高亮功能还有:=(匹配请求方法或状态码)、@(匹配host)、select(匹配MIME)。

  • clear:清空会话面板。
  • keeponly:清空会话面板,仅保留指定的MIME类型。比如 keeponly json 就能筛选出所有返回 json 的会话。
  • go:放行所有的断点。

请求重定向(AutoResponder)

所谓请求在前端就是一些基本的css,js,图片等请求,重定向是指页面请求资源文件替换成其他需要替换成的文件。

比如目前需要调试线上某个js或者css文件等,可以使用fiddler捕获这个文件的请求,然后复制线上一份文件(比如JS或者css)代码放到本地,在本地的文件(JS或者css)修改完后,替换线上的文件来调式,当一切设置完毕之后,可以直接把代码提交到服务器上即可,如下所示:
fiddler5

如上:Enable automatic responses 复选框的含义是:控制是否激活 AutoResponder 选项卡,如果没有选中该选项,选项卡上的其他选项就不可选。

Unmatched requests passthrough 复选框的含义是: 如果选中该选项,不匹配的请求会正常发送到服务器,如果没有选中该选项,Fiddler会为所有和该规则完全不匹配的HTTP请求生成 HTTP/404 Not Found 响应,比如我现在不勾选它,如下所示:
fiddler6

那么现在再来访问淘宝网,就访问不了,提示如下所示:
fiddler7

Enable Latency的含义是:控制匹配某个规则的请求时立即执行,还是延迟Latency字段中所指定的毫秒数。如果没有选中该选项,Latency字段就不会显示,使用这个选项可以更准确地模拟现实中的服务器响应,取消该选项可以提升性能。如下所示:
fiddler8

我们也可以点击右键进行毫秒数设置它,如下:
fiddler9

在下方的Rule Editor选项卡中可以调整上面的请求替换,如下:
第一个下拉框指需要替换的文件,第二个下拉框a.js是替换上面的下拉框的文件;当然不一定要这样替换,如果正则非常好的话,我们可以使用正则替换需要替换的文件。当我们点击 save后即可替换。

fiddler10

Composer选项卡

Composer选项卡支持手动构建和发送HTTP,HTTPS和FTP请求,我们还可以从web session列表中拖曳session,把它放到composer选项卡中,当我们点击Execute按钮,把请求发送到服务器端。

Composer使用场景如下:

比如开发需要测试post请求接口,都知道浏览器请求只能是get请求,所以无法使用浏览器来测试,因此可以使用Composer构造post请求,点击execute发送请求。

Composer选项卡是由4个子选项卡组成的,如下所示:

fiddler11

其中 Scratchpad 选项卡基本不用,先看 Options 选项卡中 Request Options 的复选框中的含义如下:

Inspect Session 请求执行后,Inspectors选项卡会被激活,可以查看请求结果。

Fix Content-Length header* 该选项控制Composer是否会自动添加或修改Content-Length请求头,表示请求体的大小。在很多情况下,缺少适当的Content-Length头的请求会导致http请求响应出错。

Follow Redirects* 该选项控制Composer是否会自动使用响应的Location头,遵循HTTP/3xx重定向,如果选中该选项,Composer在失败之前最多会执行10次重定向。

Automatically Authenticate* 该选项控制composer是否会自动响应服务器的HTTP/401或HTTP/407认证需求。

Tear off button 该按钮会从主Fiddler窗口删除Composer,并把它作为独立的悬浮窗口打开。如果选中Inspect Session选项,该选项就非常有用,因为它支持同时查看Composer和Inspector选项卡;

断点调试

这是Fiddler又一强大和实用的工具之一。通过设置断点,Fiddler可以做到:

  • 1.修改HTTP请求头信息。例如修改请求头的UA, Cookie, Referer 信息,通过“伪造”相应信息达到达到相应的目的(调试,模拟用户真实请求等)。

  • 2.构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响相关调试。

  • 3.拦截响应数据,修改响应实体。

为什么以上方法是重要的?假设js前端程序员和服务器程序员是分工合作的,js程序员想要调试Ajax请求的功能,这样便不必等待服务器端程序员开发好所有接口之后再开始开发js端的ajax请求功能,因为通过“模拟”真实的服务器端的响应,便可以保证功能的正确性,而服务器端开发程序员,只要保证最终的响应是符合规定的即可。这大大简化了程序开发的效率,当然也降低了不同业务线程序员联调的难度。

有两种方法设置断点:

  • 1.fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。

有两个断点位置:

a. before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。

b.after response。也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。

  • 2.命令行下输入。Bpafter xxx或者bpv,bpu,bpm等设置断点。这种断点只针对特定类型的请求。

参考资料:

Fiddler官方文档
Fiddler实战深入研究

Linux(CentOS)下设置nginx开机自动启动和chkconfig管理--转载

Nginx 是一个很强大的高性能Web和反向代理服务器。虽然使用命令行可以对nginx进行各种操作,比如启动等,但是还是根据不太方便。下面介绍在linux下安装后,如何设置开机自启动。

配置自动启动

首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令:

1
vim /etc/init.d/nginx

在脚本中添加如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: NGINX is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -n "$user" ]; then
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
fi
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

这个脚本其实也不是我写的,谁写的呢,nginx官方写的,脚本地址:http://wiki.nginx.org/RedHatNginxInitScript ,不过要注意,如果你是自定义编译安装的nginx,需要根据您的安装路径修改下面这两项配置:

nginx=”/usr/sbin/nginx” 修改成nginx执行程序的路径。

NGINX_CONF_FILE=”/etc/nginx/nginx.conf” 修改成配置文件的路径。

保存脚本文件后设置文件的执行权限

1
chmod a+x /etc/init.d/nginx

然后,就可以通过该脚本对nginx服务进行管理了:

1
2
/etc/init.d/nginx start
/etc/init.d/nginx stop

检查 nginx conf 配置

1
./webserver/nginx/sbin/nginx -t

使用chkconfig进行管理

上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便,比如要设置nginx开机启动等。这时可以使用chkconfig来设置。

先将nginx服务加入chkconfig管理列表:

1
chkconfig --add /etc/init.d/nginx

加完这个之后,就可以使用service对nginx进行启动,重启等操作了。

1
2
service nginx start
service nginx stop

设置终端模式开机启动:

1
chkconfig nginx on

chkconfig命令的使用方法,就不多数啦,可以自行搜索

其他方案

另外这里还有一个网友分享的脚本(脚本地址:http://blog.163.com/qsc0624@126/blog/static/140324073201312734548701/):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL

参考资料:

Nginx 安装配置
linux 命令学习教程
跟我一起写Makefile

CentOS系统环境下安装MongoDB

Linux平台安装MongoDB

MongoDB提供了linux平台上32位和64位的安装包,你可以在官网下载安装包。
下载地址:(http://www.mongodb.org/downloads)[http://www.mongodb.org/downloads]

Linux文件目录1

1.查看系统,判定系统位数

1
uname -a

如果输出的信息包含 x86_64 说明你的系统是64位,如果不包含说明是32位系统.

2.下载完安装包,并解压 tgz(以下演示的是 32 位 Linux上的安装)

1
2
3
4
5
wget https://fastdl.mongodb.org/linux/mongodb-linux-i686-3.0.6.tgz  # 下载

tar -zxvf mongodb-linux-i686-3.0.6.tgz # 解压

mv mongodb-linux-i686-3.0.6 /usr/local/mongodb # 将解压包拷贝到指定目录

3.MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

1
export PATH=<mongodb-install-directory>/bin:$PATH

<mongodb-install-directory> 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb

4.创建数据库目录

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。

进入mongodb目录

1
cd /usr/local/mongodb

新建自定义数据目录

1
mkdir -p ./data/db/

新建日志目录

1
mkdir logs

5.命令行中运行 MongoDB 服务

你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。

注意:如果你的数据库目录不是/data/db,可以通过 –dbpath 来指定。

1
2
3
4
5
进入bin目录
cd /usr/local/mongodb/bin/

启动 mongodb
./mongod

以后台运行方式启动mongodb

1
2
3
4
5
6
7
8
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/logs/mongodb.log --fork


显示
forked process: 18261
all output going to: /usr/local/mongodb/logs/mongodb.log
log file [/usr/local/mongodb/logs/mongodb.log] exists; copied to temporary file [/usr/local/mongodb/logs/mongodb.log.2013-03-01T04-04-28]
child process started successfully, parent exiting

设置开机自启动:

1
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/logs/mongodb.log --fork" >> /etc/rc.local

查看MongoDB日志

1
tail -f /usr/local/mongodb/logs/mongodb.log

参考资料:

Linux平台安装MongoDB

CentOS 中使用 yum 安装 mongodb

CentOS系统环境下安装MongoDB

Linux 使用nvm安装node

NVM安装

NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码 GitHub

1.下载并安装NVM脚本

1
2
curl https://raw.githubusercontent.com/creationix/nvm/v0.13.1/install.sh | bash
source ~/.bash_profile

2.列出所需要的版本

1
nvm list-remote

返回结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
. . .
v5.4.0
v5.4.1
v5.5.0
v5.6.0
v5.7.0
v5.10.0
v5.10.1
v5.11.0
v5.11.1
v5.12.0
v6.9.1
v6.9.2
v6.9.3
v6.9.4
v6.9.5
v7.0.0
v7.1.0
v7.2.0
v7.2.1
v7.3.0
v7.4.0
v7.5.0

3.安装相应的版本

1
nvm install v5.4.0

4.查看已安装的版本

1
2
3
4
nvm list

-> v0.10.30
system

5.切换版本

1
nvm use v5.4.0

6.设置默认版本

1
nvm alias default v5.4.0

参考资料:

Linux 下各个目录的作用及内容

Linux目录结构

Unix目录结构的来历

Linux常见目录使用区别

Linux常用命令 帮助命令

Nginx 安装配置

跟我一起写Makefile

Linux 下各个目录的作用--转载

Linux 目录

在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了 Linux 界命名混乱的局面。

1
2
3
4
5
6
# cd /
# ls

//显示如下 root是根目录
aquota.group bin dev home lost+found mnt proc sbin srv tmp var
aquota.user boot etc lib media opt root selinux sys usr

无论何种版本的 Linux 发行版,桌面、应用是 Linux 的外衣,文件组织、目录结构才是 Linux 的内心。

FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。 FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin/sbin 则应该要放置可执行文件等等。

第二层则是针对 /usr/var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、 /usr/share 放置共享数据等等。

FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动(注意,不是不能,学习过程中,不要怕这些),将目录定义为四种交互作用的形态,如下表所示:

Linux文件目录1

/:根目录,一般根目录下只存放目录,不要存放件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中

Linux文件目录2

/bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。

/boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz 为 linux 的内核文件,以及 /boot/gurb。建议单独分区,分区大小100M即可

/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。

/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。

注:/etc/X11 存放与 x windows 有关的设置。

/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~edu 表示用户 edu 的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据

/lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为 /lib/modules。

/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于 /disk 中,此目录下就会自动产生目录 /disk/lost+found

/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。

/opt:给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的 KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下

/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。

/root:系统管理员root的家目录,系统第一个启动的分区为 /,所以最好将 /root和 /放置在一个分区下。

/sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能”查看”而不能设置和使用。

/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下

/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。

/usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls 时会查询 /usr/share/man/man1/ls.1.gz 的内容建议单独分区,设置较大的磁盘空间。

/var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间。

一切皆文件

Linux 对数据文件(.mp3、.bmp),程序文件(.c、.h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

文件分类:

1)普通文件( 数据文件 )

普通文件是用于存放数据、程序等信息的文件,一般都长期地存放在外存储器(磁盘)中。普通文件又分为文本文件和二进制文件。

2)目录文件

目录文件是文件系统中一个目录所包含的目录项所组成的文件。

3)设备文件

设备文件是用于为操作系统与设备提供连接的一种文件。在Linux系统中将设备作为文件来处理,操作设备就像是操作普通文件一样。每一个设备对应一个设备文件,存放在 /dev 目录中。

5)链接文件

似于 windows 下的快捷方式,链接又可以分为软链接(符号链接)和硬链接。

6)管道文件

管道文件主要用于在进程间传递数据的一种特殊文件。

7)套接口文件

主要用于不同计算机间网络通信的一种特殊文件。

Linux文件目录3

Linux文件目录4

参考资料:

Linux 下各个目录的作用及内容

Linux目录结构

Unix目录结构的来历

Linux常见目录使用区别

Linux常用命令 帮助命令

Nginx 安装配置

跟我一起写Makefile

搬瓦工VPS快速搭建Shadowsocks服务器

shaowsocks安装

搬瓦工自带 shaowsocks 一键安装,左侧菜单栏找到 Shadowsocks Server ,点进去安装就好了(注意:搬瓦工提供的一键安装功能只支持CentOS6,你也可以通过命令行的方式安装),安装好的 Shadowsocks Server 界面是这样的:

shaowsocks安装成功图片1

此时VPN已经可以用了,还需要客户端,Windows版本的客户端在后台面板就有链接,Mac用户我已经下载好放到我的网盘了 ShadowsocksX-2.6.3.dmg,安装好打开 Shadowsocks Server ,在Mac的工具栏会有一个小飞机的图标

由于iPhone的Shadowsocks Server只在英国地区销售,国内的AppStore是下载不到的,大家可以在AppStore搜wingy,配置过程跟mac差不多,主要是IP、 Port和密码,加密协议都用默认的aes-256-cfb就行,然后手机也可以愉快的上网了。

shaowsocks安装成功图片2

点开服务器,配置IP和密码,只需要修改地址和密码,其他不用改就OK了。
shaowsocks安装成功图片3

上两张图显示 Shadowsocks Server 有两种加速模式 ,一般情况下勾选自动代理模式就可以了,这个这个模式下会自动判断你当前访问的域名是否在GFW名单里面,如果是就启用代理,如果不是就正常访问,这样我们在访问墙内网站的时候也不会受到任何影响 ,如果你遇到网站无法访问,有可能是这个网站近期被墙了,你没有更新本地的GFW名单,如果你确定这个网站是可以打开的,切换到全局模式就可以访问了。

Shadowsocks Server自动代理模式原理是根据GFWList配置了一个PAC文件,名单中的域名全部走代理,你可以手动修改这个配置文件,添加你要访问的被墙的网站,它就是一个js文件,你点击编辑自动模式的PAC文件便会跳转到这个js所在的位置,那个GFWList自动更新功能坏掉了,作者一直也没更新,不过不影响平时使用。

net_speeder加速VPN

完成以上操作,就可以访问墙外网站外了,但是速度不怎么快。可以使用 Speeder 给 VPN 加速具体如下:

1.先连上远程主机

1
ssh root@192.243.112.242 -p 26244

注意把端口和IP换成你自己主机的,然后需要输入root密码,输入在第一步我们设置的密码就可以了。

2.安装Net-Speeder

输入下面的命令进行安装:

1
wget https://coding.net/u/njzhenghao/p/download/git/raw/master/net_speeder-installer.sh

3.编译并安装

输入下面的命令编译Net-Speeder:

1
bash net_speeder-installer.sh

命令执行成功之后,执行 reboot 重启主机,或者在后台面板重启主机也行。(此时远程主机的连接会断开,需要重新连接

4.端口加速

1
nohup /usr/local/net_speeder/net_speeder venet0 "ip" >/dev/null 2>&1 &

执行完这个命令应该会有一个端口号打印出来,证明加速成功了!还有最后一步,点开 Shadowsocks Server 菜单点击退出,不要点关闭 Shadowsocks Server ,然后再次打开App,现在打开YouTube看个视频试试吧!现在墙外网站下载速度一般都在500KB左右,当然这个速度也受到你所在运营商的网络环境影响。(注意:加速端口这个命令每次重启主机都需要执行一次,因这个脚本没有加到开机自启动)

参考资料:

租用搬瓦工 VPS 自建高速丝滑 VPN

使用net_speeder加速你的VPS

搬瓦工VPS搭建高速VPN服务器

Linux 教程

CentOS 6.x安装git及最新版

方式一、yum安装

通过yum方式安装,版本比较旧,CentOS6.5上安装好是1.7.1版。如果想安装最新版或其他版本,需要使用源码编译安装的方式。

方式二、源码包安装

步骤1. 安装依赖包

1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker //控制make命令操作模块

步骤2. 卸载旧的git版本(如果之前有安装rpm包)

1
yum remove git

步骤3. 下载&解压

1
2
3
cd /usr/src
wget https://www.kernel.org/pub/software/scm/git/git-2.5.0.tar.gz
tar -zxvf git-2.5.0.tar.gz

或 wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz 下载 获取最新版本

步骤4. 编译安装

1
2
3
4
5
cd git-2.5.0
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc

步骤5. 检查git版本

1
2
git --version
git version 2.5.0

参考资料:

Make 命令教程

linux yum 命令

linux yum命令详解

VPS安全之SSH设置

Connecting to GitHub with SSH

Github之SSH连接配置

Linux 与 UNIX

UNIX简介

UNIX,一种计算机操作系统,具有多任务、多用户的特征。于1969年,在美国AT&T公司的贝尔实验室开发类UNIX(UNIX-like)。

Unix的前身为1964年开始的Multics,贝尔实验室参与了这个操作系统的研发,但因为开发速度太慢,1969年贝尔实验室决定退出这个计划。贝尔实验室的工程师,肯·汤普逊和丹尼斯·里奇,在此时自行开发了Unix。

此后的10年,Unix在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的“Unix变种”,这些变种反过来也促进了Unix的发展,其中最著名的变种之一是由加州大学柏克莱分校开发的柏克莱软件包(BSD)产品。

BSD使用主版本加次版本的方法标识,如4.2、4.3BSD,在原始版本的基础上还有派生版本,这些版本通常有自己的名字,如4.3BSD-Net/1,4.3BSD-Net/2等。BSD在发展中也逐渐派生出3个主要的分支:FreeBSD、OpenBSD和NetBSD。

详细资料:UNIX

Linux 简介

Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux的发行版

Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等。

Linux应用领域

今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用LAMP(Linux + Apache + MySQL + PHP)或LNMP(Linux + Nginx+ MySQL + PHP)组合。
目前Linux不仅在家庭与企业中使用,并且在政府中也很受欢迎。

Linux vs Window

目前国内Linux更多的是应用于服务器上,而桌面操作系统更多使用的是Window。主要区别如下:

比较 Windows Linux
界面 界面统一,外壳程序固定所有Windows程序菜单几乎一致,快捷键也几乎相同 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux的终端机是从UNIX传承下来,基本命令和操作方法也几乎一致。
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的Windows下的驱动,也会比较头痛。 由志愿者开发,由Linux核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。
学习 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。
软件 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 大部分软件都可以自由获取,同样功能的软件选择较少。

linux yum 命令

yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum 语法

1
yum [options] [command] [package ...]
  • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package操作的对象。

yum常用命令

1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install
4.仅更新指定的软件命令:yum update
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove
7.查找软件包 命令:yum search
8.清除缓存命令:

  • yum clean packages: 清除缓存目录下的软件包
  • yum clean headers: 清除缓存目录下的 headers
  • yum clean oldheaders: 清除缓存目录下旧的 headers
  • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

参考资料:

UNIX

CentOS

Ubuntu

Debian

跟我一起写Makefile