Nginx Linux安装教程:配置HTTPS和SSL证书 – wiki基地

Nginx Linux 安装教程:配置 HTTPS 和 SSL 证书

Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,以其卓越的性能、稳定性以及丰富的功能而闻名。HTTPS (HTTP Secure) 是一种通过计算机网络进行安全通信的网络协议,它使用 SSL/TLS 协议进行加密,确保数据在客户端和服务器之间的传输过程中不被窃取或篡改。本文将详细介绍如何在 Linux 系统上安装 Nginx,并配置 HTTPS 和 SSL 证书,保障网站安全。

一、准备工作

在开始安装和配置 Nginx 之前,我们需要进行一些准备工作:

  1. 服务器环境: 你需要一台已经安装了 Linux 操作系统的服务器。常见的 Linux 发行版,如 Ubuntu、CentOS、Debian 都可以。建议使用较新版本的 Linux 系统,以便获得更好的软件兼容性和安全更新。

  2. 拥有 root 权限的账户: 安装和配置 Nginx 通常需要 root 权限。你可以使用 sudo 命令执行需要管理员权限的操作。

  3. 域名: 你需要一个已经解析到你的服务器 IP 地址的域名。 这是获取 SSL 证书的前提条件,也是访问你网站的入口。

  4. 防火墙配置: 确保你的防火墙 (如 ufwfirewalld) 允许 HTTP (端口 80) 和 HTTPS (端口 443) 流量通过。

  5. 软件包管理器: 根据你的 Linux 发行版,你需要使用相应的软件包管理器来安装 Nginx。例如,Ubuntu 和 Debian 使用 apt,CentOS 使用 yumdnf

二、安装 Nginx

根据不同的 Linux 发行版,安装 Nginx 的方法有所不同。

1. Ubuntu/Debian:

使用 apt 包管理器安装 Nginx:

bash
sudo apt update
sudo apt install nginx

安装完成后,检查 Nginx 服务是否启动:

bash
sudo systemctl status nginx

如果 Nginx 未启动,可以使用以下命令启动:

bash
sudo systemctl start nginx

设置 Nginx 开机自启动:

bash
sudo systemctl enable nginx

2. CentOS/RHEL (使用 Yum):

使用 yum 包管理器安装 Nginx:

bash
sudo yum update
sudo yum install nginx

安装完成后,检查 Nginx 服务是否启动:

bash
sudo systemctl status nginx

如果 Nginx 未启动,可以使用以下命令启动:

bash
sudo systemctl start nginx

设置 Nginx 开机自启动:

bash
sudo systemctl enable nginx

3. CentOS/RHEL (使用 Dnf):

使用 dnf 包管理器安装 Nginx:

bash
sudo dnf update
sudo dnf install nginx

安装完成后,检查 Nginx 服务是否启动:

bash
sudo systemctl status nginx

如果 Nginx 未启动,可以使用以下命令启动:

bash
sudo systemctl start nginx

设置 Nginx 开机自启动:

bash
sudo systemctl enable nginx

安装完成后,你可以在浏览器中输入你的服务器 IP 地址,如果看到 Nginx 的默认欢迎页面,说明 Nginx 安装成功。

三、获取 SSL 证书

配置 HTTPS 的关键是拥有有效的 SSL 证书。 你可以选择购买商业 SSL 证书,也可以使用免费的 Let’s Encrypt 证书。

1. 使用 Let’s Encrypt 获取免费 SSL 证书

Let’s Encrypt 是一个免费、自动化、开放的证书颁发机构,可以方便地获取 SSL 证书。 你需要安装 certbot 工具来自动完成证书申请和配置过程。

a. 安装 Certbot:

 根据你的 Linux 发行版,安装 Certbot 的方式有所不同。

 **Ubuntu/Debian:**

 ```bash
 sudo apt update
 sudo apt install certbot python3-certbot-nginx
 ```

 **CentOS/RHEL (使用 Yum):**

 首先需要启用 EPEL 仓库:

 ```bash
 sudo yum install epel-release
 sudo yum install certbot python3-certbot-nginx
 ```

 **CentOS/RHEL (使用 Dnf):**

 ```bash
 sudo dnf install certbot python3-certbot-nginx
 ```

b. 运行 Certbot:

 运行 Certbot 命令,会自动检测你的 Nginx 配置并申请证书:

 ```bash
 sudo certbot --nginx -d your_domain.com -d www.your_domain.com
 ```

 将 `your_domain.com` 替换为你的域名。

 Certbot 会提示你输入邮箱地址,并同意服务条款。  它还会询问你是否要将 HTTP 流量重定向到 HTTPS。  建议选择 "2: Redirect all traffic to HTTPS"。

 Certbot 完成后,会自动配置 Nginx,添加 SSL 证书和密钥,并设置自动续期。

2. 购买商业 SSL 证书

如果你选择购买商业 SSL 证书,你需要:

  • 选择一个证书颁发机构 (CA): 例如,DigiCert、Comodo、GlobalSign 等。
  • 购买证书: 根据你的需求选择合适的证书类型 (DV, OV, EV)。
  • 生成 CSR (Certificate Signing Request): 使用 openssl 命令生成 CSR 文件和私钥文件。 例如:

    bash
    openssl req -new -newkey rsa:2048 -nodes -keyout your_domain.com.key -out your_domain.com.csr

    填写 CSR 信息时,确保 Common Name (CN) 是你的域名。

  • 提交 CSR 给 CA: 将 CSR 文件提交给 CA,CA 会验证你的信息并颁发证书。

  • 下载证书: 下载 CA 颁发的证书文件 (通常是 .crt.pem 格式) 和中间证书 (如果有)。

四、配置 Nginx 使用 SSL 证书

无论你使用 Let’s Encrypt 证书还是购买的商业证书,都需要配置 Nginx 来使用这些证书。

  1. 找到 Nginx 配置文件:

    Nginx 的主要配置文件通常位于 /etc/nginx/nginx.conf。 你的网站配置通常位于 /etc/nginx/conf.d/ 目录下的一个单独的文件中,例如 your_domain.com.conf。 如果你使用的是 Let’s Encrypt,Certbot 会自动创建或修改这个文件。

  2. 配置 HTTPS Server Block:

    在你的网站配置文件中,创建一个新的 server block 来处理 HTTPS 流量。 如果 Certbot 已经配置了,你可以编辑它创建的 server block。

    以下是一个示例 HTTPS server block 配置:

    “`nginx
    server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;

    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
    
    # SSL 配置 (可以根据需要进行调整)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    
    # 配置你的网站根目录和索引文件
    root /var/www/your_domain.com;
    index index.html index.htm;
    
    # 配置你的网站的其他设置,例如 location 块
    location / {
        try_files $uri $uri/ =404;
    }
    
    # 禁止访问隐藏文件
    location ~ /\.ht {
        deny all;
    }
    

    }

    server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri; # 将 HTTP 流量重定向到 HTTPS
    }
    “`

    • listen 443 ssl;: 监听 443 端口,这是 HTTPS 的默认端口,并启用 SSL。
    • server_name your_domain.com www.your_domain.com;: 指定你的域名。
    • ssl_certificate /path/to/your/certificate.pem;: 指定 SSL 证书文件的路径。 如果你使用的是 Let’s Encrypt,Certbot 会自动配置这个路径。 如果你购买了商业证书,你需要将 /path/to/your/certificate.pem 替换为你的证书文件的路径。
    • ssl_certificate_key /path/to/your/private.key;: 指定 SSL 私钥文件的路径。 如果你使用的是 Let’s Encrypt,Certbot 会自动配置这个路径。 如果你购买了商业证书,你需要将 /path/to/your/private.key 替换为你的私钥文件的路径。
    • ssl_protocols TLSv1.2 TLSv1.3;: 指定允许的 TLS 协议版本。 建议只使用 TLSv1.2 和 TLSv1.3,因为更旧的版本存在安全漏洞。
    • ssl_prefer_server_ciphers on;: 启用服务器密码首选项,使服务器选择更安全的密码套件。
    • ssl_ciphers ...;: 指定允许的密码套件。 选择安全且强大的密码套件组合。
    • ssl_session_timeout 1d;: 设置 SSL 会话超时时间。
    • ssl_session_cache shared:SSL:50m;: 启用 SSL 会话缓存,提高性能。
    • ssl_session_tickets off;: 禁用 SSL 会话票据,以增强安全性。
    • root /var/www/your_domain.com;: 指定你的网站根目录。
    • index index.html index.htm;: 指定默认的索引文件。
    • location / { ... }: 配置你的网站的其他设置,例如 URL 重写、代理等。
    • location ~ /\.ht { deny all; }: 禁止访问隐藏文件,例如 .htaccess
    • HTTP 重定向: 创建一个 server block 来监听 80 端口,并将所有 HTTP 流量重定向到 HTTPS。 这可以确保所有访问者都使用安全的 HTTPS 连接。
  3. 验证 Nginx 配置:

    在重新启动 Nginx 之前,验证你的配置文件是否正确:

    bash
    sudo nginx -t

    如果配置有误,Nginx 会提示错误信息。

  4. 重新启动 Nginx:

    重新启动 Nginx 使配置生效:

    bash
    sudo systemctl restart nginx

五、测试 HTTPS 配置

在浏览器中输入你的域名 (例如 https://your_domain.com)。

  • 检查 SSL 证书是否有效: 在浏览器地址栏中,应该看到一个锁形图标,表示连接是安全的。 点击锁形图标,可以查看 SSL 证书的详细信息,包括颁发者、有效期等。
  • 检查 HTTP 是否重定向到 HTTPS: 在浏览器中输入 http://your_domain.com,应该自动重定向到 https://your_domain.com
  • 使用 SSL Labs 测试: 可以使用 SSL Labs 的 SSL Server Test 工具 (https://www.ssllabs.com/ssltest/) 来测试你的 HTTPS 配置是否安全。 它可以检测你的服务器的 SSL 证书、协议、密码套件等,并给出安全建议。

六、SSL 证书自动续期

Let’s Encrypt 证书的有效期为 90 天,因此需要定期续期。 Certbot 会自动配置一个 cron job 来定期续期证书。

你可以使用以下命令检查 cron job 是否配置正确:

bash
sudo systemctl list-timers

应该能看到一个名为 certbot.timer 的定时器。

如果需要手动续期证书,可以使用以下命令:

bash
sudo certbot renew

七、总结

通过本文的详细教程,你应该已经成功地在 Linux 系统上安装了 Nginx,并配置了 HTTPS 和 SSL 证书,保障了你的网站安全。 记住,安全是一个持续的过程。 你需要定期更新 Nginx 和其他软件,监控服务器安全日志,并及时修复安全漏洞,以确保你的网站始终处于安全状态。 持续关注安全动态,学习新的安全技术,才能构建更安全可靠的 Web 应用。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部