valerium
@valerium
Изобретая велосипед

Почему nginx так странно отдаёт файлы?

К сожалению, точных цитат из терминала уже не приведу, но за достоверность зуб даю.

$ curl -s http://example.com/some/file.js | md5sum
21c5a6558a2f7197de94ac600f2ccf95 -
$ md5sum some/file.js
a7a12a18fb6bdcc00b88a96db45b418b some/file.js
$ pwd
/var/www/user/data/www/example.com


То есть проблема в том, что есть некий файл. Этот файл раздаётся nginx-ом. Но проблема в том, что файл, лежащий на диске, не соответствует тому, что отдаёт nginx. Никакого memcahed и проч. в nginx не включено (конфиг ниже). Доменное имя резолвится правильно. Решается проблема только перезагрузкой nginx. В чём может быть проблема?

$ cat /etc/nginx/nginx.conf 
# Вывод cat немного урезан, в нём описывается около трёх десятков блоков server на разные домены с одиноковым, в принципе, содержимым.
user apache;
worker_processes 12;

error_log  /var/log/nginx/error.log;

pid        /var/run/nginx.pid;

events {
    worker_connections  2048;
}

http {
    server_names_hash_bucket_size 256;
    server_names_hash_max_size    1024;
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    gzip              on;
    gzip_buffers      16 8k;
    gzip_comp_level   4;
    gzip_http_version 1.0;
    gzip_min_length   1280;
    gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
    gzip_vary         on;    
    
    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

	include /usr/local/ispmgr/etc/nginx.domain;
	client_max_body_size 2048M;
	log_format isp '$bytes_sent $request_length';
	limit_zone levada_11384 $binary_remote_addr 6400k;

	server {
		server_name example.com www.example.com;
		listen 8.8.8.8;
		set $root_path /var/www/user/data/www/example.com;
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
			root $root_path;
			access_log /var/www/nginx-logs/user isp;
			access_log /var/www/httpd-logs/example.com.access.log ;
			error_page 404 = @fallback;
		}
		location / {
			proxy_pass http://localhost:81;
			proxy_redirect http://localhost:81/ /;
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header X-Real-IP $remote_addr;
		}
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {
			proxy_pass http://localhost:81;
			proxy_redirect http://localhost:81/ /;
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header X-Real-IP $remote_addr;
		}
		location @fallback {
			proxy_pass http://localhost:81;
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header X-Real-IP $remote_addr;
		}
		include /usr/local/ispmgr/etc/nginx.inc;
	}
}

$ nginx -v
nginx version: nginx/1.0.15
  • Вопрос задан
  • 2647 просмотров
Решения вопроса 1
alekciy
@alekciy
Вёбных дел мастер
Чудес не бывает. nginx достаточно адекватен и хорош что бы быть уверенным, что он отдает ровно то, что его просят. Значит настроен не правильно. Я бы начал с просмотра access лога. Там можно убедиться, что файл он отдал, отдал именно искомый, а так же его размер. Если ситуация не проясняется, то цепляться strace-ом и смотреть куда он за файлом ходит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@neolink
а сравнить файлы не пробовали? просто по размеру или так:
cmp 1.jpg 2.jpg
покажет смещение первого различающегося байта, -l - подробно выведет различия
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы