这个项目通常用apache提供,但是我想引入nginx作为前端控制器来将请求代理到memcached,如果在memcached中找不到URI,则回退到apache。
当我通过nginx发出请求时发生的事情是我在每个资产上获得404。我可以从URL栏中的请求中粘贴单个资产URL并检索它,但具有404状态。 404s会导致大部分页面无法渲染,但似乎资源正在下载。
我可以直接通过apache提出相同的请求,但它运行正常。
这是我的nginx配置:
upstream memcached-upstream {
server 127.0.0.1:11211;
}
upstream apache-upstream {
server 127.0.0.1:5678;
}
server {
listen 4567;
root /vagrant;
server_name sc;
index index.php;
access_log /var/log/nginx/www.sc.com.access.log;
error_log /var/log/nginx/www.sc.com.error.log error;
location / {
# Only use this method for GET requests.
if ($request_method != GET ) {
proxy_pass http://apache-upstream;
break;
}
# Attempt to fetch from memcache. Instead of 404ing, use the @fallback internal location
set $memcached_key $request_uri;
memcached_pass memcached-upstream; # Use an upstream { } block for memcached resiliency
default_type application/json; # Our services only speak JSON
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://apache-upstream;
}
}
这是我的nginx访问日志中的示例:
10.0.2.2 - - [18/Dec/2013:23:50:08 +0000] "GET /templates/assets/js/csrf.js HTTP/1.1" 404 545 "http://localhost:4567/templates/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
来自apache日志的相同请求:
www.sc.com:80 127.0.0.1 - - [18/Dec/2013:23:50:08 +0000] "GET /templates/assets/js/csrf.js HTTP/1.0" 200 857 "http://localhost:4567/templates/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
非常感谢任何帮助。
答案 0 :(得分:0)
尝试用此
替换error_page
error_page 404 =200 @fallback;