查看: 158|回复: 10

请教一下下面这个nginx反代缓存静态文件有问题吗

[复制链接]

797

主题

2803

回帖

8155

积分

论坛元老

积分
8155
发表于 2017-12-24 14:20:32 | 显示全部楼层 |阅读模式
本帖最后由 t9913085 于 2017-12-26 19:32 编辑

已经解决
回复

使用道具 举报

797

主题

2803

回帖

8155

积分

论坛元老

积分
8155
 楼主| 发表于 2017-12-24 14:21:00 | 显示全部楼层
本帖最后由 t9913085 于 2017-12-24 15:00 编辑

litter123 发表于 2017-12-24 14:54

这里用的应该是正则,至于“?”具体什么意思,我也不太懂,大概就是前面(GIF | JPG | JPEG | PNG | BMP ...


谢谢,
再问一下,
我这段代码可以做到只缓存并读取静态文件gif|jpg|jpeg|png|bmp|swf|js|css的目的吗?
因为用了两段反代代码
回复

使用道具 举报

797

主题

2803

回帖

8155

积分

论坛元老

积分
8155
 楼主| 发表于 2017-12-24 14:21:39 | 显示全部楼层
本帖最后由 t9913085 于 2017-12-24 14:24 编辑

我看到有些参考代码

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
会写成location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)?$
这两者有什么差别吗
回复

使用道具 举报

468

主题

2078

回帖

5686

积分

论坛元老

积分
5686
发表于 2017-12-24 14:54:00 | 显示全部楼层

南琴浪 发表于 2017-12-24 15:20

有问题呀,你这写法,充分验证了我之前说过的 “模板只会害人”。

你既然是反代了,proxy_set_header Host ...

活捉野生大佬

回复

使用道具 举报

468

主题

2078

回帖

5686

积分

论坛元老

积分
5686
发表于 2017-12-24 14:54:13 | 显示全部楼层

t9913085 发表于 2017-12-24 14:21

我看到有些参考代码

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$

这里用的应该是正则,至于“?”具体什么意思,我也不太懂,大概就是前面(GIF | JPG | JPEG | PNG | BMP | SWF | JS | CSS)可有可无吧
回复

使用道具 举报

56

主题

866

回帖

1942

积分

金牌会员

积分
1942
发表于 2017-12-24 14:57:41 | 显示全部楼层
有问题呀,你这写法,充分验证了我之前说过的 “
模板只会害人
”。

你既然是反代了,
proxy_set_header Host $Host;
这里就不该写 $Host 了,有两种改法:1.把 $Host 这个值改为你要反代的目标的 host(具体的值);2.干脆去掉这行,如果没特殊需求,建议去掉。

上面这个都只是小问题,你这个配置最大的问题在于
反代一丁点都不会有缓存

location 不是无脑照搬的,并且是有固定匹配规则的,你分开写到两个 location 里面,两个规则不会被同时匹配的,最后结果就是:你访问 gif 等等根本就不会反代,你访问其它路径会经过反代,但是不会经过 proxy_cache。

最后,给你一个链接,我是已经写的够详细了:
https://sometimesnaive.org/article/webfield/nginx/enable-proxy_cache
回复

使用道具 举报

56

主题

866

回帖

1942

积分

金牌会员

积分
1942
发表于 2017-12-24 15:20:00 | 显示全部楼层

t9913085 发表于 2017-12-24 15:38

不过我测试了,虽然有两个location,但是的确生成了缓存文件
/home/cache/nginx_proxy_temp 这个目录没有 ...

生成文件是因为你的第二个 location 能缓存,但是是不会经过反代的,所以缓存的也是错误内容。
回复

使用道具 举报

797

主题

2803

回帖

8155

积分

论坛元老

积分
8155
 楼主| 发表于 2017-12-24 15:20:15 | 显示全部楼层

南琴浪 发表于 2017-12-24 15:20

有问题呀,你这写法,充分验证了我之前说过的 “模板只会害人”。

你既然是反代了,proxy_set_header Host ...

不过我测试了,虽然有两个location,但是的确生成了缓存文件
/home/cache/nginx_proxy_temp 这个目录没有写入,
但是 /home/cache/nginx_proxy_cache 有写入文件
回复

使用道具 举报

797

主题

2803

回帖

8155

积分

论坛元老

积分
8155
 楼主| 发表于 2017-12-24 15:36:42 | 显示全部楼层
不过我去仔细摸索一下你的链接文章
回复

使用道具 举报

56

主题

866

回帖

1942

积分

金牌会员

积分
1942
发表于 2017-12-24 15:38:03 | 显示全部楼层
嘛,location 这玩意,满头雾水很正常,以下仅做参考:

server {
        listen 80;

        server_name 你的域名;

        location / {
                   proxy_pass http://163.172.XXX.XXX:80;
                   proxy_redirect off;
                   proxy_set_header Host  "163.172.XXX.XXX:80";
                   proxy_set_header X-Real-IP  $remote_addr;
                   proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
                   proxy_pass http://163.172.XXX.XXX:80;
                   proxy_redirect off;
                   proxy_set_header Host  "163.172.XXX.XXX:80";
                   proxy_set_header X-Real-IP  $remote_addr;
                   proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

                   proxy_cache的相关设置这里我没写出来,根据我那篇文章,按你需求自行配置,server 段的部分写在这里
        }
}


看了上面,你会发现我在两个 location 中写了相同的反代配置。这样就能避免前面我提到的问题。

关于 proxy_cache 的相关设置,一楼那个模板你全部丢掉就行,不知道你找的多少个网站复制夹杂的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部