nginx
2024-08-01
单纯记录下配置nginx遇到的问题
root 和 alias
server {
root /usr/local/etc/nginx;
location /web/public/ {
# alias 是路径替换, 在有命中的情况下, 不受外层的root影响
# 访问 /web/public/**.js => /usr/local/etc/nginx/dist/public/**.js, 但有匹配文件则返回, 没有时则404
alias /usr/local/etc/nginx/dist/public/;
try_files $uri $uri/ =404;
# 如果try_files最后是 /index.html,在前面没有命中的情况下,最后一个 /index.html 会和外层的root配置合并,尝试响应 /usr/local/etc/nginx/index.html
# try_files $uri $uri/ /index.html;
}
# 访问 /web => 先根据 root 匹配 /usr/local/etc/nginx/web 和 /usr/local/etc/nginx/web/
# 如果没有匹配,响应 /dist/view/template.html,拼接root,即是 /usr/local/etc/nginx/dist/view/template.html
# 访问 /web/ 和 /web/* 是一样的响应
location /web {
# 这里配置root和最外层配置root表现行为不一致
# root /usr/local/etc/nginx;
# try_files 中的 /dist/view/template.html 拼接规则并不按 location 中的 root 配置,而是外层 server 的 root 配置
try_files $uri $uri/ /dist/view/template.html;
}
# try_files 除了最后一项匹配是用外层 root 进行拼接外,前面的所有规则都是用的 location 里面的 root
# 这个配置更好,不需要改动外层 root 配置,可能对其他location造成影响
location /web {
root /usr/local/etc/nginx/dist/view;
try_files $uri $uri/ /template.html /template.html;
}
}