我在 nginx 配置中有两个位置可以工作:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
Run Code Online (Sandbox Code Playgroud)
如何将这两者合并到一个位置?
我试过这个建议
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用。
此外,当我不使用后端时,以下配置运行正常:
location ~ ^/(static|media)/ {
root /home/project_root;
}
Run Code Online (Sandbox Code Playgroud)
更新(日志中的一些字符串)
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$
Run Code Online (Sandbox Code Playgroud)
其实我的解决方案确实工作正常:
location ~ ^/(static|media)/ {
root /home/project_root;
}
Run Code Online (Sandbox Code Playgroud)
这个问题与后端无关。由于 Guido Vaccarella 正确地注意到它只是一个接一个location ~ ...
匹配,所以我location ~ ...
没有机会跑。
Gui*_*lla 39
根据nginx 文档:
然后按照它们在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。
在您的配置中,以下位置定义在带有 proxy_pass 的位置之前,它匹配static下的 js 和 css 文件的请求:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,“log_not_found off”子句禁用了与此位置相关的任何文件未找到错误的日志记录,这就是您的 error_log 为空的原因!
您可以尝试注释掉此位置或使用 proxy_pass 将其移动到该位置之后(如果您需要它用于不在static / media 中的其他文件)。
Gru*_*mpy 18
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
) <-----------
Run Code Online (Sandbox Code Playgroud)
应该...
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
} <-----------
Run Code Online (Sandbox Code Playgroud)
结束需要是大括号 {},而不是括号 ()。
不敢相信花了多长时间才看到。从评论来看,Guido 是对的。
归档时间: |
|
查看次数: |
120871 次 |
最近记录: |