侧边栏壁纸
  • 累计撰写 43 篇文章
  • 累计创建 0 个标签
  • 累计收到 35 条评论

目 录CONTENT

文章目录

网站基本环境的配置教程

初始化 VPS

  1. ssh 登录到远程服务器的 root 用户后再完成以下操作:

    更新系统已知的软件包列表、升级系统上的所有软件包、移除不再需要的依赖软件包:

    apt update && apt upgrade && apt autoremove
    

    正经的 Linux 用户不会用 root 干所有的事情,如果这么做的话将会很危险。创建一个普通的用户,并让它可以通过 sudo 指令用 root 权限执行命令是一般的解决方案。

  2. 在用 sudo 之前,我们需要先安装 sudo 这个软件包:

    apt install sudo
    
  3. 新建一个普通用户,本文新建名为 eric 的用户(同时创建相应的 home 目录),并将其添加到 sudo 用户组中;最后给 eric 设置一个密码:

    useradd -m -G sudo eric
    passwd eric
    
  4. 更改 eric 的默认 shell

    chsh eric
    
  5. 相关建议(可选操作)

    为了安全起见,建议你完成下列操作:

    • 禁止通过 SSH 登录到 root 用户
    • 限制 SSH 通过用户密码来登录,并实现 SSH 仅能通过密钥登录服务器

    提一下要点,不知道怎么做的话就 Google 学习一下:

    • 编辑 /etc/ssh/sshd_config文件:

      PermitRootLogin no	# 禁止通过 SSH 登录到 root 用户
      PasswordAuthentication no # 限制 SSH 通过用户密码来登录
      
    • 将本机公钥添加到远程服务器

      本机 ssh 公钥路径 (如未生成使用 ssh-keygen 生成):~/.ssh/id_rsa.pub
      然后将 ~/.ssh/id_rsa.pub 的内容追加到到服务器用户下的 ~/.ssh/authorized_keys
      最后重启 sshd 服务
      

安装 nginx 前的准备

正经的 Linux 用户不会用 root 干所有的事情,如果这么做的话将会很危险。所以使用普通用户,再通过 sudo 指令用 root 权限执行命令是坠吼的。

使用普通用户通过 ssh 登录到你的远程服务器后再完成以下操作:

  1. 时间校准

    sudo timedatectl set-ntp true # 启用 NTP 服务
    sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 将时区设为“亚洲/上海”
    sudo hwclock --systohc # 将硬件时钟调整到与当前系统时间一致
    date -R # 以 RFC 5322 格式输出日期和时间。例如 Mon, 18 Jan 2021 11:04:16 +0800
    

    执行完之后,终端显示的时间如果正确,那么就没问题了。

  2. 防火墙初始化

    本文将使用 ufw 来管理系统的防火墙

    sudo apt install ufw
    sudo ufw enable
    sudo ufw allow 'OpenSSH'
    
  3. 安装相关软件包

    更新系统已知的软件包列表、升级系统上的所有软件包、移除不再需要的依赖软件包:

    sudo apt update && sudo apt upgrade && sudo apt autoremove
    

    安装编辑器 vim(后续编写配配置文件需要,当然你也可以使用其他编辑器):

    sudo apt install vim
    

Cloudflare 接管域名解析

  • 添加记录并点亮小云朵
  • SSL/TLS 里选择 Full (strict)

截屏2021-12-25 12.58.23.png

安装 Nginx 及其初始配置

请将本文中的 ijk.me 替换成您注册的域名

安装 Nginx

sudo apt install nginx

配置防火墙

sudo ufw allow 'Nginx Full'

配置 Nginx

  1. Nginx 在安装过程中会创建一个默认的服务器块。如果它仍然存在,请将其删除,因为你后面将为你注册的域名配置一个自定义服务器块

    sudo rm /etc/nginx/sites-enabled/default
    
  2. 使用如下命令,为你的域名创建目录

    sudo mkdir -p /var/www/ijk.me/html
    
  3. 接下来,用 $USER 环境变量给当前的系统用户分配目录的所有权

    sudo chown -R $USER:$USER /var/www/ijk.me/html
    
  4. 使用命令确保 web root 具有正确的权限

    sudo chmod -R 755 /var/www/ijk.me
    
  5. 接下来,使用 vim 或其他编辑器创建 index.html 页面文件

    vim /var/www/ijk.me/html/index.html
    

    文件写入以下内容

    <html>
        <head>
            <title>Welcome</title>
        </head>
        <body>
            <h1>Success! Your Nginx server is successfully configured. </h1>
    <p>This is a sample page.</p>
        </body>
    </html>
    
  6. 我们需要创建一个服务器块,指向我们自定义的 web root。我们不直接修改默认的配置文件,而是新建一个文件

    sudo vim /etc/nginx/sites-available/ijk.me
    

    填写以下内容:

    server {
            listen 80;
            listen [::]:80;
    
            root /var/www/ijk.me/html;
            index index.html index.htm index.nginx-debian.html;
    
            server_name ijk.me www.ijk.me;
    
            location / {
                    try_files $uri $uri/ =404;
            }
    }
    
  7. 接下来,让我们通过在 sites-enabled 目录下创建一个符号链接来启用这个服务器块,Nginx 在启动时会在这个目录下读取配置文件:

    sudo ln -s /etc/nginx/sites-available/ijk.me /etc/nginx/sites-enabled/
    
  8. 为了防止可能出现的内存问题,有必要调整 /etc/nginx/nginx.conf 文件中的一个值

    sudo vim /etc/nginx/nginx.conf
    

    找到 server_names_hash_bucket_size,将 # 符号去掉,取消这一行的注释

    ...
    http {
        ...
        server_names_hash_bucket_size 64;
        ...
    }
    ...
    
  9. 接下来,测试一下 Nginx 文件中是否有语法错误

    sudo nginx -t
    
  10. 最后,若你的配置测试没有遇到问题,重启 Nginx 来启用你的更改

    sudo systemctl restart nginx
    
  11. 现在可以访问您注册的域名了,如下:

    截屏2021-12-25 13.08.56.png

配置https(acme.sh配置)

生成 TLS 证书和私钥

生成证书的方法有很多,这里我们使用 acme.sh 生成证书。

  1. 安装 acme

    curl https://get.acme.sh | sh -s email=xxx@qq.com
    

    执行上面命令,然后使用命令 ls -al,我们就可以看到安装完毕,安装在 .acme.sh 隐藏文件夹内了。

  2. 使用 Global Key:

    Global Key 可以在 这个页面 看到,将这个 Key 导入到环境变数中

    export CF_Key="example_key"
    export CF_Email="yourname@example.com"
    
  3. 进入文件夹 .acme.sh 并申请证书:

    cd .acme.sh
    ./acme.sh --issue --dns dns_cf -d ijk.me -d www.ijk.me
    

    证书都生成在 /root/.acme.sh/ijk.me_ecc/ 文件夹下了

  4. 修改前文 sudo vim /etc/nginx/sites-available/ijk.me 内容为(域名记得替换为自己的域名):

    server {
      listen 80 default_server;
      listen [::]:80 default_server;
    
      server_name ijk.me www.ijk.me;
    
      return 301 https://$host$request_uri;
    }
    
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
    
      ssl_certificate "/root/.acme.sh/ijk.me_ecc/fullchain.cer"; ## 此处相关证书替换为自己的
      ssl_certificate_key "/root/.acme.sh/ijk.me_ecc/ijk.me.key"; ## 此处相关证书替换为自己的
      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout 10m;
    
      # intermediate configuration
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
      ssl_prefer_server_ciphers off;
    
      # HSTS (ngx_http_headers_module is required) (63072000 seconds)
      add_header Strict-Transport-Security "max-age=63072000" always;
    
      server_name ijk.me www.ijk.me;
    
      root /var/www/ijk.me/html;
      index index.html index.htm index.nginx-debian.html;
    
    
      location / {
        try_files $uri $uri/ =404;
      }
    }
    
  5. 验证是否正确sudo nginx -t

  6. 重新加载nginx使之生效:sudo nginx -s reload

  7. 这时访问 ijk.mewww.ijk.me,一切妥当。

过期手动更新

acme.sh --renew -d example.com --force
acme.sh --renew -d example.com --force --ecc  # 如果用的是ECC证书

由于我的acme.sh安装在/root/.acme.sh/此目录下。所以完整的手动更新证书命令为:

cd /root/.acme.sh/
./acme.sh --renew -d ijk.me --force

上面是手动更新证书,下面我们介绍自动更新证书。因为acme颁发的证书有效期90天,所以我们每2个月更新一次证书就行。
使用Linux的crontab -e设置自动更新SSL证书:

# 1,3,5,7,9,11月的1号,1点30更新证书
30 01 1 1,3,5,7,9,11 * /root/.acme.sh/acme.sh --renew -d ijk.me --force

# 1,3,5,7,9,11月的1号,2点30重新启动nginx服务器
30 02 1 1,3,5,7,9,11 * /usr/sbin/nginx -t && nginx -s reload && /usr/sbin/nginx

以上命令表示奇数月份的每月2号0点38分自动执行更新证书脚本/root/.acme.sh/acme.sh --renew -d ijk.me --force

自启并启动相关服务

sudo systemctl enable nginx --now   # 自启并启动 Nginx 的服务
sudo systemctl status -l nginx      # 查看 Nginx 服务的状态

TCP BBR

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由 Google 设计的一种拥塞控制算法。自从 Linux Kernel 4.9 开始就引入了该算法,但默认没有启用,所以需要手动开启

启用该算法仅需在 /etc/sysctl.conf 文件末尾追加两行内容

sudo bash -c "echo 'net.core.default_qdisc=fq' >> /etc/sysctl.conf"
sudo bash -c "echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf"

接下来你需要重启系统或者直接 使用 *systemctl* 重载变更

sudo sysctl --system

您可以使用以下 sysctl 命令验证配置是否生效,如下:

sudo sysctl net.core.default_qdisc

注:若输出结果为 net.core.default_qdisc = fq,则配置已生效

sudo sysctl net.ipv4.tcp_congestion_control

注:若输出结果为 net.ipv4.tcp_congestion_control = bbr,则配置已生效

2

评论区