实验环境:virtualbox,虚拟机Ubuntu1804 / 腾讯云服务器ubuntu1804

测试域名:stu.wuyi.fun

软件使用:nginx,certbot

已测试:服务器环境,家用路由内网。

目录

1.安装配置Ubuntu

2.安装nginx

3.部署服务块

配置服务块 

下面就是真机实战

SSL与服务块

服务块创建

 SSL申请和部署

安装认证机器人,生成dh组

申请证书

配置HTTPS

证书无忧


1.安装配置Ubuntu

看我之前教程。1804类似于2004.

记得安装增强功能:

配置网卡,使主机和虚拟机处于同一个网段之下:

  做完这些记得重启。

测试主机ping虚拟机:

虚拟机内ping主机:

ping不通可能是Windows防火墙问题,也可以使用另外一台虚拟机桥接网卡进行尝试。

2.安装nginx

更新软件列表:

这里我直接用的默认的源,换源的问题同样参考我之前的文章。

sudo apt-get update

sudo apt install nginx

sudo systemctl status nginx

输出应当类似是: 

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: e
   Active: active (running) since Thu 2023-05-18 20:30:46 CST; 28min ago
     Docs: man:nginx(8)
 Main PID: 12400 (nginx)
    Tasks: 3 (limit: 4664)
   CGroup: /system.slice/nginx.service
           ├─12400 nginx: master process /usr/sbin/nginx -g daemon on; master_p
           ├─12401 nginx: worker process
           └─12402 nginx: worker process

5月 18 20:30:46 wy-VirtualBox systemd[1]: Starting A high performance web serve
5月 18 20:30:46 wy-VirtualBox systemd[1]: Started A high performance web server

 修改防火墙:

sudo ufw allow 'Nginx Full'
sudo ufw status

如果显示不活动其实可以忽略;这时候你就能在内网的http://ip看到你的ningx网站了。

 主机:

 部署成功。

给出常见命令:
sudo systemctl stop nginx

sudo systemctl start nginx

sudo systemctl restart nginx

sudo systemctl reload nginx

sudo systemctl disable nginx

sudo systemctl enable nginx

3.部署服务块

 一个服务器是可以提供多个服务块的,相当于可以配置两个站点在同一个设备上。核心自然是配置我们的nginx文件。

正常的工作环境里,首先我们要有一个域名,这里我们没有域名也可以用ip地址代替,域名的实际作用其实就是把访问这个域名的用户引导到你这个设备,所以能够提供域名服务的都是维护着dns一类基础设施的,否则没有办法把这个域名用上。虽然直接使用ip地址访问网站很奇怪,但是这不影响我们在测试环境练手,我也会尝试能否在内网环境下自己给自己分配一个使用的域名。这应该是搭建dns服务器的内容了?

我们将为要在目录中的服务器上托管的每个域创建一个单独的目录。在每个目录中,我们将创建一个存储域网站文件的目录。/var/www/domain.com/public_html

 文件结构如图所示,注意,这里的test.wuyi.fun是你自己的域名或者内网下的服务名。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome</title>
  </head>
  <body>
    <h1>Success! this is the home page!</h1>
  </body>
</html>

给www-data用户(nginx)文件夹权限 :

sudo chown -R www-data: /var/www/test.wuyi.fun

配置服务块 

/etc/nginx/sites-available/
/etc/nginx/sites-enabled/

 

 默认配置文件:

使一个配置文件起作用的方法是从site-available中引用过去。

 默认的配置文件可以看到根目录是/var/www/html

这就是我们访问给的默认文件。

server {
    listen 80;
    listen [::]:80;

    root /var/www/test.wuyi.fun/public_html;

    index index.html;

    server_name test.wuyi.fun www.test.wuyi.fun;

    access_log /var/log/nginx/test.wuyi.fun.access.log;
    error_log /var/log/nginx/test.wuyi.fun.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}
sudo ln -s /etc/nginx/sites-available/test.wuyi.fun /etc/nginx/sites-enabled/

 检测:

sudo nginx -t

sudo systemctl restart nginx

由于我们是内网所以我们没法在访问test.wuyi.fun的时候连接到这个虚拟机,我的猜想是需要搭配一个dns.

下面就是真机实战

服务器:随意,我这用腾讯云。

 重置密码后使用远程终端和腾讯云提供的都行。

和虚拟机内一样:

sudo apt update

sudo apt install nginx

sudo systemctl status nginx

sudo ufw allow 'Nginx Full'
sudo ufw status

 成功!

 下一步就是给我的网站搞个域名了

SSL与服务块

服务块创建

注意:请把所有的stu.wuyi.fun切换成你的域名

sudo mkdir -p /var/www/stu.wuyi.fun/public_html

 在这个目录底下创建index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to example.com</title>
  </head>
  <body>
    <h1>Success! example.com home page!</h1>
  </body>
</html>
sudo chown -R www-data: /var/www/stu.wuyi.fun
cd /etc/nginx/sites-available/stu.wuyi.fun
sudo vim stu.wuyi.fun

 内容:

server {
    listen 80;
    listen [::]:80;

    root /var/www/stu.wuyi.fun/public_html;

    index index.html;

    server_name stu.wuyi.fun www.stu.wuyi.fun;

    access_log /var/log/nginx/stu.wuyi.fun.access.log;
    error_log /var/log/nginx/stu.wuyi.fun.error.log;

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

 链接配置文件到sites-enabled文件夹:

sudo ln -s /etc/nginx/sites-available/stu.wuyi.fun /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

 成功!

 记得给你的域名添加解析。

 SSL申请和部署

安装认证机器人,生成dh组

sudo apt update
sudo apt install certbot
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

申请证书

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
sudo nano /etc/nginx/snippets/letsencrypt.conf

 内容:

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}
sudo nano /etc/nginx/snippets/ssl.conf

 内容:

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
sudo nano /etc/nginx/sites-available/stu.wuyi.fun.conf

内容: 

server {
  listen 80;
  server_name stu.wuyi.fun www.stu.wuyi.fun;

  include snippets/letsencrypt.conf;
}
sudo ln -s /etc/nginx/sites-available/stu.wuyi.fun.conf /etc/nginx/sites-enabled/

 确保万无一失:输入nginx -t,若出错,使用sudo nginx -t

sudo systemctl restart nginx

  同样确保万无一失:输入nginx -t,若出错,使用sudo nginx -t

sudo certbot certonly --agree-tos --email wuyi51io@outlook.com --webroot -w /var/lib/letsencrypt/ -d stu.wuyi.fun -d www.stu.wuyi.fun

 成功!

证书申请到了之后就可以进一步配置我们的配置文件。

配置HTTPS

sudo nano /etc/nginx/sites-available/stu.wuyi.fun.conf
server {
    listen 80;
    server_name www.stu.wuyi.fun stu.wuyi.fun;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.stu.wuyi.fun;

    ssl_certificate /etc/letsencrypt/live/stu.wuyi.fun/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stu.wuyi.fun/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/stu.wuyi.fun/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://stu.wuyi.fun$request_uri;
}

server {
    listen 443 ssl http2;
    server_name stu.wuyi.fun;

    ssl_certificate /etc/letsencrypt/live/stu.wuyi.fun/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stu.wuyi.fun/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/stu.wuyi.fun/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

 和我们的原配置组合起来:

server {
    listen 80;
    listen [::]:80;
    server_name www.stu.wuyi.fun stu.wuyi.fun;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.stu.wuyi.fun;

    ssl_certificate /etc/letsencrypt/live/stu.wuyi.fun/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stu.wuyi.fun/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/stu.wuyi.fun/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://stu.wuyi.fun$request_uri;
}

server {
    listen 443 ssl http2;
    server_name stu.wuyi.fun;

    ssl_certificate /etc/letsencrypt/live/stu.wuyi.fun/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stu.wuyi.fun/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/stu.wuyi.fun/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
    root /var/www/stu.wuyi.fun/public_html;

    index index.html;
    access_log /var/log/nginx/stu.wuyi.fun.access.log;
    error_log /var/log/nginx/stu.wuyi.fun.error.log;

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

 记得sudo nginx -t

再运行:

sudo systemctl restart nginx

证书无忧

 修改certbot文件使其在更新证书文件之后自动重启nginx:

sudo nano /etc/cron.d/certbot

 把下面这行内容添加到文件中,注意是添加:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

 测试,若无报错则成功,出现异常记得老样子检查配置文件然后nginx -t,之后运行重启nginx:

sudo certbot renew --dry-run

 到这我们的域名就部署了ssl访问:

 多服务块也是如此,本文章内使用的方法是针对单个域名,单个服务块的单独配置,多个服务块原理上就是重复我的操作,certbot申请证书是可以为非本地服务器域名申请的,这一点值得注意,所以你用一台主机专门提供该服务或许也是可行的,详情请看官网文档,那么我这篇文章就告一段落,感谢你的观看。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐