Nginx

使用 nginx 作為 memcached + node.js 的反向代理攔截 404

  • January 22, 2014

我使用 nginx 作為反向代理從 memcached 中查找 html 內容,如果不存在,則 node.js,如果甚至不存在,node.js 返回 404。我想要做的是攔截並提供自定義node.js 返回的 404 頁面

問題是 nginx 沒有返回正確的 404.html 而是預設的。

因此,雖然我可以攔截 404 頁面,但 nginx 提供的是預設錯誤頁面,而不是 404.html

upstream memcached {
   server 127.0.0.1:11211;
}

error_page 404 /404.html;
location /404.html {
   internal;
}

location @memcached {
   ...
   if ($memcached_request = 1) {
       memcached_pass memcached;
       error_page 404 502 504 = @nodejs;
   }

   if ($memcached_request = 0) {
       error_page 404 502 504 = @nodejs;
   }
}

location @nodejs {
   proxy_pass         http://127.0.0.1:7777;
   ...
   error_page 404 /404.html;
   proxy_intercept_errors on;
   proxy_redirect off;
}

location / {
   try_files $uri $uri/ @memcached;
   error_page 403 = @nodejs;
}

有沒有更好的方法來做到這一點“如果不在 memcached 中,請轉到 node.js”,而不是 error_page 404 = @fallback?如果沒有,有沒有辦法從最後一個後端擷取 404?

也許它不想重定向到某個internal位置?如果您嘗試再次將其重定向到指定位置怎麼辦?即@404

否則,聽起來您可能必須啟用recursive_error_pages您的設置才能正常工作。

引用自:https://serverfault.com/questions/567420