nginx 反向代理 过滤首页根域名和显性 index.html 页其它走代理

直接上代码:

  
# 本地首页  
location = /index.html {  
    #root /path/to/local/index;  
    index index.html;  
}  
  
# 根路径也留在本地  
location = / {  
    #root /path/to/local/index;  
    index index.html;  
}  
  
# 其他页面走代理  
location / {  
    proxy_pass http://12.34.56.78;  
    proxy_set_header Host $host;  
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_set_header REMOTE-HOST $remote_addr;  
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection $connection_upgrade;  
    proxy_http_version 1.1;  
  
    # 设置缓存  
    proxy_cache cache_one;  
    proxy_cache_key $host$uri$is_args$args;  
    proxy_cache_valid 200 304 301 302 1m;  
  
    # 设置其他头部  
    add_header X-Cache $upstream_cache_status;  
  
    # 设置静态资源缓存时间  
    if ($uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$") {  
        expires 1m;  
    }  
}  
  

location = / 和 location / 的区别

这两个location指令的区别在于匹配的精确度和优先级:

location = /:这表示精确匹配根路径/,只有当请求的URI确切地是根路径时才会匹配到这个location。也就是说,只有当用户请求的是http://your_domain.com/时才会匹配到这个location,而不会匹配到任何带有路径的请求(比如http://your_domain.com/something)。

location /:这是一个前缀匹配,会匹配任何以/开头的URI,除了已经被其他精确匹配的location指令匹配到的URI之外。因此,这个location会匹配到所有不是根路径的请求,比如http://your_domain.com/something

在这个Nginx配置中,location = /用于精确匹配根路径/,并将其指向本地的首页;而location /则用于匹配所有不是根路径的请求,并将其代理到 http://12.34.56.78