debian

Nginx SSL在Debian上的最佳实践

小樊
35
2025-03-03 08:04:20
栏目: 云计算

在Debian上配置Nginx以支持SSL(Secure Sockets Layer)和HTTPS涉及多个步骤,包括安装必要的软件包、配置Nginx、获取和安装SSL证书,以及启用SSL模块。以下是一些最佳实践:

安装Nginx和必要的软件包

首先,确保你的系统是最新的,并安装Nginx和必要的软件包:

sudo apt update
sudo apt upgrade
sudo apt install nginx curl gnupg2 ca-certificates lsb-release debian-archive-keyring

导入Nginx官方密钥

为了验证从nginx.org下载的软件包的正确性,需要导入官方密钥:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

设置稳定的Nginx存储库(可选)

如果你希望使用稳定的Nginx包,可以添加以下命令到/etc/apt/sources.list.d/nginx.list文件中:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

安装Certbot和Snap(推荐)

Certbot是一个用于自动获取和部署SSL证书的工具。推荐使用Snap版本:

sudo apt update
sudo apt install snapd
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

使用Certbot获取SSL证书

使用Certbot为你的域名获取SSL证书。以下是一个基本的示例:

sudo certbot --nginx -d yourdomain.com

配置Nginx以使用SSL证书

Certbot会自动创建一个新的Nginx配置文件,通常位于/etc/nginx/conf.d/yourdomain.com.conf。确保该文件包含以下内容:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # 其他配置...
}

启用SSL模块(如果需要重新编译Nginx)

如果默认安装的Nginx没有启用SSL模块,你需要重新编译并安装Nginx:

wget https://nginx.org/download/nginx-1.26.2.tar.gz
tar -xvf nginx-1.26.2.tar.gz
cd nginx-1.26.2
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
sudo make install

自动续签SSL证书

为了确保SSL证书不会过期,可以使用acme.sh脚本实现自动续签。以下是一个基本的示例:

# 创建必要的目录
mkdir -p /etc/acme/{config,live,certs}
mkdir -p /var/www/acme/.well-known/acme-challenge

# 克隆acme.sh仓库
git clone https://github.com/acmesh-official/acme.sh.git /etc/acme/

# 安装acme.sh
./acme.sh --install -m your@email.com --home /etc/acme --config-home /etc/acme/config --cert-home /etc/acme/certs

# 开启自动更新
/etc/acme/acme.sh --config-home '/etc/acme/config' --upgrade --auto-upgrade

# 添加Nginx配置给acme.sh
cat <<EOF > /etc/nginx/conf.d/acme.conf
location /.well-known/acme-challenge/ {
    alias /var/www/acme/.well-known/acme-challenge/;
}
EOF

# 修改需要添加SSL证书的域名Nginx配置文件
cat <<EOF > /etc/nginx/sites-available/yourdomain.com
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # 其他配置...
}
EOF

# 重新加载Nginx配置
sudo nginx -s reload

设置定时任务以自动续签证书

为了确保SSL证书能够自动续签,可以设置定时任务:

crontab -e

添加以下行以每天检查并续签证书:

0 0 * * * /etc/acme/acme.sh --cron --home "/etc/acme" --config-home "/etc/acme/config" > /dev/null

以上步骤涵盖了在Debian上配置Nginx以支持SSL和HTTPS的最佳实践,包括安装必要的软件包、导入密钥、设置存储库、获取SSL证书、配置Nginx、启用SSL模块以及设置自动续签。

0
看了该问题的人还看了