Что означает ошибка 404 NGINX и почему она возникает?

Здравствуйте! 

Я столкнулся с проблемой маршрутизации запросов через Nginx. Несмотря на то, что конфигурация Nginx проверена и синтаксически корректна, запросы к /api/category возвращают ошибку 404. 

**Система**  
- Windows 11  
- Nginx 1.27.2  
- Backend: Node.js + Express  

**Логи Nginx**  
```
127.0.0.1 - - [13/Oct/2024:18:12:39 +0300] "OPTIONS /api/category HTTP/1.1" 204 0 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0" "-"
127.0.0.1 - - [13/Oct/2024:18:12:41 +0300] "GET /api/category HTTP/1.1" 404 5 "http://localhost:5173/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0" "-"
```

**Конфигурация Nginx**  
```
worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log main;
    error_log logs/error.log debug;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location /api/auth/ {
            proxy_pass http://localhost:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
```
Как вы можете помочь в решении этой проблемы?
  • 13 октября 2024 г. 16:03
Ответы на вопрос 2
Ошибка 404 в NGINX означает, что сервер не может найти запрашиваемый ресурс. Это может происходить по нескольким причинам:

1. **Неверный маршрут**: Запрос, который вы делаете (например, для `/api/category`), не соответствует ни одной из определённых локаций в конфигурации NGINX.

2. **Проблемы с проксированием**: Если NGINX настроен на проксирование запросов к бэкенду (в вашем случае Node.js + Express), это может быть связано с тем, что сервер, на который NGINX проксирует запросы, не обрабатывает его должным образом или не принимает его.

3. **Несоответствующая конфигурация бэкенда**: Возможно, маршрут `/api/category` не реализован в вашем приложении на Node.js + Express.

Вот шаги, которые могут помочь вам в решении проблемы:

### 1. Проверьте конфигурацию NGINX

Ваш текущий конфигурационный файл показывает, что вы настроили только `/api/auth/`, но не включили `/api/category`. Убедитесь, что у вас есть соответствующая локация:

```nginx
location /api/category {
    proxy_pass http://localhost:5000;  # Предполагая, что ваш бэкенд работает на порту 5000
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
```

Такой блок нужно добавить в секцию `server` вашей конфигурации NGINX. 

### 2. Проверьте маршрутизацию в Express

Убедитесь, что у вас есть соответствующий маршрут в вашем приложении Express. Например:

```javascript
const express = require('express');
const app = express();

app.get('/api/category', (req, res) => {
    res.send('Category data');
});

app.listen(5000, () => {
    console.log('Server is running on port 5000');
});
```

### 3. Перезапустите NGINX

После изменения конфигурации не забудьте перезапустить сервер NGINX, чтобы изменения вступили в силу:

```bash
nginx -s reload
```

### 4. Проверьте логи

Если ошибка 404 все еще возникает, внимательно проверьте логи, которые вы уже предоставили. Используйте `error_log` для получения более детальной информации о том, что происходит:

```nginx
error_log logs/error.log debug;
```

Это может помочь вам понять, куда приводят ваши запросы и почему они не обрабатываются.

### 5. Попробуйте сделать запрос напрямую к бэкенду

Чтобы проверить, работает ли бэкенд корректно, попробуйте сделать запрос к вашему серверу Express напрямую (например, через Postman или cURL):

```bash
curl http://localhost:5000/api/category
```

Если это возвращает данные, ваша проблема, скорее всего, заключается в настройках NGINX. Если нет, вам нужно решить проблему с вашим бэкендом.

Следуя этим шагам, вы сможете отслеживать и устранять ошибку 404 в NGINX.
Потому что у вас зачем-то в локейшене /api/category/ завершающий /, а он там не нужен. В текущем виде запрос /api/category обрабатывается локейшеном / .
Похожие вопросы