diff --git a/deploy/nginx/genarrative-preview-deployer-lan.conf b/deploy/nginx/genarrative-preview-deployer-lan.conf index 82e698937..01cfb6817 100644 --- a/deploy/nginx/genarrative-preview-deployer-lan.conf +++ b/deploy/nginx/genarrative-preview-deployer-lan.conf @@ -3,7 +3,7 @@ location = /build { } location ^~ /build/ { - proxy_pass http://127.0.0.1:8410/; + proxy_pass http://127.0.0.1:8410; proxy_http_version 1.1; proxy_set_header Host $host; diff --git a/scripts/check-preview-deployer.mjs b/scripts/check-preview-deployer.mjs index 603956cb4..230052052 100644 --- a/scripts/check-preview-deployer.mjs +++ b/scripts/check-preview-deployer.mjs @@ -21,6 +21,10 @@ const systemd = readFileSync( 'deploy/systemd/genarrative-preview-deployer.service', 'utf8', ); +const server = readFileSync( + 'server-rs/crates/preview-deployer-server/src/lib.rs', + 'utf8', +); const nginx = readFileSync( 'deploy/nginx/genarrative-preview-deployer-lan.conf', 'utf8', @@ -118,6 +122,11 @@ assertIncludes( 'location ^~ /build/', '内网 Nginx 必须提供 /build/ 路由。', ); +assertIncludes( + server, + '.nest_service("/build/assets", ServeDir::new(static_dir.join("assets")))', + '控制服务必须原生托管 /build 子路径,不能依赖 Nginx 隐式改写。', +); assertIncludes( jobConfig, 'jenkins/Jenkinsfile.preview-deployer', diff --git a/server-rs/crates/preview-deployer-server/src/lib.rs b/server-rs/crates/preview-deployer-server/src/lib.rs index 4915763ee..11e79db54 100644 --- a/server-rs/crates/preview-deployer-server/src/lib.rs +++ b/server-rs/crates/preview-deployer-server/src/lib.rs @@ -234,11 +234,16 @@ pub fn build_router(state: AppState) -> Router { let mut router = Router::new().merge(api); if let Some(static_dir) = state.config.static_dir.clone() { - router = router.fallback_service( - ServeDir::new(&static_dir) - .append_index_html_on_directories(true) - .fallback(ServeFile::new(static_dir.join("index.html"))), - ); + let index = static_dir.join("index.html"); + router = router + .route_service("/build", ServeFile::new(index.clone())) + .route_service("/build/", ServeFile::new(index.clone())) + .nest_service("/build/assets", ServeDir::new(static_dir.join("assets"))) + .fallback_service( + ServeDir::new(&static_dir) + .append_index_html_on_directories(true) + .fallback(ServeFile::new(index)), + ); } router