Почему nginx отображает папку, но не показывает файлы, находящиеся в ней?

Как можно улучшить структуру и ясность конфигурации Nginx, представленной ниже, сохраняя все исходные настройки и комментарии? <br/> 
<pre><code># Определение сервера по умолчанию
server {
listen [::]:8080 default_server;
listen 8080 default_server;
server_name _;

tcp_nodelay on;
absolute_redirect off;

# этот работает отлично, это webserver+ws по своей собственной реализации
location /backend/firstws {
proxy_http_version 1.1;
proxy_set_header Хост $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Обновление $http_upgrade;
proxy_set_header Подключение "upgrade";
proxy_read_timeout 1d; # не разрывать соединение после 60 с бездействия
proxy_pass http://127.0.0.1:7898/;
}

# это тоже, никаких проблем, это чистый ws-сервер на nodejs
location /backend/secondws/ {
add_header Access-Control-Allow-Origin *;
proxy_http_version 1.1;
proxy_set_header Хост $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Обновление $http_upgrade;
proxy_set_header Соединение "upgrade";
proxy_read_timeout 1d; # не разрывать соединение после 60 с бездействия
proxy_pass http://127.0.0.1:3000/socket.io/;
}

# а здесь я пытаюсь проксировать запросы к noVNC через NGINX.
location /backend/vnc/ {
proxy_pass http://127.0.0.1:5800/;
}

# Перенаправить страницы ошибок сервера на статическую страницу /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/lib/nginx/html;
}

# Установить заголовки управления кэшем для ресурсов для кэширования на 3 часа
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 1h;
}

# Запретить доступ к файлам . в целях безопасности
location ~ /\. {
log_not_found off;
deny all;
}

}</code></pre>
  • 27 сентября 2024 г. 14:44
Ответы на вопрос 1
Если Nginx отображает папку, но не показывает файлы, находящиеся в ней, это может быть связано с тем, что у вас не настроен индексный файл или есть ограничения на отображение содержимого папок. Чтобы Nginx показывал содержимое, находящееся в директории, вы можете добавить директиву `autoindex`.

Для улучшения структуры и ясности вашей конфигурации Nginx, сохраняя все исходные настройки и комментарии, можно внести несколько изменений. Ниже приведен переработанный вариант вашей конфигурации:

```nginx
# Определение сервера по умолчанию
server {
    listen [::]:8080 default_server;
    listen 8080 default_server;
    server_name _;

    tcp_nodelay on;
    absolute_redirect off;

    # Настройка проксирования для первого веб-сокета
    location /backend/firstws {
        proxy_http_version 1.1;
        proxy_set_header Host $host;                             # Исправлено на «Host»
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;                 # Исправлено на «Upgrade»
        proxy_set_header Connection "upgrade";                   # Исправлено на «Connection»
        proxy_read_timeout 1d;                                  # не разрывать соединение после 1 дня бездействия
        proxy_pass http://127.0.0.1:7898/;
    }

    # Настройка проксирования для второго веб-сокета
    location /backend/secondws/ {
        add_header Access-Control-Allow-Origin *;
        proxy_http_version 1.1;
        proxy_set_header Host $host;                             # Исправлено на «Host»
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;                 # Исправлено на «Upgrade»
        proxy_set_header Connection "upgrade";                   # Исправлено на «Connection»
        proxy_read_timeout 1d;                                  # не разрывать соединение после 1 дня бездействия
        proxy_pass http://127.0.0.1:3000/socket.io/;
    }

    # Проксирование запросов к noVNC
    location /backend/vnc/ {
        proxy_pass http://127.0.0.1:5800/;
    }

    # Перенаправить страницы ошибок сервера на статическую страницу /50x.html
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/lib/nginx/html;
    }

    # Установить заголовки управления кэшем для статических ресурсов (кэш на 1 час)
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 1h;
    }

    # Запретить доступ к скрытым файлам (например, .htaccess)
    location ~ /\. {
        log_not_found off;
        deny all;
    }

    # Включить индексирование директорий (если необходимо)
    location / {
        autoindex on;  # включает автоматическое индексирование
        index index.html index.htm;  # укажите ваши индексные файлы
    }
}
```

### Изменения и пояснения:
1. **Исправление синтаксиса заголовков**: Я исправил некоторые заголовки (например, "Хост" на "Host"), чтобы они были на английском, так как это стандартный подход в конфигурации Nginx.
   
2. **Добавление `autoindex`**: Я включил директиву `autoindex on;` в `location /`, чтобы включить отображение списка файлов в директории. Вам может понадобиться также добавить `index index.html index.htm;`, если вы используете какие-либо индексные файлы.

3. **Чистота кода**: Добавил отступы и комментарии для улучшения читаемости и структурирования конфигурации. Это поможет вам и другим администраторов легче понимать настройки.

Перед применением изменений убедитесь, что у вас корректно настроены права доступа к папкам и файлам, чтобы Nginx мог их читать. После изменений не забудьте перезагрузить сервер Nginx с помощью команды:
```bash
sudo systemctl reload nginx
```
Похожие вопросы