Haproxy+ssl+nvm+forever
1 nvm介绍
- NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码在GitHub;
#安装git客户端 [root@node-v1 ~]# yum install git-core -y [root@node-v1 ~]# cd /usr/local/src/ [root@node-v1 src]# git clone https://github.com/cnpm/nvm.git [root@node-v1 src]# cd nvm/ [root@node-v1 nvm]# ./install.sh [root@node-v1 nvm]# source nvm.sh [root@node-v1 nvm]# nvm install 8 ######################################################################## 100.0% WARNING: checksums are currently disabled for node.js v4.0 and later Now using node v8.9.4 (npm v5.6.0) [root@node-v1 bin]# echo "export PATH=/usr/local/src/nvm/versions/node/v8.9.4/bin:$PATH" >> /etc/profile [root@node-v2 .nvm]# cat >>/etc/profile<<EOF > export NVM_DIR="/usr/local/src/nvm" > [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" > EOF
- 使用方法
- 列出所有可安装的版本nvm list-remote;
- 安装相应的版本使用nvm install 8;还可以直接安装 各个版本;
- 查看一下你当前已经安装的版本:nvm ls;
- 切换版本;nvm use v0.12.4;
- 设置默认版本 nvm alias default v0.12.4
- 注意:具体操作很简单,使用帮助通过nvm help;
1.1 编写hello.js试验
[root@node-v1 ~]# cat hello.js var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type' : 'text/html'}); res.write('<head><meta charset="utf-8"/></head>'); res.end("Hello world node-v1"); }); server.listen(3000, '10.0.0.7');
- node-v2也是如此
1.2 安装forever让node永久运行
[root@node-v1 ~]# npm install forever -g [root@node-v1 ~]# forever start hello.js [root@node-v1 ~]# forever stop hello.js
2 安装Haproxy
[root@haproxy ~]# yum install -y haproxy
[root@haproxy ~]# cp /etc/haproxy/haproxy.cfg{,.bak}
2.1 Haproxy开启日志记录
[root@haproxy ~]# mkdir /var/log/haproxy [root@haproxy ~]# chmod a+w /var/log/haproxy [root@haproxy ~]# egrep -v "#|^$" /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514 $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
2.2 修改“/etc/sysconfig/rsyslog”文件,内容如下
[root@haproxy ~]# cat /etc/sysconfig/rsyslog # Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details SYSLOGD_OPTIONS="-r -m 0 -c 2"
2.3 修改Haproxy的配置文件如下:
[root@haproxy ~]# cat /etc/haproxy/haproxy.cfg global log 127.0.0.1 local0 info #定义全局syslog服务,127.0.0.1表示将日志发送到本地保存 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 25600 #最大连接数 user haproxy #用户名 group haproxy #组 daemon #以守护进程方式运行 stats socket /var/lib/haproxy/stats # turn on stats unix socket defaults #为frontend和backend提供默认参数 mode http #模式 log global #日志 option httplog #详细记录http日志 option dontlognull #不记录健康检查的日志信息 retries 3 #3次连接失败则认为服务不可用 option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器 maxconn 30000 #默认的最大连接数 contimeout 5000 #连接超时 clitimeout 5000 #客户端超时 srvtimeout 5000 #服务器超时 timeout check 1s #心跳检测超时 timeout http-request 10s #默认http请求超时时间 timeout queue 1m #默认队列超时时间 timeout connect 10s #默认连接超时时间 timeout client 1m #默认客户端超时时间 timeout server 1m #默认服务器超时时间 timeout http-keep-alive 10s #默认持久连接超时时间 listen stats mode http bind 0.0.0.0:8090 #指定IP地址与Port stats enable #开启Haproxy统计状态 stats refresh 3s #统计页面自动刷新时间间隔 stats hide-version #状态页面不显示版本号 stats uri /haproxyadmin?stats #统计页面的uri为"/haproxyadmin?stats" stats realm Haproxy\ Statistics #统计页面认证时提示内容信息 stats auth admin:admin #统计页面的用户名与密码 stats admin if TRUE #启用或禁用状态页面 frontend node #定义前端服务器 bind *:80 mode http option httpclose #每次请求完成主动关闭http连接 option forwardfor #后端服务器获取客户端的IP地址,可以从http header中获取 acl url_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写 acl url_dynamic path_end -i .php default_backend node-web #客户端访问时默认调用后端服务器地址池 backend node-web #定义后端服务器 balance roundrobin #定义算法;基于权重进行轮询 server node1 10.0.0.7:3000 check rise 2 fall 1 weight 2 server node2 10.0.0.8:3000 check rise 2 fall 1 weight 2
- 访问
3 配置 Haproxy+ssl
3.1 Haproxy配置http跳转https
[root@haproxy_v1 haproxy]# cat haproxy.cfg global log 127.0.0.1 local0 info #定义全局syslog服务,127.0.0.1表示将日志发送到本地保存 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 25600 #最大连接数 user haproxy #用户名 group haproxy #组 daemon #以守护进程方式运行 tune.ssl.default-dh-param 2048 stats socket /var/lib/haproxy/stats # turn on stats unix socket defaults #为frontend和backend提供默认参数 mode http #模式 log global #日志 option httplog #详细记录http日志 option dontlognull #不记录健康检查的日志信息 retries 3 #3次连接失败则认为服务不可用 option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器 maxconn 30000 #默认的最大连接数 #contimeout 5000 #连接超时 #clitimeout 5000 #客户端超时 #srvtimeout 5000 #服务器超时 timeout check 1s #心跳检测超时 timeout http-request 10s #默认http请求超时时间 timeout queue 1m #默认队列超时时间 timeout connect 10s #默认连接超时时间 timeout client 1m #默认客户端超时时间 timeout server 1m #默认服务器超时时间 timeout http-keep-alive 10s #默认持久连接超时时间 listen stats mode http bind 0.0.0.0:8090 #指定IP地址与Port stats enable #开启Haproxy统计状态 stats refresh 3s #统计页面自动刷新时间间隔 stats hide-version #状态页面不显示版本号 stats uri /haproxyadmin?stats #统计页面的uri为"/haproxyadmin?stats" stats realm Haproxy\ Statistics #统计页面认证时提示内容信息 stats auth admin:admin #统计页面的用户名与密码 stats admin if TRUE #启用或禁用状态页面 frontend node #定义前端服务器 bind *:80 acl is_http hdr_beg(host) 10.0.0.60 redirect scheme https if ! { ssl_fc } bind *:443 ssl crt /etc/haproxy/xiao.pem use_backend node-web if is_http backend node-web #定义后端服务器 balance roundrobin #定义算法;基于权重进行轮询 server node1 10.0.0.7:3000 check rise 2 fall 1 weight 2 server node2 10.0.0.8:3000 check rise 2 fall 1 weight 2
-
证书的处理,需要将网站的根证书和key简单的合并在一起:
[root@haproxy_v1 haproxy]# pwd /etc/haproxy [root@haproxy_v1 haproxy]# ll total 16 -rw-r--r-- 1 root root 3165 Jan 6 00:00 haproxy.cfg -rw-r--r-- 1 root root 3142 Jan 5 00:11 haproxy.cfg.bak -rw-r--r-- 1 root root 1675 Jan 17 2018 privatekey.pem -rw-r--r-- 1 root root 1184 Jan 17 2018 server.pem [root@haproxy_v1 haproxy]# cat server.pem privatekey.pem |tee xiao.pem
访问10.0.0.60跳转到https://10.0.0.60