在OJS网站使用Certbot安装SSL证书时遭遇HTTP-01挑战失败
解决OJS站点HTTP-01挑战失败的问题
核心问题分析
HTTP-01挑战要求Let's Encrypt验证服务器能通过80端口访问你的域名(journal.iba-suk.edu.pk)下的/.well-known/acme-challenge/路径。你的OJS运行在8089端口,默认Apache配置大概率没正确处理80端口的验证请求转发或文件访问权限。
分步解决方法
1. 确认80端口正常对外服务
- 执行
netstat -tulpn | grep :80,检查Apache是否在监听80端口。如果无监听记录,修改Apache默认虚拟主机配置(通常在/etc/apache2/sites-available/000-default.conf),确保<VirtualHost *:80>块存在,之后重启Apache:sudo systemctl restart apache2。 - 检查服务器外网入口(比如云服务商安全组)是否开放80端口,部分云平台安全组默认会限制80/443端口,需手动放行。
2. 配置Apache反向代理与验证路径放行
因为OJS在8089端口,需要让Apache在80端口优先处理验证请求,再将其他请求转发到8089:
- 编辑OJS站点的Apache配置文件(例如
/etc/apache2/sites-available/journal.iba-suk.edu.pk.conf),添加或修改80端口虚拟主机:
<VirtualHost *:80> ServerName journal.iba-suk.edu.pk # 优先处理acme挑战路径 Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/ <Directory /var/www/html/.well-known/acme-challenge/> Require all granted </Directory> # 其余请求反向代理到OJS的8089端口 ProxyPass / http://localhost:8089/ ProxyPassReverse / http://localhost:8089/ </VirtualHost>
- 启用必要的Apache模块:
sudo a2enmod proxy proxy_http rewrite sudo systemctl restart apache2
- 手动测试验证路径可访问性:
sudo mkdir -p /var/www/html/.well-known/acme-challenge/ sudo echo "test-content" > /var/www/html/.well-known/acme-challenge/test-file
在浏览器访问http://journal.iba-suk.edu.pk/.well-known/acme-challenge/test-file,能看到test-content则说明路径配置正常。
3. 重新执行Certbot命令
完成上述配置后,重新运行:
sudo certbot --apache
Certbot会自动识别80端口配置,完成验证后生成证书,并自动配置443端口的SSL虚拟主机。
4. 验证SSL配置有效性
证书安装完成后重启Apache:
sudo systemctl restart apache2
访问https://journal.iba-suk.edu.pk确认SSL正常工作,也可通过curl -v https://journal.iba-suk.edu.pk检查证书详情。
内容的提问来源于stack exchange,提问作者Ahmed Syed
相关产品推荐
相关产品推荐

