nginx 正则

发布时间 2023-12-11 18:17:48作者: bhxuwei

坑点

ginx location 正则 aliastry_files, 存在排斥情况,不能一起使用,要使用root。

  • 案例如下

# 老版本门户前端
location ^~ /assets {
    alias /usr/share/nginx/homepage_test/assets/; # 老版本 js、css文件
}


# nginx location 正则 alias和 try_files, 存在排斥情况,所以只能用root
# try_files 至少两个参数 file uri 或者 file =code;形如:`try_files $uri $uri/index.html $uri.html =404`;
location ~ ^/(newsEditPage|preview|documents|aboutUs|dynamics|certification|navigatorDetail|databaseNavigation|journalSearch|commonWraplink|guide)(.*)$ {
    root /usr/share/nginx/homepage_test;
    try_files $2 /$1/index.html; # vue/react发布的build包
}


# 正则代理css,jss等静态文件,$1必须加
# location ~ ^/gkxtest/(.*)$ {
#     alias /usr/share/nginx/homepage_test/$1;
# }

# 正则代理css,jss等静态文件,$1必须加
# location ~ ^/homepage_test/(.*)$ {
#     root /usr/share/nginx;
#     try_files $uri $uri/ =404;
# }

try_files 知识点

  • try_files 至少两个参数 file uri 或者 file =code;形如:try_files $uri $uri/index.html $uri.html =404;
  • try_files 和 alias 或 root的关系,按指定顺序检查文件是否存在,并使用第一个找到的文件进行请求处理。处理的基于上下文处理的。文件的路径是file 根据前面的 root 和 alias 指令作为参数构建的。可以通过在名称末尾,指定斜杠来检查目录是否存在, 例如 $uri/, 如果没有找到任何文件, URL 则进行到最后一个参数中指定的内部重定向。 最后一个参数可以是URL 也可以是一个 code.
  • 就是说,try_files前面的参数都是拼凑 root 或 alias的路径去找文件最后一个参数是重定向url:https://your_domain/xxx/index.html

location / {
    root /path/to/files;
    try_files $uri $uri/ /index.html;
}


location ~ ^/static/(.*)$ {
    alias /path/to/static/$1;
}

# 非正则的话,alias 和 try_files 可以一起使用,代理css,jss等静态文件
location /wxttest {
    alias /usr/share/nginx/homepage_test/;
    try_files $uri $uri/ /wxttest/index.html;
}