Задать вопрос
@Aleha29
Программист

Как вывести собственную 404-страницу на NGINX+PHP+FPM?

Уважаемые разработчики, помогите, пожалуйста, не понимаю я до конца принципов работы связки NGINX+PHP+FPM.

ЗАДАЧА: показать клиенту мою собственную 404 страницу, сгенерированную динамически в PHP, с ответом сервера "404 Not Found", если от того же PHP получаем ответ, что такой страницы не существует.

В данный момент у меня если PHP дает ответ, что страницы не существует и написать ---> header("HTTP/1.0 404 Not Found");

- то переход на мою страницу происходит, но при этом:

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Wed, 05 Nov 2014 11:02:06 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15
Location: /404/

---

а если в PHP написать ---> header("Status: 404 Not Found");

- то перехода на мою страницу не происходит, nginx показывает свою 404 и, конечно, ответ сервера уже правильный

HTTP/1.1 404 Not Found
Server: nginx


Мои эксперименты с:
fastcgi_intercept_errors on; - и выключал и включал, результата не дало.
location /404/ { } - пробовал всевозможные варианты, но успеха не добился.
Естественно, что после каждого изменения перезагружаю nginx.

NGINX.conf (в сокращенном виде):

http {
error_page 403 404 /404/;
error_page 500 502 504 /504/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_ignore_client_abort on;
proxy_intercept_errors on;
proxy_redirect off;
proxy_store on;

server {
server_name namesite.ru;

location / {
rewrite ^/([^/]+).html$ /index.php?page=$1& last;
rewrite ^/([^/]+)/?(.*)$ /index.php?page=$1$2& last;
break;
root /accounts/namesite/www;
index index.php;
}
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /accounts/namesite/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}

#location /404/ {
#}

}

upstream backend {
server;
}
}
  • Вопрос задан
  • 3232 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maxyc_webber
Web-программист
на днях спрашивал. intersepterrors = off надо сделать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы