Nginx comportamento de página 404

2

Eu tenho a seguinte configuração do servidor nginx:

server {
    listen 80;
    server_name example.com
    root   /server/root;

    index index.php;

    error_page 404 = /index.php;

    location ~ \.php$ {
        try_files $uri =404;

        proxy_pass         http://127.0.0.1:8080;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Request-URI    $request_uri;
    }

}

O comportamento que eu quero é que, quando o nginx encontrar um pedido para um arquivo que não existe, ele mostre a página index.php por meio de uma página 404. O problema é que parece que o apache (que é o que está sendo passado por proxy) ainda está tentando resolver a solicitação original quando recebe a solicitação. Se eu acessar o link , recebo o erro:

The requested URL /blahblah was not found on this server.

Qual é um erro do apache. Como posso fazer com que index.php seja mostrado como a página 404 da mesma forma como se fosse um arquivo estático?

    
por Mediocre Gopher 25.07.2012 / 17:27

3 respostas

2

Qual versão do nginx você está usando? Esse problema foi abordado em 1.1.12: link

EDIT: Se você não pode atualizar, você pode substituir sua error_page atual e try_files com:

location / {
  try_files $uri $uri /index.php;
}

location ~ \.php$ {
  # Leave the =404 at the end so we don't 500 when /index.php doesn't exist
  try_files $uri /index.php =404;

  proxy_pass         http://127.0.0.1:8080;
  proxy_redirect     off;
  proxy_set_header   Host $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header   X-Request-URI    $request_uri;
}
    
por 25.07.2012 / 18:23
0

O nginx terá que interceptar a resposta do Apache para reconhecer as versões 404 e retornar a sua própria.

Se o nginx não tem uma maneira de fazer isso, então talvez você possa configurar o Apache para não retornar nada - assim acionando o próprio estado 404 do nginx?

    
por 25.07.2012 / 17:35
0

Se você insistir em usar o Apache, terá que configurar as regras de reconfiguração do Apache para enviar erros 404 ao seu aplicativo, em vez de configurar o nginx.

    
por 25.07.2012 / 18:17