Назад | Перейти на главную страницу

Nginx error_page не работает

Я пытаюсь использовать nuxtjs в качестве интерфейса и laravel в качестве бэкэнда с NGINX

После добавления ssl и перенастройки файла .conf nginx, теперь мой error_page линия не работает и не переходит на location @php но вместо этого он выдает интерфейс 404 (страница с ошибкой nuxt)

server{
listen 45.xx.xxx.xxx:80;
server_name example.com www.example.com;
 root /home/example/core/public/;

return 301 https://www.example.com$request_uri;
}


server {
    listen 45.xx.xxx.xxx:443 ssl;
    # NOTE: SSL configuration is defined elsewhere
     server_name example.com;
   ssl_certificate /etc/pki/tls/certs/example.com.cert;
    ssl_certificate_key /etc/pki/tls/private/example.com.key;
    return 301 https://www.example.com$request_uri;

}


server {
    listen 45.xx.xxx.xxx:443 ssl;
    server_name  www.example.com;
    ssl_certificate /etc/pki/tls/certs/example.com.cert;
    ssl_certificate_key /etc/pki/tls/private/example.com.key;
      root /home/rabter/core/public/;
        index index.php;
        access_log /var/log/nginx/example.com.bytes bytes;
       access_log /var/log/nginx/example.com.log combined;
      error_log /var/log/nginx/example.com.error.log error;
   ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
  root /home/example/core/public/;
        index index.php;
    proxy_set_header                Connection "keep-alive";
    proxy_set_header                Upgrade $http_upgrade;
    proxy_set_header                Connection 'upgrade';
    proxy_http_version              1.1;
    proxy_pass                      https://45.xx.xxx.xxx:3000$request_uri;
    error_page                      404 = @php;
}

location @php {
    try_files                   $uri $uri/  /index.php?$query_string;
}

location ~ \.php$ {
    fastcgi_split_path_info         ^(.+\.php)(/.+)$;
    fastcgi_param HTTPS $https;
    fastcgi_pass                    45.xx.xxx.xxx:9000;
    fastcgi_index                   index.php;
    include                         fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors        off;
    fastcgi_buffer_size             16k;
    fastcgi_buffers                 4 16k;
    fastcgi_connect_timeout         300;
    fastcgi_send_timeout            300;
    fastcgi_read_timeout            300;
}
}

Перед добавлением ssl error_page 404 = @php работал без проблем, и вызовы api были сделаны. похоже, что nginx игнорирует строку error_page. Спасибо за любую помощь

правильный файл конфигурации для ssl

Файл конфигурации http

server {
  listen your-server-ip:80;
    server_name example.com;
        return 301 https://www.example.com$request_uri;

}

Файл конфигурации ssl

server {
  listen your-server-ip:443 ssl;
    server_name example.com;
        return 301 https://www.example.com$request_uri;

}
server {
    listen your-server-ip:443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/pki/tls/certs/example.com.bundle;
    ssl_certificate_key /etc/pki/tls/private/example.com.key;
      root /home/example/core/public/;
        index index.php;
        access_log /var/log/nginx/example.com.bytes bytes;
       access_log /var/log/nginx/example.com.log combined;
      error_log /var/log/nginx/example.com.error.log error;

location / {

    proxy_set_header                Connection "keep-alive";
    proxy_set_header                Upgrade $http_upgrade;
    proxy_set_header                Connection 'upgrade';
    proxy_http_version              1.1;
    proxy_pass                      https://your-server-ip:3000$uri;
    proxy_intercept_errors          on;# In order to use error_page directive this needs to be on
    error_page                      404 = @php;
}

location @php {
    try_files                       $uri $uri/  /index.php?$query_string;

}

location ~ \.php$ {
   fastcgi_split_path_info         ^(.+\.php)(/.+)$;
    fastcgi_pass                    your-server-ip:9000;
    fastcgi_index                   index.php;
    include                         fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_intercept_errors        off;
    fastcgi_buffer_size             16k;
    fastcgi_buffers                 4 16k;
    fastcgi_connect_timeout         300;
   fastcgi_send_timeout            300;
    fastcgi_read_timeout            300;
}
}

Имейте в виду, что мой порт был 3000 ваш может быть другим

fastcgi_pass тоже может указывать на носок, но я добавил его напрямую

Порт fastcgi_pass установлен на 9000 в моем случае Ваш может быть другим

при этом, как говорится, мы перенаправляем 80 и 433 без www к www а затем выполняем обратный прокси, если обратный прокси - 404, мы пробуем @php, а внизу мы используем php-fpm для запуска нашего php-кода

Я почти 2 недели изучал nginx и писал разные конфигурации, пока не придумал этот