Browse Source

修复缺少安装包的问题

feature/web_v4.0
hyh 3 weeks ago
parent
commit
fef3e6aa4c
  1. 97
      modify.md
  2. 8
      site/Dockerfile
  3. 3
      site/package.json

97
modify.md

@ -1,3 +1,100 @@
## 2025-01-XX - 修复 Next.js standalone 模式 sharp 缺失错误
### 修复内容
- **添加 sharp 依赖** (`site/package.json`):
- 在 dependencies 中添加 `sharp: "^0.33.0"`
- sharp 是 Next.js 图片优化功能所需的原生模块
- **更新 Dockerfile** (`site/Dockerfile`):
- 在 runner 阶段安装必要的系统依赖:`libc6-compat` 和 `vips-dev`
- 复制 package.json 到 runner 阶段
- 安装 sharp 包:`npm install sharp@^0.33.0 --production`
- 确保 standalone 模式下 sharp 可用
### 修改的文件
- `site/package.json` - 添加 sharp 依赖
- `site/Dockerfile` - 在 runner 阶段安装 sharp 和系统依赖
### 问题原因
Next.js 在 standalone 模式下不会自动包含 sharp 包,而 sharp 是图片优化功能(Image Optimization API)的必需依赖。当使用 Next.js Image 组件时,需要 sharp 来处理图片优化。
### 使用说明
1. **重新构建 Docker 镜像**
```bash
docker-compose -f docker-compose-https.yml build --no-cache
```
2. **重启服务**
```bash
docker-compose -f docker-compose-https.yml up -d
```
3. **验证修复**
- 检查容器日志,确认不再出现 sharp 缺失错误
- 访问网站,确认图片正常加载和优化
变更原因:用户遇到 Next.js standalone 模式下 sharp 缺失错误,导致图片优化功能无法正常工作。通过添加 sharp 依赖并在 Dockerfile 中正确安装,修复了此问题。
## 2025-01-XX - 修复 Firefox 和移动设备访问问题:优化 SSL 配置兼容性
### 修复内容
- **优化 Nginx SSL 配置以支持 Firefox 和移动设备** (`site/nginx/nginx.conf`):
- **禁用 OCSP Stapling**
- 将 `ssl_stapling``on` 改为 `off`
- 将 `ssl_stapling_verify``on` 改为 `off`
- 注释掉 `resolver``resolver_timeout` 配置
- **原因**:如果证书链不完整,OCSP Stapling 可能导致 Firefox 和移动设备无法验证证书,从而拒绝连接
- **扩展 SSL 密码套件兼容性**
- 添加更多兼容移动设备和旧版浏览器的密码套件
- 包括:`ECDHE-ECDSA-AES128-SHA256`、`ECDHE-RSA-AES128-SHA256`、`ECDHE-ECDSA-AES128-SHA`、`ECDHE-RSA-AES128-SHA` 等
- 排除不安全的密码套件:`!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA`
- **原因**:移动设备和某些浏览器可能需要更广泛的密码套件支持
- **添加移动设备优化配置**
- 添加 `Vary "Accept-Encoding"` 响应头,确保移动设备正确解析内容类型
- 保持 HTTP/2 支持(`http2 on`)
### 修改的文件
- `site/nginx/nginx.conf` - 优化 SSL 配置,禁用 OCSP Stapling,扩展密码套件兼容性
### 使用说明
1. **重启 Nginx 容器以应用配置**
```bash
docker-compose -f docker-compose-https.yml restart nginx
```
2. **验证配置**
- 在 Firefox 浏览器中访问网站,确认可以正常连接
- 在移动设备(手机)上访问网站,确认可以正常访问
- 使用 SSL Labs 测试工具验证 SSL 配置:https://www.ssllabs.com/ssltest/
3. **如果问题仍然存在**
- 检查证书链是否完整(证书文件应包含中间证书)
- 如果证书链不完整,需要合并证书链:
```bash
cat /home/owen/ssl_key/smartsensiguard.cn.pem /home/owen/ssl_key/chain.pem > /home/owen/ssl_key/smartsensiguard.cn-fullchain.pem
```
- 然后更新 `docker-compose-https.yml` 中的证书路径为完整证书链文件
### 问题原因分析
- **Firefox 浏览器无法访问**
- Firefox 对 SSL 证书验证更严格
- 如果 OCSP Stapling 配置不当或证书链不完整,Firefox 会拒绝连接
- 禁用 OCSP Stapling 可以避免此问题(如果证书链不完整)
- **移动设备无法访问**
- 移动设备可能使用较旧的 SSL/TLS 实现
- 需要更广泛的密码套件支持
- 某些移动浏览器对 OCSP Stapling 的支持可能不完善
### 后续优化建议
如果证书链完整,可以重新启用 OCSP Stapling 以提升性能:
1. 确保证书文件包含完整的证书链(包括中间证书)
2. 将 `ssl_stapling` 改回 `on`
3. 将 `ssl_stapling_verify` 改回 `on`
4. 取消注释 `resolver` 配置
变更原因:用户反馈浏览器访问正常(除 Firefox),但手机无法访问。通过禁用 OCSP Stapling 和扩展密码套件兼容性,解决 Firefox 和移动设备的访问问题。
## 2025-01-XX - 修复 SSL 连接错误:优化 Nginx SSL 配置并添加诊断工具 ## 2025-01-XX - 修复 SSL 连接错误:优化 Nginx SSL 配置并添加诊断工具
### 修复内容 ### 修复内容

8
site/Dockerfile

@ -28,6 +28,14 @@ ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs RUN adduser --system --uid 1001 nextjs
# 安装 sharp(Next.js standalone 模式需要)
# 安装必要的系统依赖
RUN apk add --no-cache libc6-compat vips-dev
# 复制 package.json 以安装 sharp
COPY --from=builder /app/package.json ./package.json
# 安装 sharp(使用 npm,因为 alpine 镜像默认包含 npm)
RUN npm install sharp@^0.33.0 --production
# 复制必要文件 # 复制必要文件
COPY --from=builder /app/public ./public COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./

3
site/package.json

@ -11,7 +11,8 @@
"dependencies": { "dependencies": {
"next": "14.2.5", "next": "14.2.5",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0",
"sharp": "^0.33.0"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/aspect-ratio": "0.4.2", "@tailwindcss/aspect-ratio": "0.4.2",

Loading…
Cancel
Save