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;
    }
}