2014-04-05 12 views
0

Как я могу заставить свой сервлет вызвать ошибку 404, которая будет перенаправлена ​​моим прокси Nginx?Получение Servlet для сброса ошибки 404 через обратный прокси Nginx?

Он отлично работает для 404-х, брошенных Nginx. Но если запрос проксирован до Tomcat, страница с ошибкой 404 происходит от Tomcat, а не от Nginx.

Могу ли я как-то вернуть ошибку 404, которая затем подхвачена перенаправлением Nginx? Или мне нужно настроить страницу параллельной 404 ошибки в web.xml?

я следующие включены в мой Nginx конфигурации:

location ~ \.do$ { 
    proxy_pass    http://127.0.0.1:8080; 
    proxy_set_header  Host $http_host; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-Host $host; 
    proxy_set_header  X-Forwarded-Server $host; 
    proxy_set_header  X-Forwarded-Proto $scheme; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

error_page 404 = @page-not-found; 
location @page-not-found { 
    rewrite .* /search?status=page-not-found permanent; 
} 

и сервлета, как:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    String handle = request.getParameter("handle");  
    Page page = pageDao.getPageByHandle(handle);   
    if(page.getId()!=null){ 
     request.setAttribute("page", page); 
     request.getRequestDispatcher("/site/page.jsp").forward(request , response); 
    } 
    response.sendError(HttpServletResponse.SC_NOT_FOUND); 
} 

ответ

0

Кажется, вы просто добавить proxy_intercept_errors on в Nginx конфигурации ...

Как in:

proxy_intercept_errors on; 

error_page 404 = @page-not-found; 
location @page-not-found { 
    rewrite .* /search?status=page-not-found permanent; 
} 
Смежные вопросы