前言
为网站启用 SSL/TLS 证书是保障数据传输安全的重要步骤。Namecheap 等域名注册商有时会提供免费的 SSL 证书。本文将介绍如何在 Nginx 服务器上配置使用此类证书。
请注意,启用 SSL 会略微增加服务器的 CPU 和内存开销,但对于现代服务器而言,这点开销通常是可接受的。
第一部分:申请证书
以下步骤需要在你的服务器上通过 SSH 执行。请将示例中的域名 xiaohost.com 替换为你自己的域名。
1. 生成私钥和 CSR 文件
首先,进入 Nginx 配置目录(路径可能因安装方式而异):
cd /usr/local/nginx/conf/
生成一个 2048 位的 RSA 私钥文件:
openssl genrsa -out xiaohost.pem 2048
成功后会显示类似以下信息:
Generating RSA private key, 2048 bit long modulus
.....+++
.+++
e is 65537 (0x10001)
接着,使用此私钥生成证书签名请求(CSR)文件:
openssl req -new -key xiaohost.pem -out xiaohost.csr
根据提示填写信息。以下是一个示例,请根据你的实际情况修改:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:SiChuan
Locality Name (eg, city) []:ChengDu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Xiao Host
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:youquso.com
Email Address []:admin@youquso.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
重要提示:Common Name 必须填写你要申请证书的准确域名(例如 blog.youquso.com)。www.blog.youquso.com 和 blog.youquso.com 被视为两个不同的域名,如果需要同时覆盖,通常需要在后续步骤中选择多域名证书或在申请时指定。
2. 提交 CSR 到 Namecheap
查看并复制 CSR 文件内容:
cat xiaohost.csr
输出内容以 -----BEGIN CERTIFICATE REQUEST----- 开头,以 -----END CERTIFICATE REQUEST----- 结尾。请复制这之间的全部内容(包括首尾两行)。
登录 Namecheap 后台,找到 SSL 证书管理页面,激活你的免费 SSL 证书。在提交 CSR 时,由于可能没有直接的“Nginx”选项,请在下拉菜单中选择“Other”。将复制的 CSR 内容粘贴到指定区域。
选择用于验证的邮箱(建议使用域名 WHOIS 信息中的邮箱),然后按照流程操作。你的邮箱会收到一封验证邮件,点击其中的链接完成域名所有权验证。
验证通过后,通常几分钟到几小时内,你就会收到来自证书颁发机构(如 Comodo/Sectigo)的邮件,其中包含你的数字证书文件。
第二部分:配置 Nginx 使用证书
1. 准备证书文件
下载邮件附件中的证书压缩包(例如 xiaohost_com.zip),上传到服务器的 /usr/local/nginx/conf/ 目录并解压。
通常,你需要将中间证书(CA Bundle)追加到你的主证书文件中。假设你的主证书文件是 xiaohost_com.crt,中间证书文件是 PositiveSSLCA.crt,则执行:
cat PositiveSSLCA.crt >> xiaohost_com.crt
这个命令将中间证书内容追加到主证书文件末尾。请确保你使用的是正确的文件名。
2. 修改 Nginx 配置文件
编辑你的 Nginx 虚拟主机配置文件(例如 nginx.conf 或 sites-available/your-site)。以下是一个配置示例,展示了如何为站点启用 SSL:
server {
listen 80;
listen 443 ssl; # 现代 Nginx 推荐写法,同时监听 80 和 443 端口
server_name www.blog.youquso.com;
# SSL 配置
ssl_certificate /usr/local/nginx/conf/xiaohost_com.crt;
ssl_certificate_key /usr/local/nginx/conf/xiaohost.pem;
# 可选:提高安全性,启用更严格的 SSL 协议和加密套件
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
root /home/wwwroot/youquso.com/;
index index.html index.htm index.php;
# 将 HTTP 请求重定向到 HTTPS(可选但推荐)
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param HTTPS $https if_not_empty; # 更通用的传递 HTTPS 状态的方式
include fastcgi_params; # 通常是 fcgi.conf 或 fastcgi_params
}
# 其他 location 块(静态文件缓存等)...
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
access_log /home/wwwlogs/blog.youquso.com.log;
}
# 可选:将裸域名重定向到带 www 的 HTTPS 地址
server {
listen 80;
server_name youquso.com;
return 301 https://www.blog.youquso.com$request_uri;
}
配置说明与更新:
- 监听端口:现代 Nginx 版本推荐使用
listen 443 ssl;替代旧的ssl on;指令。示例中同时监听了 80 和 443 端口。 - 证书路径:
ssl_certificate和ssl_certificate_key指令需要指向你实际的证书文件和私钥文件绝对路径。 - HTTP 重定向:示例中添加了将 HTTP 请求自动重定向到 HTTPS 的规则,这是安全最佳实践。
- PHP FastCGI 参数:
fastcgi_param HTTPS $https if_not_empty;是更可靠地告知 PHP 应用当前连接使用 HTTPS 的方法。 - 请根据你的实际目录结构、域名和 PHP 处理配置修改上述示例。
3. 测试并重启 Nginx
在保存配置文件后,务必先测试配置语法是否正确:
/usr/local/nginx/sbin/nginx -t
如果输出显示“syntax is ok”和“test is successful”,则说明配置无误。
然后,平滑重启 Nginx 以使配置生效:
/usr/local/nginx/sbin/nginx -s reload
或者使用你系统对应的服务管理命令,例如:
systemctl reload nginx
原文中使用的 kill -HUP 方式也是可行的,但使用 Nginx 自带的 -s reload 信号或系统服务命令是更标准的方法。
总结
完成以上步骤后,你的网站应该已经可以通过 HTTPS 安全访问了。你可以使用在线工具(如 SSL Labs 的 SSL Server Test)来检测你的 SSL 配置是否安全、完整。
请注意,本文基于较旧的流程进行了更新和修正。Namecheap 的后台界面和证书颁发流程可能随时间变化,但核心步骤(生成 CSR、提交验证、配置 Nginx)是通用的。务必保管好你的私钥文件(.pem),切勿泄露。
看不懂,只能支持下博主了
这个是配置SSL的
马克一下