Nginx file_requested не соответствует URL-адресу запроса

Я запускаю traefik перед несколькими микросервисами в контейнерах докеров + контейнер nginx с правилами пути traefik к локальной службе для среды разработки. Когда я запускаю службу локально на порту 3000, nginx принимает ее пути и выполняет proxy_pass http://host.docker.internal:3000. Это хорошо работает почти для всего, за исключением того, что у меня возникают проблемы с запросами статических файлов, которые в данном случае являются .png файлами.

Мой nginx.conf:

user  nginx; worker_processes  auto; pid  /run/nginx.pid;

# Error Log available at error_log  /var/log/nginx/error.log;

events {
    worker_connections  2048;    
}

http {

    # Basic
    include  /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # Logging
    log_format  main    'remote_addr:[$remote_addr]  time_local:[$time_local]  upstream_addr:[$upstream_addr]  status:[$status]  bytes_sent:[$body_bytes_sent]  hostname:[$hostname]  file_requested:[$request_filename] ';
    access_log  /var/log/nginx/http-access.log  main;

    # Tuning for Performance
    sendfile  on;
    expires off;
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

    # Set Client_Buffer Sizes
    client_body_buffer_size 20K;
    client_header_buffer_size 1k;
    large_client_header_buffers 2 16k;
    client_max_body_size 100M;

    # Include Site Conf Files
    include /etc/nginx/sites/*.conf; 
}

Мой файл в /etc/nginx/sites:

server {
    listen 80;
    server_name traefik.domain;

    location /localservice {
        # Set Proxied Headers to Originals
        proxy_pass          http://host.docker.internal:3000;
        proxy_read_timeout  90;
    }

    location /static/localservice {
        # Set Proxied Headers to Originals
        proxy_pass          http://host.docker.internal:3000;
        proxy_read_timeout  90;
    }

}

Все мои файлы в / microservice маршрутизируются правильно и возвращаются с 200, кроме файлов в / static. Из nginx http-access.log у меня есть кое-что странное, чего я не могу понять:

remote_addr:[172.17.0.2] time_local:[13/Jan/2019:00:24:24 +0000] upstream_addr:[host.ip:3000] status:[404] bytes_sent:[7626] hostname:[f7215dd04bdd] file_requested:[/etc/nginx/html/logos/image.png]

Это странно, потому что создается URL-адрес запроса: http://traefik.domain/static/localservice/logos/image.png. Nginx где-то переписывает / static с пути? Любая помощь приветствуется, спасибо!


person L. Norman    schedule 13.01.2019    source источник


Ответы (1)


Это оказалось проблемой с траэфиком. Я установил traefik.frontend.rules программно, что PathPrefixStrip перезаписывает мои желаемые правила. Мне следовало более внимательно прочитать документацию по Traefik Matchers. Кроме того, я нашел этот ответ очень полезным Почему PathPrefixStrip работает, когда PathPrefix не будет?

person L. Norman    schedule 14.01.2019