Ubuntu安装nginx配置虚拟主机并开启ssl自动续期

前言

在上一篇文章中,我们完成了Ubuntu服务器的初始化,完成了ssh的配置以及apt源的更换,详情请传送,由于,vps的配置比较低,所以只准备在服务器上面放一些html+css+js相关的内容,只它用来执行轻量级的任务

安装nginx

前提

安装nginx之前,请参考前一篇教程更换系统软件源

安装

使用下面的命令安装nginx

sudo apt install -y nginx

查看进程

安装完毕后,可以通过下面的命令查看nginx的状态

sudo systemctl status nginx

看到如下内容

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Fri 2025-03-14 15:00:04 UTC; 7min ago
       Docs: man:nginx(8)
    Process: 5711 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 5718 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 5725 (nginx)
      Tasks: 2 (limit: 1035)
     Memory: 1.7M (peak: 1.9M)
        CPU: 32ms
     CGroup: /system.slice/nginx.service
             ├─5725 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─5726 "nginx: worker process"

看到如下内容,则代表nginx服务已启动

Active: active (running) since

如果看到如下内容,则代表nginx服务未启动

Active: inactive (dead)

可以使用下面的下面的命令启动nginx

sudo systemctl start nginx

查看服务是否开机启动

如果在使用上面命令查看nginx状态的时候看到如下内容,则代表服务的开机自启已启用

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)

如果在使用上面命令查看nginx状态的时候看到如下内容,则代表服务的开机自启未启用启用

Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: enabled)

可以使用下面的命令启用nginx的开机启动

sudo systemctl enable nginx

新增站点

在nginx中,站点配置是通过.conf文件进行配置的,当我们需要新增网站时,需要通过编写conf文件来进行新增网站

下面是一个标准的nginx静态前端的模板

server {
  listen       80;  # 监听端口,一般默认http端口为80
  server_name  www.bitnet.fun bitnet.fun;  # 监听域名,只有域名和server_name匹配,才会进入这个配置中
  root         /root/web/bitnet.fun; # 页面文件所在的目录
  location / {
    index index.html;  # 默认的主页文件类型
    try_files $uri $uri/ /index.html;  # 伪静态
  }
}

nginx的配置文件的每一行末尾都需要有分号,#开头的为注释

我们可以将上面的文件保存在/etc/nginx/sites-available目录中

例如保存为/etc/nginx/sites-available/bitnet.fun.conf

但是/etc/nginx/sites-available目录中的配置文件默认是未被启用的配置文件,此时,我们需要在/etc/nginx/sites-enabled目录中创建一个软链接,以启用上面的配置

ln -s /etc/nginx/sites-available/bitnet.fun.conf /etc/nginx/sites-enabled/bitnet.fun.conf

此时,我们需要测试nginx配置文件是否全部正确,不正确的配置文件会导致nginx服务崩溃导致所有页面全部无法访问

nginx -t

如果,看到的结果是

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

则表示nginx配置文件无误,可以通过下面的命令使配置文件生效

nginx -s reload

如果配置文件有误,可以根据返回的内容修改对应的文件位置

配置ssl证书自动续期

为了打开网站的https使网站更加安全,我们需要使用ssl证书对网站进行保护,但是现在免费的ssl证书只有90天,也就是每90天就需要更换ssl证书进行重新部署

配置完ssl证书的自动续期后,就可以一次配置一直保持网站的https不失效

创建腾讯云子账号并获取SecretId和SecretKey

登陆腾讯云并打开https://console.cloud.tencent.com/cam

  • 点击新建用户
  • 点击快速创建
  • 输入用户名
  • 修改访问方式为编程访问
  • 修改用户权限为QcloudDNSPodFullAccess
  • 点击创建用户
  • 保存当前用户的SecretIdSecretKey

使用acme.sh配置证书自动续期

根据https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E的官方说明,安装并配置对应的域名服务商

获取acme.sh

curl https://get.acme.sh | sh -s email=gaze@bitnet.fun

如果是大陆的服务器,可能会遇到下面的报错

curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 3 ms: Couldn't connect to server

官方给出的解决方案是

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m email=gaze@bitnet.fun

但是,当我申请ssl证书的时候,遇到了一个报错

Can not find dns api hook for: dns_tencent

这个时候我才发现https://gitee.com/neilpang/acme.sh.git的项目已经停更三年了,导致版本大幅落后于官方版本,最终还是本地拉下来之后使用scp上传到服务器的

git clone git@github.com:acmesh-official/acme.sh.git
scp -r acme.sh nat:~/apps

我申请了多个域名的ssl证书,步骤如下

# 设置环境变量
export Tencent_SecretId="<Your SecretId>"
export Tencent_SecretKey="<Your SecretKey>"

# 进入acme.sh目录执行证书申请
cd ~/apps/acme.sh
./acme.sh --issue --dns dns_tencent -d bitnet.fun -d *.bitnet.fun -d *.api.bitnet.fun

返回结果

[Sun Mar 16 04:52:19 PM UTC 2025] Your cert is in: /root/.acme.sh/bitnet.fun_ecc/bitnet.fun.cer
[Sun Mar 16 04:52:19 PM UTC 2025] Your cert key is in: /root/.acme.sh/bitnet.fun_ecc/bitnet.fun.key
[Sun Mar 16 04:52:19 PM UTC 2025] The intermediate CA cert is in: /root/.acme.sh/bitnet.fun_ecc/ca.cer
[Sun Mar 16 04:52:19 PM UTC 2025] And the full-chain cert is in: /root/.acme.sh/bitnet.fun_ecc/fullchain.cer

配置nginx的ssl证书

server {
  listen       80;  # 监听端口,一般默认http端口为80
  server_name  www.bitnet.fun bitnet.fun;  # 监听域名,只有域名和server_name匹配,才会进入这个配置中
  location / {
    return 301 https://$server_name$request_uri;  # 将http请求重定向到https请求
  }
}

server {
  listen 443 ssl;  # 启用ssl
  server_name www.bitnet.fun bitnet.fun;

  ssl_certificate /root/.acme.sh/bitnet.fun_ecc/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/bitnet.fun_ecc/bitnet.fun.key;

  root         /root/web/bitnet.fun; # 页面文件所在的目录
  location / {
    index.html;  # 默认的主页文件类型
    try_files $uri $uri/ /index.html;  # 伪静态
  }
}

测试nginx配置文件是否全部正确

nginx -t

如果nginx配置文件无误,可以通过下面的命令使配置文件生效

nginx -s reload

到此,已经完成了nginx的安装和虚拟主机的配置,也包括了ssl证书的配置以及自动续期

--END--
评论区
头像
文章目录