闲来无事,整了个VPS,一开始是做个代理,后来看看有点浪费,就架了个个人网站写点东西什么的。
VPS主机配置
首先的话买个VPS主机,然后装Web服务器、PHP、数据库等,如果只是静态网站PHP和数据库就不用装了,这里也有一键安装脚本。还有DNS服务器dnsmasq,有需要也可以装下。装完了注意设置防火墙,我的iptables是这样配置的
1 | # File in here "/etc/sysconfig/iptables" |
2 | # iptables -F |
3 | # service iptables restart |
4 | # Generated by iptables-save v1.4.7 on Tue Jun 14 13:24:28 2016 |
5 | *raw |
6 | :PREROUTING ACCEPT [10832:15740120] |
7 | :OUTPUT ACCEPT [6792:387251] |
8 | COMMIT |
9 | # Completed on Tue Jun 14 13:24:28 2016 |
10 | # Generated by iptables-save v1.4.7 on Tue Jun 14 13:24:28 2016 |
11 | *nat |
12 | :PREROUTING ACCEPT [0:0] |
13 | :POSTROUTING ACCEPT [0:0] |
14 | :OUTPUT ACCEPT [0:0] |
15 | -A POSTROUTING -s 10.10.32.0/26 -o venet0 -j SNAT --to-source a.b.c.d |
16 | COMMIT |
17 | # Completed on Tue Jun 14 13:24:28 2016 |
18 | # Generated by iptables-save v1.4.7 on Tue Jun 14 13:24:28 2016 |
19 | *mangle |
20 | :PREROUTING ACCEPT [10832:15740120] |
21 | :INPUT ACCEPT [10832:15740120] |
22 | :FORWARD ACCEPT [0:0] |
23 | :OUTPUT ACCEPT [6792:387251] |
24 | :POSTROUTING ACCEPT [6792:387251] |
25 | COMMIT |
26 | # Completed on Tue Jun 14 13:24:28 2016 |
27 | # Generated by iptables-save v1.4.7 on Tue Jun 14 13:24:28 2016 |
28 | *filter |
29 | :syn-flood - [0:0] |
30 | # Allows connections to the loopback interface (lo0) for localhost |
31 | -A INPUT -d 127.0.0.1 -j ACCEPT |
32 | |
33 | # Accept all established inbound connections |
34 | -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
35 | -A FORWARD -i venet0 -m state --state RELATED,ESTABLISHED -j ACCEPT |
36 | |
37 | #SSH |
38 | -A INPUT -i venet0 -p tcp -m state --state NEW --dport 16477 -j ACCEPT |
39 | -A INPUT -d 10.10.32.250 -p tcp -m state --state NEW --dport 16477 -j ACCEPT |
40 | |
41 | #Web |
42 | -A INPUT -i venet0 -p tcp -m state --state NEW --dport 80 -j ACCEPT |
43 | -A INPUT -i venet0 -p tcp -m state --state NEW --dport 443 -j ACCEPT |
44 | |
45 | # Allow ping |
46 | -A INPUT -i venet0 -p icmp -m limit --limit 100/sec --limit-burst 100 -m icmp --icmp-type 8 -j ACCEPT |
47 | |
48 | # Log iptables denied calls |
49 | -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables warning: " --log-level 4 |
50 | |
51 | # |
52 | -A INPUT -i venet0 -p udp --dport 7891 -j ACCEPT |
53 | -A INPUT -i venet0 -p tcp --dport 7891 -j ACCEPT |
54 | -A INPUT -d 10.10.32.250 -p udp --dport 7891 -j ACCEPT |
55 | -A INPUT -d 10.10.32.250 -p tcp --dport 7891 -j ACCEPT |
56 | |
57 | # VPN |
58 | -A INPUT -i venet0 -p esp -j ACCEPT |
59 | -A INPUT -i venet0 -p udp --dport 500 -j ACCEPT |
60 | -A INPUT -i venet0 -p tcp --dport 500 -j ACCEPT |
61 | -A INPUT -i venet0 -p udp --dport 4500 -j ACCEPT |
62 | -A FORWARD -s 10.10.32.0/24 -j ACCEPT |
63 | -A FORWARD -d 10.10.32.0/24 -j ACCEPT |
64 | |
65 | #DNS |
66 | -A INPUT -d 10.10.32.250 -p tcp --dport 53 -j ACCEPT |
67 | -A INPUT -d 10.10.32.250 -p udp --dport 53 -j ACCEPT |
68 | |
69 | -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood |
70 | -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN |
71 | -A syn-flood -j REJECT --reject-with icmp-port-unreachable |
72 | |
73 | # Reject all other inbound - default deny unless explicitly allowed policy |
74 | -A INPUT -j DROP |
75 | -A FORWARD -j DROP |
76 | |
77 | # Allow all outbound traffic - you can modify this to only allow certain traffic |
78 | -A OUTPUT -j ACCEPT |
79 | COMMIT |
80 | # Completed on Tue Jun 14 13:24:28 2016 |
这里面venet0是公网IP的网卡接口名字(不同主机可能不同,用ifconfig可查看),端口号就看自己的软件配置了。10.10.32.0/26是IPSec VPN的IP网络段,有一个问题就是IPSec VPN装好了之后会多一个网络接口比如ipsec0,但上面没有IP地址。这样有些服务比如DNS,我想只通过VPN连接就没法设置,因为没有内网IP。一个解决方法是在venet0接口上绑定一个新的内网IP,venet0原本有一个公网IP挂在venet0:0下,绑定的新IP可以挂在venet0:1下,先新建一个网络接口文件
1 | touch /etc/sysconfig/network-scripts/ifcfg-venet0:1 |
然后编辑内容,可参照/etc/sysconfig/network-scripts/ifcfg-venet0:0
1 | DEVICE=venet0:1 #接口名字 |
2 | ONBOOT=yes |
3 | BOOTPROTO=static #使用静态ip地址 |
4 | ARPCHECK="no" |
5 | IPADDR=10.10.32.250 #自定义ip地址 |
6 | NETMASK=255.255.255.255 #自定义子网掩码 |
然后
1 | ifup venet0:1 |
就可以启动新IP 10.10.32.250,有了这个IP在iptables规则里添加允许这个IP连接的服务就可以。配置完了之后启动各种服务,如需开机启动可在rc.local添加相关命令
启动服务
1 | ipsec restart |
2 | service iptables restart |
3 | service dnsmasq restart |
rc.local启动脚本
1 |
|
2 | # |
3 | # This script will be executed *after* all the other init scripts. |
4 | # You can put your own initialization stuff in here if you don't |
5 | # want to do the full Sys V style init stuff. |
6 | |
7 | touch /var/lock/subsys/local |
8 | #似乎VPS重启之后,自定义的网络接口就没有了,可以把ifcfg-venet0:1文件保存在别处,然后开机重建 |
9 | if [ ! -f "/etc/sysconfig/network-scripts/ifcfg-venet0:1" ]; then |
10 | /bin/cp "/opt/network/ifcfg-venet0:1" "/etc/sysconfig/network-scripts/ifcfg-venet0:1" |
11 | /sbin/ifup venet0:1 |
12 | fi |
13 | /bin/cp -f /opt/network/resolv.conf /etc/resolv.conf |
14 | /usr/local/sbin/ipsec start |
15 | /sbin/service dnsmasq restart |
16 | /usr/bin/ssserver -s ::0 -p `cat /root/.kiwivm-shadowsocks-port` -k `cat /root/.kiwivm-shadowsocks-password` -m `cat /root/.kiwivm-shadowsocks-encryption` --user nobody --workers 2 -d start |
Web服务器设置
有了一键安装脚本其实不用设置很多东西了,在nignx.conf根据自己情况设置自己的root目录和location就可以了
1 | root /wwwroot/www.abc.com; |
2 | location = / { |
3 | rewrite ^/$ /blog redirect; #把http://www.abc.com/这样的网址重定向到http://www.abc.com/blog |
4 | } |
5 | |
6 | location / { |
7 | try_files $uri $uri/ =404; |
8 | } |
9 | |
10 | location ~ [^/]\.php(/|$) { |
11 | try_files $uri =404; |
12 | #fastcgi_pass remote_php_ip:9000; |
13 | fastcgi_pass unix:/dev/shm/php-cgi.sock; |
14 | fastcgi_index index.php; |
15 | include fastcgi.conf; |
16 | } |
17 | location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ { |
18 | expires 30d; |
19 | access_log off; |
20 | } |
21 | location ~ .*\.(js|css)?$ { |
22 | expires 7d; |
23 | access_log off; |
24 | } |
25 | } |
最后注意设置文件权限,这一点很重要。比如Web文件放在/wwwroot/www.abc.com目录下,Web服务器运行的用户名为www,则运行
1 | chown -R www:www /wwwroot/www.abc.com |
2 | chmod -R u+rw,go+r /wwwroot/www.abc.com |
3 | chmod a+x /wwwroot/www.abc.com |
4 | find /wwwroot/www.abc.com -type d -name "*" -print | xargs chmod a+x |
即文件所有者为www*,文件要有读权限,文件夹要有运行权限,完了重新启动nignx
1 | service nignx restart |
然后还需要设置域名,可以买一个,也可以用免费的,比如.tk .ml域名等(好像只免一年,续费还比较贵,不如收费的),设置好了别人就可以通过域名来访问你的服务器了。
用Hexo生成Blog文件
在自己的电脑上安装Hexo,然后写一篇文章
1 | hexo new post "get-started" |
编辑生成/source/_posts/get-started.md,如
1 | title: 风雨 |
2 | date: 2016-6-26 |
3 | tags: 诗 |
4 | category: 文学 |
5 | author: 锦衣夜行 |
6 | toc: true |
7 | --- |
8 | # 风雨 |
9 | *唐 李商隐* |
10 | > 凄凉宝剑篇,羁泊欲穷年。 |
11 | > 黄叶仍风雨,青楼自管弦。 |
12 | > 新知遭薄俗,旧好隔良缘。 |
13 | > 心断新丰酒,销愁斗几千? |
14 |
然后生成网页文件
1 | hexo g |
2 | hexo s |
可在自己浏览器上预览,如果OK,就把public下的所有文件上传到Web服务器目录/wwwroot/www.abc.com就可以了。据说可以用rsync同步,不过我没配置成功~
总结
总的来说配置还是比较简单了,自己随便玩玩也用不了多少钱。偶尔写写文章什么的放到自己服务器上还是很不错的哈!