博客这几天的折腾
从上次说 博客改版计划 开始,后来几天时间就使用nodejs的thinkjs开发完成并上线了,整个架构是:
- 后端使用
thinkjs mysql强力驱动nginx代理域名
主机一直使用的香港的主机,一直比较稳定,不过从上月起主机频繁的重启,后来居然给我换了主机(ip),于是我决定迁移到阿里云,买的配置是1G,1M,1核,但运行起来没有卡顿感觉,挺好,速度也还行,不过需要备案。且前段时间看 ququ大神 的nginx相关的事,我也想学学玩玩,于是开始了一段很是曲折的路程〜
备案
其实起初我的xuexb.com备过二次案了,但均被注销,被告知的原因是内容和备案的主题相关性不强,其实也是域名备案严打造成的,这次备案从填单子到去实体店照像,整体过程历经11天,还算挺快,并且去实体店里照备案的照片居然不要钱。。。大大的给阿里一个赞。。。并且那个妹子还真漂亮〜
备案通过后我想练习下负载均衡,虽说阿里云有现成的负载均衡,可以一键配置,可是我还是想自己尝试下过程的喜悦。于是我买了2台服务器。
负载均衡
首先我说下我对负载均衡的看法,我认为是通过配置让访问均匀的命中多台不同的服务器,从而使单台的负载降低。我这里使用的是nginx做负载,看资料负载的配置分很多类型,比如轮询、ip_hash、url_hash等,我就使用默认的轮询试试。
2台服务器分别为:
- 高配A
- 普配B
她们2台之间有内网通信,这也要归功于阿里云了,毕竟内网比较安全和快的,然后做如下调整:
高配A做为db server,对外的db端口屏蔽,只能通过内网让普配B访问高配A做为负载的入口,域名解析到这个服务器上普配B建立web server,通过内网连接高配A的db server,并添加http header值server-index:1普配B建立的web server端口8001只能被内网的高配A访问,并添加http header值server-index:0`高配A建立web server端口8001,只能被自己访问高配A配置负载入口,启用https,由于高配A上做的事已经够多了,顾把访问的负载比例配置为高配A:普配B = 1:3
ps: 由于不想再买单独的
db server(RDS),所以在高配A上做了db server
防火墙配置:
-A INPUT -s 允许ip/32 -p tcp -m tcp --dport 允许端口 -j ACCEPT
高配A负载入口大概的配置是这样的:
# 配置负载名
upstream blog {
server 127.0.0.1:8001 weight=1;
server 普配Bip:8001 weight=3;
}
# 主入口
server {
server_name www.xuexb.com xuexb.com;
# 配置https
listen 443 ssl;
ssl on;
ssl_certificate 证书;
ssl_certificate_key 证书key;
# 配置重写
if ( $host != 'xuexb.com' ){
rewrite ^/(.*)$ https://xuexb.com/1ドル permanent;
}
# 添加永久https主机头
add_header strict-transport-security 'max-age=31536000';
# 代理开始
location / {
proxy_set_header Connection "";
# 配置代理ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://blog;
}
# 负载不记录日志,否则会出现多一条日志的情况
access_log off;
}
# 配置http->https
server {
listen 80;
server_name www.xuexb.com xuexb.com;
add_header strict-transport-security 'max-age=31536000';
rewrite ^(.*) https://xuexb.com1ドル permanent;
}
重启nginx后,刷新多次访问博客,看响应头,已经可以无规则的命中不同的服务器了。但是看2台服务器上的nginx访问日志,来源IP好像有问题,于是...
配置日志
在nginx的http{ }配置里添加日志格式化配置:
# 代理日志格式
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
并对高配A,普配B的web server的配置修改:
access_log 日志目录 porxy;
这样日志可以正确的命中来源的IP了。但又发现日志文件太大了,nginx又不提供日志切割,于是...
日志切割
思路是编写一个shell脚本,让期在每天定点去移动日志文件,log.sh文件为:
# /bin/bash
mv /日志/blog.log /日志/blog/log_$(date +%Y%m%d).log
kill -USR1 `cat {nginx的pid路径}`
添加定时任务里:crontab -e && * 1 * * * /home/wwwlog/nginx/log.sh
配置crontab为开机启动:
# 检查是否开机启动
$ chkconfig --list crond
=>
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
# 如果2,3,4,5不是启动/on则执行
$ chkconfig crond on
启动服务:
service crond start
至此,博客可以负载的访问,只要高配A的db server不挂,这2个服务器的web server任意一个挂了都没事。
todo
记录些接下来要做的事
- 添加
nginx cache,但要考虑到后台页面不cache - 静态资源
cdn db server迁移- 如何显式的命中某个服务器,比如要生成静态化
本文链接:https://xuexb.com/post/278.html
-- EOF --
提醒: 本文最后更新于 3209 天前,文中所描述的信息可能已发生改变,请谨慎使用。
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。