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