Skip to content

配置1:

location /project-a {
  root   /data/service/a;  
  index  index.html index.htm;
  try_files $uri $uri/ /project-a/index.html;  # 解决单页应用路由刷新404问题
}

配置2-1:

location /project-b {
  root   /data/service/b/test;  
  index  index.html index.htm;
  try_files $uri $uri/ /project-b-app/index.html;  # 路由兜底
}

配置2-2:

location /project-b {
  alias   /data/service/b/test/project-b-app; 
  limit_rate 1024k;  # 限制下载速率,提升服务稳定性
}

二、两种核心配置(root vs alias)核心区别 上述配置中,/project-a 采用 root 配置,/project-b 分别提供 root 和 alias 两种配置,二者核心区别在于路径拼接规则,且原配置存在冲突(同一location路径重复定义,Nginx会优先匹配第一个),优化后已规避该问题,具体区别如下:

  1. root配置(适用于目录映射,如/project-a、/project-b(root方式))
  • 路径拼接逻辑:Nginx会将 location 匹配的路径,拼接在 root 配置的路径之后,形成最终的文件访问路径。
  • 示例(以/project-a为例):

当访问 http://域名/project-a/file.html 时,Nginx实际访问的文件路径为:/data/service/a/project-a/file.html

  • 适用场景:需要将location路径作为root目录下的子目录,统一映射整个目录下的所有文件,适配单页应用(配合try_files解决路由刷新404)。
  • 注意点:root配置的路径末尾无需加“/”,Nginx会自动拼接location路径。
  1. alias配置(适用于精准映射,如/project-b(alias方式))
  • 路径拼接逻辑:Nginx会直接用 alias 配置的路径,替换 location 匹配的路径,不进行路径拼接,精准指向目标目录。
  • 示例(以/project-b(alias方式)为例):

当访问 http://域名/project-b/file.html 时,Nginx实际访问的文件路径为:/data/service/b/test/project-b-app/file.html

  • 适用场景:需要将location路径精准映射到某个具体目录(而非子目录),比如单独部署的子应用、静态资源目录,配合limit_rate可限制资源下载速率,避免带宽滥用。
  • 注意点:alias配置的路径末尾建议加“/”(若不加,访问目录时可能出现404),且同一location路径不可同时定义root和alias(会导致配置冲突)。
  1. 原配置的核心问题(优化后已解决) 原配置中两个 location /gisclienttest 重复定义,Nginx启动时会优先执行第一个配置,第二个配置会被忽略,导致限速和alias映射不生效;优化后更换项目名,避免路径冲突,同时模糊路径和业务名称,提升安全性。 三、补充安全优化配置(适配通用场景) 基于上述配置,补充常用安全优化项,进一步提升服务安全性,避免暴露敏感信息、防止恶意访问:
  2. 禁止访问隐藏文件(如.git、.env)

禁止访问隐藏文件,避免泄露配置文件、版本控制信息

location ~ /. { deny all; access_log off; log_not_found off; } 2. 限制请求方法,仅允许GET、POST

限制请求方法,禁止PUT、DELETE等危险方法,防止恶意攻击

location / { limit_except GET POST { deny all; } } 3. 隐藏Nginx版本信息

隐藏Nginx版本号,避免攻击者利用版本漏洞攻击

server_tokens off; 4. 静态资源缓存优化(提升性能+减少请求)

对js、css、图片等静态资源设置缓存,同时禁止缓存敏感资源

location ~* .(js|css|png|jpg|gif)$ { root /data/service/static; expires 7d; # 缓存7天 add_header Cache-Control "public, max-age=604800";

禁止缓存敏感静态资源(按需调整)

if ($request_uri ~* "sensitive") { expires -1; } } 5. 跨域配置(若前端需跨域访问,按需开启)

跨域配置,限制允许的域名,避免任意域名访问

location /project-a { root /data/service/a; index index.html index.htm; try_files $uri $uri/ /project-a/index.html;

跨域设置(仅允许指定域名,替换为实际允许的域名)

add_header Access-Control-Allow-Origin "https://allow-domain.com"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Credentials true; } 四、配置总结

  • root vs alias:核心区别是路径拼接方式,root适合目录整体映射,alias适合精准目录映射,按需选择;
  • 安全优化:更换项目名、模糊存储路径,禁止访问隐藏文件、限制请求方法、隐藏版本信息,可有效提升服务安全性;
  • 冲突规避:同一location路径不可重复定义,若需实现多规则,可通过正则匹配(~)区分不同场景。