利用Nginx在VPS部署你的hugo博客

Page content

前言

 之前我的博客是部署在vecel平台的,并且绑定了自己的域名。但在今年10月份的某天,我发现博客已经无法在正常情况下访问,开启梯子后才可以访问,这样对于不会魔法上网的人来说访问的门槛的确有点高了。后来网上找了很多解决方案也解决不了,最后vercel主页网站了被DNS污染,也是无法正常访问,所以后来大概找到问题根源所在,如果你也遇到类似的问题,可以按照以下步骤解决:

1、把自己的域名托管在cloudfare,如果好不知道怎么把自己的托管在cloudfare的,可以参考我这篇文章:【文章链接

2、把你指向vercel平台的DNS记录的小云朵打开(即利用cloudfare的cdn加速服务)

3、把SSL/TSL加密模式调整为:完全(严格),具体的路径如下:

屏幕截图 2023-10-12 191533.jpg

 通过的以上的设置就可以正常无魔法的情况下访问,虽然访问速度比以前差了一点。

自己刚好有一台闲置的vps主机,于是就折腾一下如何把自己的博客放在vps上,今次介绍的使用nginx服务来代理静态网页访问。

Nginx介绍

 Nginx是一个高性能的开源Web服务器软件。它可以作为反向代理服务器,负载均衡器和HTTP缓存服务器使用。Nginx以其出色的性能和高度可扩展性而闻名,被广泛用于处理高并发的网络流量。它支持多种协议,包括HTTP、HTTPS、SMTP和POP3,并提供了丰富的功能和灵活的配置选项,使其成为许多网站和应用程序的首选服务器软件之一。在本次对话中,我们将使用Nginx来托管Hugo博客的静态文件。

配置Nginx步骤

1、安装Nginx

运行以下命令以更新软件包列表: 对于基于Debian/Ubuntu的系统:

sudo apt update

安装Nginx

sudo apt install nginx

Nginx会占用主机的80和443端口,前提前检查自己的vps有无被占用,由于我的vps实在全新的情况下安装nginx的,所以无任何报错。

2、启动Nginx服务

sudo service nginx start

3、验证Nginx是否已成功安装:

打开您的Web浏览器,并输入VPS的IP地址或域名。如果您看到Nginx的欢迎页面,则表示Nginx已成功安装并运行。

4、在root目录创建一个blog文件夹

sudo mkdir /blog

5、上传public文件夹

利用winscp登录自己vps主机,把压缩后的public文件夹上传至刚才创建好的blog文件夹。当然,这个步骤你也可以用scp和git,我介绍的是比较笨的的方法。

6、进入blog目录进行解压

 cd /root/blog&& unzip public

7、修改Nginx配置文件

在配置Nginx之前记得提前将自己的域名添加一条A记录到自己的vps主机。我们下一步需要找到Nginx的配置文件。

nginx -v           

输入上面指令后就会得到Nginx的配置文件路径,一般情况下会在/etc/nginx/nginx.conf这个目录下。 然后利用winscp这个软件找到这个配置文件并打开,打开后可以直接进行编辑,在配置文件的http模块下添加一个server块

server {
    listen 80;
    server_name your_domain_name;   ## 你的域名

    root /blog/public;   ##如果你的路径跟我上面介绍一样去设置的可以按照这个路径
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

编辑完成后保存修改

安装SSL证书

sudo apt install certbot     安装certbot 
sudo certbot --nginx -d example.com

这将使用Nginx插件自动配置和安装SSL证书。

Certbot将提示您提供相关信息,如电子邮件地址和域名。按照提示输入正确的信息。

Certbot将尝试与Let’s Encrypt服务器进行通信,并验证您拥有该域名的控制权。如果验证成功,Certbot将为您的域名颁发SSL证书并将其安装到Nginx配置中。

完成后,Certbot会显示证书的位置。您可以在Nginx配置文件中使用这些证书路径。

常见报错

1、The requested nginx plugin does not appear to be installed 解决方案:sudo apt install certbot python3-certbot-nginx

2、nginx: [warn] conflicting server name “example.com” on 0.0.0.0:443, ignored 这个警告消息表示在监听 0.0.0.0:443 的服务器块中存在相同的 server_name 参数值

解决方案:检查其他配置文件:除了主要的 Nginx 配置文件(通常是 /etc/nginx/nginx.conf),还需要检查其他可能引入的配置文件,例如在 nginx.conf 中通过 include 语句引入的其他文件。确保在所有配置文件中没有重复的 server_name 参数。

修改配置文件后输入以下指令来重新加载配置文件,若无报错即表示配置正确

sudo nginx -s reload

8、重启Nginx服务

sudo systemctl restart nginx

至此,你的博客已经部署到vps服务器可以通过刚才的绑定的域名进行访问,并且配置ssl证书。