Nginx 安装及配置网站和 SSL 证书
本文档将指导您在 Ubuntu 和 CentOS 系统上安装 Nginx Web 服务器,并为网站 www.xxx.com 配置独立的运行目录和配置文件,以及使用 acme.sh 申请 SSL 证书。
准备工作
在开始之前,请确保您以 root 权限或者具有 sudo 权限的用户身份登录到您的 Linux 系统。
安装 Nginx
Ubuntu 系统
更新软件包列表:
♾️ bash 代码:sudo apt update
安装 Nginx:
♾️ bash 代码:sudo apt install nginx
CentOS 系统
更新软件包列表:
♾️ bash 代码:sudo yum update
安装 Nginx:
♾️ bash 代码:sudo yum install nginx
启动和验证 Nginx
启动 Nginx 并设置开机自启动:
♾️ bash 代码:sudo systemctl start nginx sudo systemctl enable nginx
检查 Nginx 是否安装成功并正常运行:
♾️ bash 代码:sudo systemctl status nginx
如果状态显示为
active (running)
, 说明 Nginx 已经成功安装并启动。
配置网站目录和配置文件
创建网站运行目录
♾️ bash 代码:sudo mkdir -p /www/www.xxx.com
配置文件
Ubuntu
在
♾️ bash 代码:/etc/nginx/sites-available/
目录下创建一个新的配置文件:sudo vim /etc/nginx/sites-available/www.xxx.com
CentOS
在
♾️ bash 代码:/etc/nginx/conf.d/
目录下创建一个新的配置文件:sudo vim /etc/nginx/conf.d/www.xxx.com.conf
公共配置内容
在打开的文件中添加以下内容:
♾️ nginx 代码:server {
listen 80;
server_name www.xxx.com; # 设置域名
root /www/www.xxx.com; # 网站根目录
index index.html; # 默认首页文件
location / {
try_files $uri $uri/ =404; # 如果请求的文件不存在,返回404错误
}
}
保存文件并退出编辑器。
启用网站
Ubuntu
创建到 /etc/nginx/sites-enabled/
目录的软链接,以启用新网站:
sudo ln -s /etc/nginx/sites-available/www.xxx.com /etc/nginx/sites-enabled/
重新加载 Nginx 配置文件
♾️ bash 代码:sudo nginx -t
sudo systemctl reload nginx
使用 acme.sh 申请 SSL 证书
acme.sh 是一个简单的、开源的、支持多种验证方式的 SSL 证书申请和管理工具。它支持 Let's Encrypt、BuyPass、SSL.com 等多个证书颁发机构,可以自动完成证书的申请、续期和部署。
安装 acme.sh
♾️ bash 代码:curl https://get.acme.sh | sh
source ~/.bashrc
安装完成后,acme.sh 会被安装到 ~/.acme.sh/
目录。安装脚本会自动创建 alias 和 cronjob 以便定期检查和更新证书。
生成 SSL 证书
♾️ bash 代码:acme.sh --issue -d www.xxx.com --webroot /home/wwwroot/www.xxx.com/
配置 Nginx 使用 SSL 证书详细步骤
要在 Nginx 中配置 SSL 证书以启用 HTTPS 安全连接,您需要修改 Nginx 的配置文件。下面是一个详细的步骤,包括 SSL 配置的各个重要部分:
- 找到或创建 Nginx 配置文件:
通常,Nginx 的配置文件位于/etc/nginx/nginx.conf
或/etc/nginx/sites-available/
目录下的特定站点配置文件。您可能需要编辑一个现有的文件或创建一个新的文件来配置特定的域。 编辑配置文件以启用 HTTPS:
♾️ nginx 代码:
在配置文件中,您需要设置以下 SSL 相关的指令:server { listen 443 ssl; server_name www.xxx.com; # 替换为您的域名 # SSL 证书文件路径 ssl_certificate /path/to/fullchain.cer; # 指向您的证书全链文件 ssl_certificate_key /path/to/www.xxx.com.key; # 指向您的私钥文件 # 安全协议和加密套件配置 ssl_protocols TLSv1.2 TLSv1.3; # 指定支持的 TLS 版本 ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # 强加密套件 ssl_prefer_server_ciphers on; # 优先使用服务器的加密套件顺序 ssl_session_cache shared:SSL:10m; # 启用 SSL 会话缓存,提升性能 ssl_session_timeout 10m; # 会话超时时间 # 启用 HSTS (HTTP Strict Transport Security) add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 其他服务器配置... location / { root /path/to/webroot; # 网站根目录 index index.html index.htm; } }
HSTS (HTTP Strict Transport Security) 是一种安全机制,它要求浏览器只能通过 HTTPS 访问网站,即使用户输入 HTTP 地址或点击 HTTP 链接也会自动重定向到 HTTPS。这有助于防止中间人攻击和 SSL 剥离攻击。
重新加载 Nginx 配置:
♾️ bash 代码:
修改配置文件后,您需要重新加载 Nginx 以应用这些更改。您可以使用以下命令来重新加载 Nginx:sudo systemctl reload nginx
或者,如果您不使用 systemctl,可以使用:
♾️ bash 代码:sudo service nginx reload
- 测试 HTTPS 连接:
配置完成后,您应该通过浏览器访问https://www.xxx.com
来测试您的网站是否正确地使用 SSL 证书。您还可以使用工具如 SSL Labs' SSL Test 来评估您服务器的 SSL 配置安全性。
注意: 请务必妥善保管您的私钥文件 (www.xxx.com.key
),不要泄露给他人。私钥是用于解密 HTTPS 通信的关键,如果泄露,攻击者可能会截获和篡改您网站的加密通信。
确保您的 SSL 证书文件 (fullchain.cer
和 www.xxx.com.key
) 路径正确,并且 Nginx 用户有权访问这些文件。这些步骤将帮助您确保通过 HTTPS 提供安全、加密的网站访问。
acme.sh 命令详解
1. 安装 acme.sh
安装 acme.sh 最简单的方法是使用一键安装命令,同时需要提供一个邮箱地址用于接收证书快到期的提醒:
♾️ bash 代码:curl https://get.acme.sh | sh -s email=my@example.com
安装完成后,acme.sh 将被安装到 ~/.acme.sh/
目录。安装脚本会自动创建 alias 和 cronjob 以便定期检查和更新证书。
2. 生成证书
acme.sh 支持多种验证方式,包括 HTTP 和 DNS 验证。
2.1 HTTP 方式
这种方式需要您的网站可以通过 HTTP(S) 访问。acme.sh 会在网站根目录下创建一个隐藏文件夹 .well-known/acme-challenge/
,并放置验证文件。
如果网站根目录为 /home/wwwroot/mydomain.com/
,使用以下命令生成证书:
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
或者,如果使用 Apache 或 Nginx,acme.sh 可自动完成验证:
♾️ bash 代码:acme.sh --issue -d mydomain.com --apache
# 或者
acme.sh --issue -d mydomain.com --nginx
如果 80 端口未被占用,也可以使用 standalone 模式:
♾️ bash 代码:acme.sh --issue -d mydomain.com --standalone
2.2 DNS 方式
如果无法使用 HTTP 或需要泛域名证书,可以使用 DNS 方式。首先,配置 API Key 以允许 acme.sh 自动添加 TXT 记录。以 DNSPod 为例:
♾️ bash 代码:export DP_Id="your_id"
export DP_Key="your_token"
然后使用以下命令生成证书:
♾️ bash 代码:acme.sh --issue --dns dns_dp -d mydomain.com -d *.mydomain.com
3. 安装证书
查看证书信息:
♾️ bash 代码:acme.sh --list
安装证书到指定目录并设置重载命令:
♾️ bash 代码:acme.sh --install-cert -d mydomain.com \
--key-file /etc/nginx/ssl/mydomain.com.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
4. 更新证书
acme.sh 会自动更新快到期的证书。若需手动更新,可以使用:
♾️ bash 代码:acme.sh --renew -d mydomain.com
5. 更新 acme.sh
这一小节介绍如何将 acme.sh 更新到最新版本,以及如何启用自动更新。
更新 acme.sh 到最新版本:
♾️ bash 代码:acme.sh --upgrade
启用自动更新:
♾️ bash 代码:acme.sh --upgrade --auto-upgrade
6. 高级用法
这一小节介绍 acme.sh 的一些高级功能,如生成 ECC 证书、启用 OCSP Must Staple、IPv6 支持等。
acme.sh 支持多种高级功能,如 ECC 证书、OCSP Must Staple、IPv6 支持等。更多用法可通过 acme.sh --help
查看。
7. 调试错误
如果在使用 acme.sh 的过程中遇到问题,这一小节提供了一些调试和解决错误的方法。
如遇问题,可开启调试模式:
♾️ bash 代码:acme.sh --issue --debug -d mydomain.com
如果 DNS 方式验证超时,可能需要配置 HTTP(S) 代理:
♾️ bash 代码:export http_proxy="http://localhost:1080"
export https_proxy="http://localhost:1080"
然后重新执行命令。
常见问题
证书续期失败怎么办?
首先,检查您的网站是否可以正常访问,并确保 acme.sh 的验证方式配置正确。如果使用 DNS 验证,请检查 API 密钥是否有效,并且 DNS 记录是否正确添加。
如果问题仍然存在,您可以尝试删除旧的证书并重新生成:
♾️ bash 代码:acme.sh --remove -d mydomain.com acme.sh --issue -d mydomain.com --webroot /path/to/webroot
Nginx 配置文件错误导致无法启动怎么办?
如果 Nginx 因配置文件错误无法启动,您可以使用以下命令来检查配置文件的语法:
♾️ bash 代码:sudo nginx -t
该命令会输出配置文件的错误信息,根据提示修改错误的配置项即可。
如何撤销证书?
如果您的私钥泄露或证书不再需要,您应该及时撤销证书以防止被滥用。使用以下命令撤销证书:
♾️ bash 代码:acme.sh --revoke -d mydomain.com
然后,从您的 Web 服务器配置中移除证书和私钥文件,并重新加载服务器。