VPS搭建个人网站

闲来无事,整了个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
#!/bin/sh
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同步,不过我没配置成功~

总结

总的来说配置还是比较简单了,自己随便玩玩也用不了多少钱。偶尔写写文章什么的放到自己服务器上还是很不错的哈!