Skip to content

动静分离

配置反向代理

nginx
location / {
    proxy_pass http://127.0.0.1:8080;
}

增加每一个location

nginx
location /css {
    root /usr/local/nginx/static;
    index index.html index.htm;
}

location /images {
    root /usr/local/nginx/static;
    index index.html index.htm;
}

location /js {
    root /usr/local/nginx/static;
    index index.html index.htm;
}

使用一个 location

使用正则

location 前缀

txt
/   通用匹配,任何请求都会匹配到。
=   精准匹配,不是以指定模式开头
~   正则匹配,区分大小写
~*  正则匹配,不区分大小写
^~  非正则匹配,匹配以指定模式开头的location

location 匹配顺序

  • 多个正则 location 直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location 会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通 location 与正则 location 同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型 location 存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
nginx
location ~*/(css|img|js) {
    root /usr/local/nginx/static;
    index index.html index.htm;
}

location ~*/(css|js) {
    root /home/ubuntu/qingdeng-hive/static/;
    index index.html index.htm;
}

alias 与 root

nginx
location /css {
    alias /usr/local/nginx/static/css;
    index index.html index.htm;
}

root 用来设置根目录,而 alias 在接受请求的时候在路径上不会加上 location。

  • alias 指定的目录是准确的,即 location 匹配访问的 path 目录下的文件直接是在 alias 目录下查找的;
  • root 指定的目录是 location 匹配访问的 path 目录的上一级目录,这个 path 目录一定要是真实存在 root 指定目录下的;
  • 使用 alias 标签的目录块中不能使用 rewrite 的 break(具体原因不明);另外,alias 指定的目录后面必须要加上"/"符号!!
  • alias 虚拟目录配置中,location 匹配的 path 目录如果后面不带"/",那么访问的 url 地址中这个path 目录后面加不加"/" 不影响访问,访问时它会自动加上"/"; 但是如果 location 匹配的 path 目录后面加上"/",那么访问的 url 地址中这个 path 目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!
  • root 目录配置中,location 匹配的 path 目录后面带不带"/",都不会影响访问。