ssl虚拟主机安装sg11扩展
- 虚拟主机
- 2025-08-22
- 5
宝塔面板的软件商店搜索“sg11”,按提示上传、解压并安装拓展文件,完成后重启服务器即可,注意SG11为组件加密,部分虚拟主机可能不适用。
前置条件确认
检查项 | 要求 | 备注 |
---|---|---|
PHP版本兼容性 | 确保服务器已安装PHP 7.2及以上版本(推荐使用官方稳定版) | 可通过php -v 命令验证 |
Zend Guard Loader支持 | 虚拟主机环境需启用Zend Guard Loader组件(部分面板默认关闭) | cPanel/DirectAdmin中开启 |
源码获取途径 | 从SourceGuardian官网下载对应系统的SG11扩展包(分Linux/Windows版本) | https://www.sourceguardian.com/download.php |
备份策略 | 操作前完整备份现有网站文件、数据库及配置文件 | 防止回滚失败导致数据丢失 |
安装步骤详解
Linux系统(以CentOS为例)
-
上传扩展文件
将下载的ixed.<版本号>.lin
(如ixed.7.4.lin
)、loader.so
及相关配置文件通过FTP/SCP上传至服务器目录(建议放在/usr/local/src/
)。# 示例:创建专用存储路径并移动文件 mkdir -p /usr/local/src/sg11 && mv ixed.7.4.lin loader.so /usr/local/src/sg11/
-
修改PHP配置文件(php.ini)
添加以下两行到全局或用户级php.ini
中:zend_extension="/usr/local/src/sg11/loader.so" zend_loader_file="/usr/local/src/sg11/ixed.7.4.lin"
️ 注意路径需与实际存放位置一致,可先测试路径有效性:
/path/to/php -d zend_extension=...
。 -
重启Web服务生效配置
根据使用的Web服务器类型执行对应命令:- Apache:
systemctl restart httpd
或service httpd restart
- Nginx+PHP-FPM:
systemctl restart php-fpm
- 验证加载状态:
php -m | grep sourceguardian
应显示SourceGuardian
模块已启用。
- Apache:
Windows系统
-
放置DLL文件
将下载的php_sg11.dll
复制到PHP安装目录下的ext
文件夹(如C:Program FilesPHP74ext
)。 -
编辑
php.ini
启用扩展
取消注释或新增以下行:extension=php_sg11.dll zend_loader_file="C:Program FilesPHP74extixed.7.4.win"
▶️ 提示:若报错“无法找到指定模块”,检查DLL是否匹配当前PHP架构(x86/x64)。
-
重启IIS/Apache服务
通过“服务”管理器重启对应服务,或命令行执行:iisreset /restart # IIS用户 httpd -k restart # Apache用户
SSL证书关联配置(关键!)
由于SG11依赖加密授权机制,必须确保每个站点独立绑定有效的license.key
文件:
- 为每个虚拟主机创建专属目录(如
/var/www/vhosts/domain.com/sg11/
),存放该域名对应的license.key
; - 在网站入口文件(如
index.php
)头部添加初始化代码:<?php // 指向当前站点的授权密钥路径 sg11_set_key_file('/var/www/vhosts/domain.com/sg11/license.key'); ?>
- 测试加密功能是否正常:访问被保护的页面,观察是否弹出SourceGuardian授权对话框。
常见问题排查指南
现象 | 可能原因 | 解决方案 |
---|---|---|
“Call to undefined function”错误 | 未正确加载SG11模块 | 检查php.ini 路径是否正确,重启服务后再次验证模块加载状态 |
授权对话框不显示 | license.key路径配置错误 | 确认绝对路径存在且权限可读(建议设置为644) |
HTTPS环境下混合内容阻止 | 旧版SG11不支持TLS 1.3+ | 升级至最新SG11版本(≥11.0.3),并更新PHP至8.0+ |
相关问题与解答
Q1: 为什么安装SG11后部分加密功能失效?
A: 最常见原因是未为每个虚拟主机单独配置license.key
文件,SG11采用站点级授权机制,必须确保每个域名都有独立的密钥文件,并在代码中通过sg11_set_key_file()
指定路径,检查PHP错误日志是否存在“Invalid license key”提示。
Q2: SSL环境下如何避免SG11导致的混合内容警告?
A: 需同时满足两个条件:①使用最新版本的SG11(支持TLS 1.3);②确保所有资源(包括授权验证请求)均通过HTTPS协议加载,可在php.ini
中强制启用SSL验证:sg11.force_ssl=On
,并重定向所有HTTP