Jaroslaw Pomorski

Jaroslaw Pomorski IT Administrator,
Wolters Kluwer
Polska

Temat: Dziwne zachowanie nginxa

Panowie, może ktoś mi podpowie, bo nie mogę zrozumieć dlatego nginx tak się zachowuje. Wersja nginxa 1.2.1 standardowo z paczki Debiana Wheezy. Puszczam requesty po obrazki do serwera cdn.jakas_domena.pl i w konfiguracji przedstawionej poniżej w logu /var/log/nginx/cdn.jakas_domena.pl/test.log otrzymuję wpisy

image/gif:1
image/png:1
image/png:1
image/gif:1
image/png:1
image/gif:1

czyli wszystko OK. Zgodnie z ustawieniami, jeżeli Content-Type jest np. image/gif to wartość zmiennej $cdn ma wartość 1. Teraz jeżeli usunę znaki komentarza sprzed 3 linii dotyczących warunku if, to zawartość pliku logu wygląda już inaczej

-:0
-:0
-:0
-:0
-:0
-:0

czyli wnoszę po tym, że zawartość zmiennej $sent_http_content_type jest pusta. Jednocześnie pliki są zwracane poprawnie bez błędu 404. Czy jest ktoś w stanie wyjaśnić mi dlaczego tak się dzieje?

Poniżej konfiguracja

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;

map $sent_http_content_type $cdn {
default 0;
text/css 1;
text/javascript 1;
image/x-icon 1;
image/gif 1;
image/jpeg 1;
image/png 1;
}

log_format test $sent_http_content_type:$cdn;

server {
listen 82 default; ## listen for ipv4
listen [::]:82 default ipv6only=on; ## listen for ipv6
server_name localhost "";
access_log /var/log/nginx/localhost.access.log;
error_log /var/log/nginx/localhost.error.log;
location / {
root /var/www;
index index.html index.htm;
}
location /test.txt {
proxy_pass http://$server_addr:8080;
}
}

server {
listen 82;
server_name cdn.jakas_domena.pl;
location / {
proxy_pass http://$server_addr:8080;
}
location /test.jsp {
proxy_pass http://$server_addr:8080;
allow 10.0.0.0/8;
deny all;
}
# if ($cdn) {
# return 404;
# }
access_log /var/log/nginx/cdn.jakas_domena.pl/test.log test;
}
}