nginx反向代理为所有内容提供404

时间:2013-12-19 00:01:04

标签: apache nginx memcached http-status-code-404 backend

这个项目通常用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"

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

尝试用此

替换error_page
error_page 404 =200 @fallback;