本文使用中国移动CM311-1a机顶盒配合Ubuntu系统作为博客的服务器,通过本地Gridea SFTP的方法将静态网页上传至服务器内,并通过Nginx实现博客的局域网访问。
一、Gridea的安装
Gridea 是一个静态博客写作的跨平台开源客户端,使用该平台可以避免诸如Hugo、Hexo等静态博客生成工具的繁琐过程。且对于Git等操作可以实现图形化配置,一键Push至云端。这是其开源仓库链接。
其使用教程可根据官方Wiki配合菜单进行学习,这里着重记录一下有关Gridea SFTP上传至服务器的操作:
- 在服务器终端或路由器管理页面中获取服务器的IP地址,这里以192.168.0.16为例。
- 在Gridea客户端中,选择远程->SFTP,如图一所示。
在域名中输入http://
+方才查询到的IP地址 ,如图中所示。
对于端口选项而言,一般来说默认为22端口。
Server一栏同样为IP地址。
Username为服务器端Ubuntu的登陆用户名,同理Password为该用户名对应的密码。
Remote Path为Gridea编译所得的静态网页将要发送至的地址,在这里作者设置为/home/username/Blog.
其他路径也无妨,只要在后续Nginx配置中同时进行修改即可。
至此,本地的Gridea配置暂时告一段落。

二、服务器中Nginx的安装
(1)SSH配置
SFTP是SSH的一部分,且对于linux服务器来说,通过SSH进行远程访问才是常态。因此在这里首先通过systemctl status sshd
命令检查服务器中是否装有SSH。
一般来说,Ubuntu系统默认会带有SSH,若系统未装有SSH,通过
apt
命令即可进行安装。
- 通过
sudo ufw enable
开启防火墙。 - 通过
sudo ufw allow ssh
打开SSH端口(默认为22)。 - 通过
sudo systemctl enable ssh
设置SSH为开机自启,以便后续进行远程访问/传输。
(2)Nginx安装及配置
- 通过
apt
命令安装nginx[1]。 - 在
/home/username/
下创建Blog文件夹用来放置静态网页的文件。创建目录要与上文中Gridea中所配置相同。
- 通过
vim /etc/nginx/nginx.conf
打开Nginx配置文件。在http{}
内添加如下代码即可。http{ server { listen 80; //端口 server_name 192.168.0.16; //访问的域名(本地博客这里设置为服务器的IP地址) root /home/username/Blog; //网站文件存放目录,要与上文所创建目录相同。 location / {} error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
- 设置完成后,通过
sudo nginx -s reload
命令来重启Nginx。重启完成后,查看是否有error/warning。若无即可在浏览器内通过192.168.0.16
来验证nginx是否安装成功。
三、Gridea上传验证
在完成上述步骤后,在图一Gridea页面中通过左下角_检测远程连接_即可验证SFTP是否可以跑通。
关键在于Gridea中的配置及服务器端Blog目录的创建,与Nginx配置无关。
验证成功后即可点击图一中的上传按钮,将静态网页上传至服务器。
在本地端浏览器中通过192.168.0.16
即可实现对博客网页的访问,如图二所示。

四、Blog搭配文件服务器使用
Nginx不仅仅作为web站点使用,也可以当做一个文件共享的使用,索引目录列表提供用户下载文件。Nginx自带的autoindex模块ngx_http_autoindex_module功能很简单,该模块是默认安装的。
(一)Gridea配置
首先,在下图的页面中,添加文件选项,并将其挂载至/download
目录下,这样我们便可以通过域名/download
或者直接在博客首页点击”文件“进入到文件服务器之中。
(二)Nginx配置
首先,通过sudo vim /etc/nginx/nginx.conf
进入nginx的配置文件;
修改如下代码:
server{
listen 80 ;
server_name 100.122.130.115;
#ip/根目录 为Blog的静态页面
location / {
root /home/fbwenoll/Blog;
}
#ip/download地址为文件服务器
location /download {
#文件服务器挂在在Downloads文件夹上
#改行代码请使用alias精确指定文件位置,不要用root命令(root指定的是上一层目录)
#切记不要把服务器挂载在/Blog目录下!Gridea上传时会将其覆盖。
alias /home/fbwenoll/Downloads;
#打开autoindex
autoindex on;
#显示文件大小确切大小,单位为byte。若关闭则单位变为Kb/Mb/Gb
autoindex_exact_size off;
#文件显示格式,可以是html | xml | json | jsonp
autoindex_format html;
#显示时间戳
autoindex_localtime on;
#编码格式
charset utf-8;
}
error_page 404 /404.html;
location = /40x.html{
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
配置完成后通过sudo nginx -s reload
重启nginx服务。
修改完成后即可在博客页面访问到文件服务器,如下图所示。

(三)文件的下载/上传
- 文件上传可通过Xshell配合Xftp或者命令行
put
命令等实现。 - 文件下载可直接访问
域名/download
或在博客页面点击”文件“实现文件的下载。
五、通过TailScale实现远程访问
目前,我们所配置的blog+文件服务器只能用于同一局域网下,这里我们可以使用TailScale工具来实现虚拟局域网组网来打破这一限制。
Tailscale是一种基于 WireGuard 的虚拟组网工具,它能帮助我们把安装了 Tailscale 服务的机器,都放到同一个局域网内,即公司或者家里的 PC 机器连到同一网络,甚至云服务器都能放到同一个局域网。因此基于此方案,我们可以实现异地博客访问。TailScale配置方法如下:
- 在两台电脑上下载TailScale并登陆同一账号,可以使用微软/Github/谷歌等账号登陆。
- 打开Tail Sacle console即可查看被绑定设备的虚拟IP地址,如下图所示。
对于服务器而言,最好使用
systemctl enable tailscaled
使tailscale服务可以自动启动。
如果使用TailScale,相对应的要将上文中设计IP地址的地方均替换为TailScale提供的虚拟IP地址。但是这样做会导致该博客只能在TailScale环境下使用,无法在局域网下使用。因此这里设置多个server_mame
指向同一网站为宜。
(一)Nginx配置
首先,通过sudo vim /etc/nginx/nginx.conf
进入nginx的配置文件;
将上文中Server{}
区块中的代码复制一份,并仅对IP进行修改:
server{
listen 80 ;
#这里添加tailscale虚拟ip,与局域网ip以空格分隔开
server_name 100.122.130.115 192.168.31.118;
location / {
root /home/fbwenoll/Blog;
}
location /download {
alias /home/fbwenoll/Downloads;
autoindex on;
autoindex_exact_size off;
autoindex_format html;
autoindex_localtime on;
charset utf-8;
}
error_page 404 /404.html;
location = /40x.html{
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
配置完成后通过sudo nginx -s reload
重启nginx服务,大功告成。
六、结论
经由上述配置后,可以实现:
- (虚拟)局域网内对博客的访问;
- (虚拟)局域网内通过Gridea实现对博客内容的远程更新。
- (虚拟)局域网内访问文件服务器对文件进行下载/上传。
在后续中如有必要,可购买域名通过DynDNS/No ip等工具将动态DNS绑定至特定域名内,来实现公网的访问。
在后续维护中,也可将服务器的图形界面关闭以节省性能,通过shell工具远程SSH实现对服务器的维护。
作者这里没有关闭图形界面,而是使用了VNC工具实现远程linux桌面访问,也可以使用TailScale虚拟组网。
关闭用户图形界面
sudo systemctl set-default multi-user.target
sudo reboot
开启用户图形界面:
sudo systemctl set-default graphical.target
sudo reboot
https://devwl.com/posts/nginx+hugo/ ↩︎