Nginx аудио файлы (wav / ogg / mp3) не работают - PullRequest
1 голос
/ 07 марта 2020

Aud ios на prod не работает, а работает нормально в среде разработчика (Angular 7).

Конфигурация Prod (VPS):

  • Ubuntu 18
  • Nginx
  • Давайте зашифруем

AudioService:

export class AudioService {

    audio = new Audio();

    constructor() { }

    isPlaying() {
        return this.audio.currentTime > 0 && !this.audio.paused && !this.audio.ended && this.audio.readyState > 2;
    }

    play(name: string): void {
        this.audio.src = `assets/audio/${name}`;
        this.audio.crossOrigin = 'anonymous';
        this.audio.load();

        if (!this.isPlaying()) {
            this.audio.play();
        }
    }

    pause(): void {
        if (this.isPlaying()) {
            this.audio.pause();
        }
    }
}

CORS включены на стороне Nodejs ( используя гнездо js). main.ts :

app.enableCors();

Chrome log:

Uncaught (в обещании) DOMException: Не удалось загрузить, потому что поддерживаемый источник не найден.

Firefox log:

NotSupportedError: Медиа-ресурс, указанный атрибутом sr c или назначенный объект медиа-провайдера не подходит.

Глядя на сетевую консоль, мы видим myaudio.wav с:

Код состояния: 206 Частичное содержимое

Примечание: загрузка изображений работает нормально!

РЕДАКТИРОВАТЬ:

Nginx config / etc / nginx / sites-available / mywebsite :

# Redirection
server {
   # if ($host = mywebsite.com) {
   #     return 301 https://$host$request_uri;
   # } # managed by Certbot

    listen 80;
    listen [::]:80;
    server_name mywebsite.com www.mywebsite.com;
    return 301 https://$host$request_uri;
    #return 404; # managed by Certbot

}

# Config
server {
     server_name mywebsite.com www.mywebsite.com;

     root /home/foo/mywebsite/gui;

     index index.html index.htm;

     location / {
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_set_header X-NginX-Proxy true;
       proxy_pass    http://my.ip:3000/;

       # Websocket
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }

    if ($host = 'www.mywebsite.com') {
       return 301 https://mywebsite.com$request_uri;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
}

В среде разработчика localhost: 4200 / assets / audio / myaudio.wav → отлично работает

В среде Prod https://mywebsite.com/assets/audio/myaudio.wav → возвращает домашнюю страницу

Пока https://mywebsite.com/assets/image.jpg → отлично работает

Только од ios не работают.

1 Ответ

1 голос
/ 22 марта 2020

Установите max_ranges на 0.

Для вашего случая это будет выглядеть примерно так:

location ~ \.wav$ {
    max_ranges 0;
}

Значение правила применяется к каждому wav файл независимо от их местоположения.

...