在当今数字化的时代,网站的安全性和性能至关重要。Nginx 作为一款轻量级且高性能的 Web 服务器,结合 SSL 证书可以为网站提供安全的 HTTPS 连接。Ubuntu 是一个广泛使用的 Linux 发行版,下面将详细介绍如何在 Ubuntu 系统中为网站配置 Nginx + SSL。
一、安装 Nginx
首先,我们需要在 Ubuntu 系统上安装 Nginx。打开终端,使用以下命令更新系统软件包列表:
sudo apt update
更新完成后,执行以下命令来安装 Nginx:
sudo apt install nginx
安装过程中,系统会提示你确认安装,输入 “Y” 并回车即可。安装完成后,使用以下命令启动 Nginx 服务:
sudo systemctl start nginx
为了让 Nginx 在系统启动时自动启动,可以使用以下命令将其设置为开机自启:
sudo systemctl enable nginx
我们可以通过访问服务器的 IP 地址来验证 Nginx 是否安装成功。在浏览器中输入服务器的 IP 地址,如果看到 Nginx 的欢迎页面,说明安装成功。
二、配置 Nginx 虚拟主机
接下来,我们要为网站配置 Nginx 虚拟主机。虚拟主机允许我们在同一台服务器上托管多个网站。首先,创建一个新的 Nginx 配置文件,假设我们的网站域名为 “example.com”,可以使用以下命令创建配置文件:
sudo nano /etc/nginx/sites-available/example.com
在打开的文件中,输入以下配置内容:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}上述配置中,“listen 80” 表示监听 HTTP 端口 80;“server_name” 指定了网站的域名;“root” 指定了网站文件的根目录;“index” 指定了默认的索引文件。
保存并关闭文件后,我们需要创建网站文件的根目录:
sudo mkdir -p /var/www/example.com/html
然后,为该目录设置合适的权限:
sudo chown -R $USER:$USER /var/www/example.com/html sudo chmod -R 755 /var/www/example.com
接着,我们可以创建一个简单的测试页面:
echo "Hello, World!" | sudo tee /var/www/example.com/html/index.html
最后,启用该虚拟主机配置文件:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
为了确保配置文件没有语法错误,可以使用以下命令进行检查:
sudo nginx -t
如果检查通过,重新加载 Nginx 服务:
sudo systemctl reload nginx
三、获取 SSL 证书
为了实现 HTTPS 连接,我们需要获取 SSL 证书。这里推荐使用 Let's Encrypt,它是一个免费的、自动化的证书颁发机构。首先,安装 Certbot 工具:
sudo apt install certbot python3-certbot-nginx
安装完成后,使用 Certbot 为我们的网站获取 SSL 证书:
sudo certbot --nginx -d example.com -d www.example.com
执行上述命令后,Certbot 会自动检查 Nginx 配置文件,验证域名所有权,并为我们的网站获取 SSL 证书。在获取证书的过程中,Certbot 会提示我们选择是否将 HTTP 请求重定向到 HTTPS,建议选择重定向,这样可以确保所有访问都通过安全的 HTTPS 连接。
获取证书成功后,Certbot 会自动更新 Nginx 配置文件,添加 SSL 相关的配置。此时,我们可以再次检查 Nginx 配置文件的语法:
sudo nginx -t
如果检查通过,重新加载 Nginx 服务:
sudo systemctl reload nginx
四、配置 SSL 优化
为了提高 SSL 连接的性能和安全性,我们可以对 SSL 配置进行优化。打开 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/example.com
在 “server” 块中添加以下 SSL 优化配置:
ssl_protocols TLSv1.3; # 仅使用 TLS 1.3 协议 ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off;
上述配置中,“ssl_protocols” 指定了仅使用 TLS 1.3 协议,这是目前最安全和高效的 TLS 协议;“ssl_ciphers” 指定了使用的加密套件。
保存并关闭文件后,再次检查 Nginx 配置文件的语法:
sudo nginx -t
如果检查通过,重新加载 Nginx 服务:
sudo systemctl reload nginx
五、设置证书自动更新
Let's Encrypt 的 SSL 证书有效期为 90 天,为了避免证书过期影响网站的正常访问,我们需要设置证书自动更新。Certbot 提供了自动更新的功能,我们可以使用以下命令测试自动更新:
sudo certbot renew --dry-run
如果测试通过,我们可以使用 cron 任务来定期执行证书更新操作。打开 cron 表:
sudo crontab -e
在打开的文件中添加以下内容:
0 0,12 * * * /usr/bin/certbot renew --quiet
上述配置表示每天的 0 点和 12 点自动执行证书更新操作。保存并关闭文件后,cron 任务会自动生效。
六、监控和维护
为了确保网站的正常运行,我们需要对 Nginx 和 SSL 证书进行监控和维护。可以使用以下命令查看 Nginx 服务的状态:
sudo systemctl status nginx
如果发现 Nginx 服务出现异常,可以使用以下命令重启服务:
sudo systemctl restart nginx
同时,我们可以定期检查 SSL 证书的有效期,确保证书不会过期。可以使用以下命令查看证书的有效期:
sudo certbot certificates
如果发现证书即将过期,可以手动执行证书更新操作:
sudo certbot renew
通过以上步骤,我们成功在 Ubuntu 系统中为网站配置了 Nginx + SSL,实现了网站的安全访问。在实际应用中,我们还可以根据需要对 Nginx 和 SSL 配置进行进一步的优化和调整,以满足不同的业务需求。