john.hong 2 months ago
commit
717decbf08
4 changed files with 166 additions and 0 deletions
  1. 3 0
      .gitignore
  2. 18 0
      docker-compose.yml
  3. 66 0
      nginx.conf
  4. 79 0
      操作说明/2025-05-23.md

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+v2.cn.vuejs.org/
+element/
+element2/

+ 18 - 0
docker-compose.yml

@@ -0,0 +1,18 @@
+version: '3.8'
+
+services:
+  nginx:
+    container_name: my_nginx
+    image: nginx:1.25-alpine
+    ports:
+      - "${NGINX_PORT:-8877}:80"
+    volumes:
+      - ./nginx.conf:/etc/nginx/nginx.conf:ro
+      - ./element:/usr/share/nginx/html/element2:ro
+      - ./v2.cn.vuejs.org:/usr/share/nginx/html/v2.cn.vuejs.org:ro
+    restart: always
+    healthcheck:
+      test: ["CMD", "curl", "-f", "http://localhost"]
+      interval: 30s
+      timeout: 10s
+      retries: 3

+ 66 - 0
nginx.conf

@@ -0,0 +1,66 @@
+worker_processes  1;
+
+events {
+    worker_connections  1024;
+}
+
+http {
+    include       /etc/nginx/mime.types;
+    default_type  application/octet-stream;
+
+    sendfile        on;
+    keepalive_timeout  65;
+
+    server {
+        listen 80;
+
+        # Element2 子站
+        location /element2 {
+            alias /usr/share/nginx/html/element2/;
+            index  index.html index.htm;
+            try_files $uri $uri/ /element2/index.html;
+            # 动态替换 HTML 中的绝对路径
+            sub_filter '="/js/' '="/element2/js/';
+            # sub_filter '="/versions.json' '="/element2/versions.json';
+            sub_filter '/versions.json' '/element2/versions.json';
+            sub_filter '="/css/' '="/element2/css/';
+            sub_filter '="/images/' '="/element2/images/';
+            sub_filter 'href="/'  'href="/element2/';  # 处理超链接
+            # sub_filter 'src="/'   'src="/element2/';   # 处理资源引用
+            sub_filter_once off;
+            sub_filter_types text/html;
+        }
+        # Element2 子站
+        location = /versions.json {
+            if ($http_referer !~ "/element2/?") {
+                return 404;
+            }
+            alias /usr/share/nginx/html/element2/versions.json;
+        }
+
+        # Vue2 子站
+        location /vue2 {
+            # 精确配置别名路径(结尾必须带斜杠)
+            alias /usr/share/nginx/html/v2.cn.vuejs.org/;
+            
+            # # 路径优先级校验
+            # if ($request_uri !~ "^/vue2(/|$)") {
+            #     return 403;
+            # }
+
+            # 多维度路径重写保障
+            index index.html;
+            try_files $uri $uri/ /vue2/index.html;
+
+            # 深度路径替换策略(覆盖所有常见静态资源)
+            sub_filter_once off;
+            sub_filter_types text/html text/css application/javascript;
+            sub_filter '="/js/'  '="/vue2/js/';
+            sub_filter '="/css/' '="/vue2/css/';
+            sub_filter '="/img/' '="/vue2/img/';
+            sub_filter '="/fonts/' '="/vue2/fonts/';
+            sub_filter 'href="/'  'href="/vue2/';  # 处理超链接
+            sub_filter 'src="/'   'src="/vue2/';   # 处理资源引用
+        }
+    }
+}

+ 79 - 0
操作说明/2025-05-23.md

@@ -0,0 +1,79 @@
+你的操作很标准,以下是详细解读与建议:
+
+---
+
+### 你执行了:
+
+```bash
+docker-compose restart
+```
+
+**结果:**
+- docker-compose 自动重启了你的 nginx 容器(`my_nginx`)。
+- 配置(如 nginx.conf)如果在本地已修改过,会自动同步进容器,nginx 也会以新配置启动。
+- 你看到的 WARN 提示:
+  ```
+  the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
+  ```
+  这只是 docker compose 的提醒:`version` 字段已不再需要,可以放心删掉,对实际运行没有影响。
+
+---
+
+### 推荐操作流程(再次确认)
+
+1. **修改配置文件**(本地编辑挂载到容器的配置,如 nginx.conf)
+2. **重启服务**
+   ```bash
+   docker-compose restart
+   ```
+   或者只重启 nginx 服务:
+   ```bash
+   docker-compose restart nginx
+   ```
+3. **查看日志和状态**
+   ```bash
+   docker-compose logs -f nginx
+   ```
+   或
+   ```bash
+   docker logs my_nginx
+   ```
+4. **验证服务是否生效**
+
+---
+
+### 进阶做法
+
+如果你希望**不中断服务**,可以用 nginx 的 reload 功能:
+
+```bash
+docker exec my_nginx nginx -t   # 检查配置
+docker exec my_nginx nginx -s reload
+```
+这样 nginx 会重新加载配置,而不会完全重启容器,适合生产环境。
+
+---
+
+### 关于 `version` 警告
+
+- docker compose v2 已不需要 `version` 字段,可以直接删掉
+- 你的 `docker-compose.yml` 开头可以直接是:
+
+  ```yaml
+  services:
+    nginx:
+      ...
+  ```
+
+不会影响功能。
+
+---
+
+## 总结
+
+- 你的操作正确,服务已自动应用新配置
+- `version` 字段警告忽略即可,建议删除
+- 推荐用 `nginx -t` 检查配置语法,再 reload
+- 验证服务,确保配置生效
+
+有其他 docker/nginx 相关问题欢迎继续提问!