我有两个位置在nginxconfiguration工作:
location ^~ /media/ { proxy_pass http://backend.example.com; } location ^~ /static/ { proxy_pass http://backend.example.com; }
我怎样才能把这两个结合到一个位置?
我试过这个build议
location ~ ^/(static|media)/ { proxy_pass http://backend.example.com; }
但它不适合我。
另外,当我不使用后端时,以下configurationfunction正常:
location ~ ^/(static|media)/ { root /home/project_root; }
更新 (从日志中的一些string)
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$
其实我的解决scheme确实工作正常:
location ~ ^/(static|media)/ { root /home/project_root; }
而这个问题跟后端无关。 正如Guido Vaccarella正确地注意到它刚刚在另一个location ~ ...
之后跟着location ~ ...
匹配,所以我的location ~ ...
没有机会跑。
根据nginx文档 :
然后按照它们在configuration文件中出现的顺序检查正则expression式。 正则expression式的search在第一次匹配时终止,并使用相应的configuration。
在你的configuration中,下面的位置是在proxy_pass之前定义的,它匹配静态下的js和css文件的请求:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; }
不幸的是,“log_not_found off”子句禁用了与这个位置相关的任何文件未find的错误的日志logging,这就是为什么你的error_log是空的!
你可以尝试注释掉这个位置,或者在proxy_pass位置之后移动它(如果你需要它的话不是静态 / 媒体的其他文件)。
location ~ ^/(static|media)/ { proxy_pass http://backend.example.com; ) <-----------
应该…
location ~ ^/(static|media)/ { proxy_pass http://backend.example.com; } <-----------
结束需要是一个括号{},而不是一个括号括号()。
不能相信多久才能看到这一点。 Guido从评论中是正确的。