家用住宅主机Linux Nginx
如果你家里有一台运行Linux的主机挂了Nginx,想让自己做的小网站或NAS能被过去的老平板、老电脑甚至IE6正常访问,却遇到SSL协议不兼容的拦截问题,这篇文章就是为你准备的。
这里不讲安全专家那一套,只讲怎么让老设备能连上、能显示。
动手修复前需要确认的几件事
- 确保Linux主机上已经装了Nginx,并且能正常启动。可用
systemctl status nginx或nginx -t检查。 - 已有SSL证书(自己签发的自签名证书也行,浏览器会报不安全,但不会拦截)。如果没有,先执行下面命令生成一个:
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/self.key \
-out /etc/nginx/ssl/self.crt \
-subj "/CN=你的域名或IP"
- 知道Nginx的主配置文件位置(通常
/etc/nginx/nginx.conf或/etc/nginx/sites-available/default)。
找到并修改SSL配置段落
用sudo nano或vi打开你的Nginx站点配置文件,找到监听443的server块。
里面对应的ssl配置大致像这样:
server {
listen 443 ssl;
server_name 你的域名或IP;
ssl_certificate /etc/nginx/ssl/self.crt;
ssl_certificate_key /etc/nginx/ssl/self.key;
...
}
如果这段里没有 ssl_protocols 和 ssl_ciphers,就需要手动加上。
调整TLS协议和密码套件
为了让老旧浏览器能连上,需要开启TLSv1.0和TLSv1.1(默认Nginx新版本只开TLSv1.2和1.3)。
同时密码套件要包含旧设备能识别的算法。
在server块内增加:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5:!DH:!EDH:!EXP:MEDIUM;
这里的 HIGH:MEDIUM 是强度范围,!等排除不安全项。
aNULL
如果你需要兼容更古老的IE6或Java 5,可以把 ssl_ciphers 换成更宽松的:
ssl_ciphers ALL:!aNULL:!MD5:!DH:!EDH:!EXP:!LOW:
注意:放宽cipher会降低安全性,只建议在内网或短期使用。
保存配置并重启Nginx
修改后先测试配置语法是否正确:
sudo nginx -t
如果显示 syntax is ok 和 test is successful,再安全重启:
sudo systemctl reload nginx
常见问题与避坑提醒
- 防火墙拦截:确保443端口在Linux防火墙(ufw或firewalld)和家用路由器上已放行。
- 自签名证书被拦截:老旧浏览器可能直接弹出“证书错误”,需要手动添加例外或接受风险,这不是本文能解决的,但页面内容可以正常加载。
- Nginx版本过低:如果
nginx -v显示小于1.9.1,不支持TLSv1.3,去掉即可。 - 密码套件顺序:某些老设备不支持ECDHE,如果连接失败,把
ssl_ciphers改回宽松的ALL:!aNULL试试。 - 重启后服务不上:检查日志
tail -f /var/log/nginx/error.log,通常是有语法错误或证书路径不对。
验证老浏览器能否正常访问
用旧手机或老电脑打开你的网站(https://你的域名或IP),如果不再显示“无法建立安全连接”或“SSL协议错误”,就说明修复成功了。
也可以在线用SSL Labs测试(但老设备无法测试,还是直接实操最准)。
如果你在配置过程中遇到奇怪的报错,先回到“常见问题”部分对照排查。
等所有老设备都能正常显示页面后,再考虑是否要适当收紧密码套件以提升安全性。