Вопрос или проблема
Странно, но эта конфигурация раньше работала нормально, а теперь все статические файлы возвращают 404 при прямой ссылке, то есть
- domain.com/test.html
- domain.com/test/test.html
- domain.com/ и domain.com/test/ << работают, если присутствует index.html
это относится ко всем типам статических файлов.
Nginx.conf :
user www;
worker_processes 8;
worker_rlimit_nofile 65536;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile off;
tcp_nopush on;
tcp_nodelay on;
proxy_cache_path /web-cache/cache levels=2:2 keys_zone=basic:8m max_size=512m inactive=60m;
proxy_temp_path /web-cache/cache_temp;
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;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#gzip compression options
gzip on;
gzip_static off;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_min_length 128;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
# include virtual hosts configuration
include /etc/nginx/virtual.d/*.conf;
}
Пример виртуального хоста :
server {
listen 80;
server_name domain.com www.domain.com;
access_log off;
error_log on;
location / {
proxy_pass http://127.0.0.1:6666;
include /etc/nginx/nocache.conf;
}
location ~* ^.+\.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|bz2|pdf|odt|txt|tar|bmp|rtf|js|swf|avi|mp4|mp3|ogg|flv)$ {
expires 30d;
root /home/test/public_html;
}
}
Я полагаю, что логи покажут, какие именно файлы nginx
пытается обработать.
Возможные результаты расследования:
- Файл существует, но у пользователя www недостаточно прав для доступа к нему.
- Nginx использует location
/
Очевидная проблема в том, что вы разместили root
внутри блока location
. Наилучшей практикой является размещение его в блоке server
. Это одна из самых распространенных ошибок конфигурации nginx.
.
Ответ или решение
Ваш вопрос о том, почему Nginx возвращает ошибку 404 для всего статического контента при использовании в качестве обратного прокси, действительно заслуживает внимания. Давайте разберем возможные причины и решения данной проблемы, исходя из предоставленной конфигурации и сопутствующей информации.
Основная проблема
Как вы сами отметили, одна из наиболее распространенных ошибок в конфигурации Nginx связана с тем, что директива root
помещена в блок location
, а не в блок server
. Это может привести к тому, что Nginx не сможет корректно интерпретировать маршрут к статическим файлам, что в свою очередь может вызвать ошибки 404. Рассмотрим основные аспекты:
Анализ конфигурации
-
Блок
server
:server { listen 80; server_name domain.com www.domain.com; access_log off; error_log on; location / { proxy_pass http://127.0.0.1:6666; include /etc/nginx/nocache.conf; } location ~* ^.+\.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|bz2|pdf|odt|txt|tar|bmp|rtf|js|swf|avi|mp4|mp3|ogg|flv)$ { expires 30d; root /home/test/public_html; } }
-
Перенос директивы
root
:Вы можете переместить директиву
root
в блокserver
, что упростит управление всеми маршрутами для статических файлов. Это улучшит читаемость и устранит потенциальное ошибочное поведение:server { listen 80; server_name domain.com www.domain.com; root /home/test/public_html; location / { proxy_pass http://127.0.0.1:6666; include /etc/nginx/nocache.conf; } location ~* ^.+\.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|bz2|pdf|odt|txt|tar|bmp|rtf|js|swf|avi|mp4|mp3|ogg|flv)$ { expires 30d; } }
Дополнительные проверки
-
Права доступа:
Убедитесь, что пользователь
www
имеет необходимые права на чтение файлов в директории/home/test/public_html
. Попробуйте выполнить команду:sudo chown -R www:www /home/test/public_html sudo chmod -R 755 /home/test/public_html
-
Логи Nginx:
При включенных логах изучите
/var/log/nginx/error.log
и/var/log/nginx/access.log
, чтобы уточнить, какие файлы пытается открыть Nginx и какая конкретно ошибка возникает.
Вывод
Правильная конфигурация Nginx играет критически важную роль в стабильной работе вашего веб-сервера. Перемещение директивы root
в блок server
, проверка прав доступа и анализ логов позволят устранить возникшую проблему. Следуя этим рекомендациям, вы сможете обеспечить корректную обработку и доставку всех статических файлов на вашем сервере, что повысит надежность и скорость работы вашего сайта.
Пожалуйста, не стесняйтесь обращаться за дополнительной помощью, если проблема не будет решена указанными методами. Точная диагностика позволит найти наилучшее решение.