---
source: "https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/90617592-d847-4479-a0a9-bea730419761"
publicId: "90617592-d847-4479-a0a9-bea730419761"
---

# 静态文件访问失败

> 静态文件存储配置可以参数此文档：[静态文件存储配置](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/cbe2eff6-cacf-45b3-aea2-c3aafbda0ecd)

静态文件基本的使用原理是，E10应用服务上传静态文件，访问时通过nginx转发获取静态文件。一般出现问题的根本原因是，上传静态文件的位置和nginx访问静态文件的位置不一致，这里的不一致可能是路径不一样，可能是路径一样但是没有挂载同一个共享磁盘。

### 一、确认静态文件存储类心以及存储位置

#### **a. 10.0.2501.01基线及以上版本（包含10.0.2501.01）**

  图示中标记3就是当前静态文件的存储实例，根据此实例可以判断出存储类型，图示中标记4的位置就是静态文件此时的存储位置

![image.png](https://weapp.eteams.cn/api/file/preview?fileId=1149871648438804549&type=imgs)

#### **b. 10.0.2501.01基线以下版本（不包含10.0.2501.01）**

1. 组合环境

步骤：进入nacos → 进入eteams-storage-service.properties配置文件 → 查询到静态文件存储类型 → 查询到具体的存储位置

a. 查询静态文件存储类型

```bash
# 获取当前静态文件存储类型，可选值有：local,s3,tencent,huaweiyun,aliyun,hdfs,fastdfs (分别表示本地存储、s3协议对象存储、腾讯云存储、华为云存储、阿里云存储、hdfs,fastdfs)
# storage.static优先级大于storage.server，当storage.static未配置时，才会按照storage.server生效
storage.static=

storage.server=

# 示例1,表示静态资源存储到本地
storage.static=local
storage.server=tencent

# 示例2,表示静态资源存储到腾讯云存储
storage.server=tencent
```

b. 查询具体的静态文件存储位置

```bash
# 根据 a. 查询静态文件存储类型 得到的静态文件存储类型，记录具体静态文件存储位置的配置项各不一样
# 当静态文件存储类型等于local时,local.static.i18n优先级最高，未配置时，按照local.rootPath生效
# 此处配置的是绝对路径
local.static.i18n=
local.rootPath=

# 当静态文件存储类型等于tencent
# 此处配置的是静态资源桶名
tencent.static.i18n=

# 当静态文件存储类型等于s3
# 此处配置的是静态资源桶名
s3.static.i18n=

# 当静态文件存储类型等于huaweiyun
# 此处配置的是静态资源桶名
huaweiyun.static.i18n=

# 当静态文件存储类型等于aliyun
# 此处配置的是静态资源桶名
aliyun.static.i18n=

# 当静态文件存储类型等于fastdfs
# 此处配置的是路径
fastdfs.static.i18n=
```

2. 单体环境

步骤：通过ssh进入E10应用所在的服务器→ 进入eteams-storage-service.properties配置文件 → 查询到静态文件存储类型 → 查询到具体的存储位置

a. 配置文件路径：${E10应用根目录}/webapps/ROOT/WEB-INF/classes/weaver/config/config-center/**eteams-storage-service.properties**

b. 查询${E10应用根目录}，查询方式可以参数这篇文档[调整文件服务配置项](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/de3d8fe6-74fd-4a91-bbdf-a7d5ae72af75)的这个章节【一、新增/修改配置项步骤  2.单体环境】

c. 查询静态文件相关配置，同上

### 二、确认静态文件nginx转发配置

1. 确定nginx所在服务器

oa系统内网访问地址就是nginx所在的服务器，如果是nginx集群需要到泛微运维平台-服务启停-周边服务中查看nginx所有节点

2. 确定nginx静态文件转发配置内容是否正确

a. nginx是docker部署的

```bash
# 查询nginx所在的容器
docker ps -a | grep front
f
# 进入nginx所在容器
docker exec -it ${nginx容器ID} sh

# 进入到conf.d文件夹
cd conf.d

# 分别执行以下查询，查看配置信息是否正确
grep -A 2 -r 'location /ecodestatic'
grep -A 2 -r 'location /static/public/resource/i18n'
grep -A 2 -r 'location /visitstatic'
grep -A 2 -r 'location /api/file/visitstatic'
```

b. nginx是k8s部署的（正在补充中）

```bash
kubectl get pods | grep front
```

c. nginx是直接部署在服务器上的

```bash
ps -ef | grep nginx
```

### 三、排查示例

#### 1. ecode自检页面提示页面解析请求异常

![image.png](https://weapp.eteams.cn/api/file/preview?fileId=1273352688482140162&type=imgs)

![image.png](https://weapp.eteams.cn/api/file/preview?fileId=1154611922186420371&type=imgs)

问题根本原因分析：静态文件访问不到导致的

排查步骤：

a. （**仅限本地存储**）根据本文档的**【一、确认静态文件上传存储位置】**章节**，**确认当前系统静态文件的上传存储位置，在后续c部分的指令中会用到这个路径

b. **（仅限本地存储）**可以进入OA运维平台，确认E10应用服务器和nginx所在的服务器，分别进入服务器查看/nfs/data的共享磁盘是否挂载正常，检测方式就是在E10应用服务器的/nfs/data手动创建一个文本，然后到nginx所在服务器的/nfs/data下查看是否有此文本

c. **（仅限本地存储）**nginx服务器中检测nginx的docker路径映射是否正常，检测步骤：

```bash
# 1. 获取nginx docker的容器ID替换第二步中的占位符${容器ID}
docker ps -a | grep front | grep -v grep | awk '{print $1}'

# 2. 查看存储路径映射,输出结果是以冒号隔开的这种样式：${宿主机路径}:${容器内路径}，确认好左侧的宿主机路径是不是共享磁盘路径
# 将包括花括号在内的整个${容器ID}替换为1中获取到的容器ID
docker inspect ${容器ID} | grep '/nfs/data'

# 3. 如果第2步映射是对的，则进入容器内查看容器内路径下是否有 b.中手动创建的文本
# 将包括花括号在内的整个${容器ID}替换为1中获取到的容器ID
docker exec -it ${容器ID} sh
cd ${/容器内路径}

# 4. 如果3中没有查看到文件，则直接重启nginx docker，重启中系统会短暂不可访问，切记！
# 将包括花括号在内的整个${容器ID}替换为1中获取到的容器ID
docker restart ${容器ID}
```

d. 确认nginx配置文件是否正确

```bash
# 1. 获取nginx docker的容器ID替换第二步中的占位符${容器ID}
docker ps -a | grep front | grep -v grep | awk '{print $1}'

# 2. 查看存储路径映射,输出结果是以冒号隔开的这种样式：${宿主机配置文件conf.d文件夹路径}:${容器内配置文件conf.d文件夹路径}
# 将包括花括号在内的整个${容器ID}替换为1中获取到的容器ID
docker inspect ${容器ID} | grep '/conf.d'

# 3. 进入宿主机nginx配置文件conf.d文件夹下
# 将包括花括号在内的整个${宿主机配置文件conf.d文件夹路径}替换为2中获取到的路径
cd ${宿主机配置文件conf.d文件夹路径}

# 4. 分别执行以下查询，查看配置信息是否正确
grep -A 2 -r 'location /ecodestatic'
grep -A 2 -r 'location /static/public/resource/i18n'
grep -A 2 -r 'location /visitstatic'
grep -A 2 -r 'location /api/file/visitstatic'

# 5. 如果配置文件有问题做了调整后，需要重启nginx容器
# 将包括花括号在内的整个${容器ID}替换为1中获取到的容器ID
docker restart ${容器ID}
```
