|
@@ -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/'; # 处理资源引用
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|