关于Discuz社区部署SSL后上传头像失败的问题,以下是详细解决方案(请按步骤排查):
1. 核心配置检查
修改config/config_global.php:
- $_G['siteurl'] = 'https://您的域名/';
复制代码
同时检查uc_server/data/config.inc.php:
- define('UC_API', 'https://您的域名/uc_server');
复制代码
2. 协议强制设置
在.htaccess增加(Apache):
- SetEnvIf X-Forwarded-Proto "https" HTTPS=on
- Header always set Content-Security-Policy "upgrade-insecure-requests"
复制代码
3. 跨域策略修正
在网站根目录创建crossdomain.xml:
- <?xml version="1.0"?>
- <cross-domain-policy>
- <allow-access-from domain="*.您的域名" secure="true"/>
- <allow-http-request-headers-from domain="*.您的域名" headers="*" secure="true"/>
- </cross-domain-policy>
复制代码
4. Nginx特殊配置(如使用):
- location ~* ^/(uc_server|data|static)/.*\.(php|js|css|swf)$ {
- add_header Access-Control-Allow-Origin https://您的域名;
- add_header Access-Control-Allow-Credentials true;
- }
复制代码
5. Flash上传兼容方案
修改uc_server/avatar.php约第34行:
- $allowflash = !$_G['cookie']['avoidflash'] && $_G['setting']['flashupload'] && (clientcheck('win', $_SERVER['HTTP_USER_AGENT']) || clientcheck('mac', $_SERVER['HTTP_USER_AGENT'])) ? 1 : 0;
复制代码
改为:
- $allowflash = 0; //强制禁用Flash上传
复制代码
6. 证书链检测
使用OpenSSL命令验证:
- openssl s_client -connect 您的域名:443 -showcerts | grep -i "verify"
复制代码
应返回"Verify return code: 0 (ok)"
7. 会话安全设置
修改php.ini:
- session.cookie_secure = On
- session.cookie_samesite = None
复制代码
8. 文件权限修正
执行:
- chown -R www-data:www-data uc_server/data/tmp/
- chmod 755 uc_server/data/tmp/ -R
复制代码
建议同时检查:
- 服务器防火墙是否放行843端口(Flash策略端口)
- 是否配置HSTS头部
- 上传目录的realpath缓存是否残留http路径(可重启php-fpm)
若仍存在问题,请提供:
1. 浏览器控制台具体错误截图
2. 上传请求的curl -v输出
3. phpinfo()中的openssl模块信息
我们会根据反馈进一步分析具体原因。建议同时关注DZ插件网的技术文档板块获取更多SSL配置案例。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |