个人网站搭建

这是一个简单构建个人网站的教程。涉及nginx、docker;里面还顺便普及了一下nginx使用,如何映射一个端口号到多个域名。

购买

在网上查阅了各种资料,碍于国内严格的审查备案机制,大致有四种组合:

  1. 国外域名+国外服务器,直接使用,国内速度慢
  2. 国外域名+国内服务器,速度快,但无法直接解析(需要将国外域名转到国内的运营商)
  3. 国内域名+国外服务器,好像不太这么用
  4. 国内域名+国内服务器,需要备案,速度快

后来本着只是小打小闹的个人网站,所以使用了第一种方案,反正刚好还可以在网站上写一些和谐的内容。确定了方案之后,接下来就是买买买了。

购买服务器

直接用之前趁打折优惠19.9刀一年买的用来翻墙的搬瓦工服务器,512MB的内存和11GB的存储空间,性能有点堪忧。好在只是用来搭建个人网站,所以也够用了。同时还把一个端口共享给了我同学,如果这个过程涉及交易的话就违法了。

购买域名

恰逢godaddy打折,于是屯了一个自己姓名的.com域名

配置

接下来要对服务器还有域名做一些配置

配置域名

打开域名的DNS配置管理器

类型 名称 TTL
A @ your_ip 600 秒
A blog your_ip 1 小时
A www.blog your_ip 1 小时
A notion your_ip 1 小时
A www.notion your_ip 1 小时
CNAME www @ 1 小时

配置完域名和子域名之后剩下的默认值可以基本不用动,这样这些域名就能打到your_ip了。配置完之后不要慌,TTL上面就是生效时间。假如二级域名前面没有家www的话,那在导航栏中输入长域名www.blog.yourdomain.com就不会打到ip。

配置nginx

这么多域名打到一个ip,我们要将他们进行区分,转发到不同的端口,这样就能实现在一个服务器上部署多个子域名网站了。这时候你就会发现nginx是个好东西,这里假设你已经安装好了nginx。

配置nginx

打开/etc/nginx/nginx.conf

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
user  nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

# for default
server {
listen 80 default;
return 204;
}

include /etc/nginx/conf.d/*.conf;
}

一个端口号和server_name唯一确定了一个配置,如果不能精确匹配到/etc/nginx/conf.d/*.conf中的port和servername,则会使用上面默认的server

配置具体server

打开需要配置的blog的conf:/etc/nginx/conf.d/blog.conf
按照下面的写法把blog.yourdomain.com转发到了本地的4000端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80;
server_name blog.yourdomain.com www.blog.yourdomain.com;

location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://localhost:4000;
proxy_redirect default;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

假如要无脑转发到某网站的话就用以下配置

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
upstream notion  {
server www.notion.so;
}

server {
listen 80;
server_name notion.yourdomain.com www.notion.yourdomain.com;

root html;
index index.html index.htm index.php;

location / {
proxy_pass http://notion;

#Proxy Settings
proxy_redirect off;
proxy_set_header Host www.notion.so; # $host;不能使用$host变量
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

这样配置之后,notion.yourdomain.com就直接跳转到notion.so去了

部署个人网站

根据上面的nginx配置我们已经把blog.yourdomain.com转发到了该服务器的4000端口了,所以我们只需要使博客服务监听4000端口就行了。
参考之前写的十分钟hexo装进docker教程,我们使用docker的端口映射就可以轻松地使博客服务监听4000端口。

Buy Me a Coffee