Как правильно настроить обратный прокси (reverse proxy) для Power BI Report Server с помощью nginx?

Какой конфигурации необходимо придерживаться, чтобы nginx корректно проксировал запросы к Power BI Report Server? Ниже приведен пример конфигурации виртуального хоста: 

<pre><code>server {
    listen 80;
    server_name pbi.domain.net;

    location = / {
        return 301 /Reports/;
    }

    location /Reports/ {
        proxy_pass http://192.168.105.70;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Authorization $http_authorization;
        proxy_set_header Connection keep-alive;
    }
}</code></pre> 

При попытке подключения возникает окно авторизации, после ввода логина и пароля появляется ошибка 400. 

<pre><code>"GET /Reports/ HTTP/1.1" 400 0 "-"   "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"</code></pre> 

Каковы возможные причины данной ошибки и как можно их устранить?
  • 4 марта 2025 г. 7:34
Ответы на вопрос 1
Ошибки 400 (Bad Request) в вашем случае могут возникать по нескольким причинам, особенно при настройке обратного прокси для Power BI Report Server с использованием nginx. Рассмотрим основные моменты, которые могут помочь в устранении проблемы и корректной настройке.

### Корректировка конфигурации

1. **Проверка URL-адреса**: Убедитесь, что URL-адрес, указанный в `proxy_pass`, является правильным и соответствует тому, как настроен сам Power BI Report Server. 

```nginx
proxy_pass http://192.168.105.70/Reports/;
```

Обратите внимание на слеш в конце URL. Это важно для правильной проксировки запросов.

2. **Изменение заголовков**: Иногда заголовок `Host` может мешать. Попробуйте убрать его или переопределить:

```nginx
proxy_set_header Host $host;
```

Можно попробовать указать `Host` без переменной, чтобы он соответствовал адресу сервера:

```nginx
proxy_set_header Host 192.168.105.70;
```

3. **Настройка `Origin` заголовка**: Power BI Report Server может использовать заголовок `Origin`. Попробуйте добавить:

```nginx
proxy_set_header Origin $http_origin;
```

4. **WebSocket поддержка**: Если ваш сервер использует WebSocket, добавьте следующую конфигурацию для него:

```nginx
location /Reports/ {
    proxy_pass http://192.168.105.70/Reports/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
```

5. **Включение SSL**: Если ваш сайт использует HTTPS, не забудьте настроить с помощью `listen 443 ssl` и добавить необходимые сертификаты.

### Полный пример конфигурации

Полная конфигурация может выглядеть следующим образом:

```nginx
server {
    listen 80;
    server_name pbi.domain.net;

    location = / {
        return 301 /Reports/;
    }

    location /Reports/ {
        proxy_pass http://192.168.105.70/Reports/;
        proxy_set_header Host 192.168.105.70; # или $host
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Authorization $http_authorization;
        proxy_set_header Connection keep-alive;
        proxy_http_version 1.1; # для совместимости с WebSocket
        proxy_set_header Upgrade $http_upgrade; # если используется WebSocket
        proxy_set_header Connection "upgrade"; # если используется WebSocket
        proxy_set_header Origin $http_origin; # возможно, требуется для CORS
    }
}
```

### Дополнительные проверки

- **Логи**: Просмотрите логи nginx (`/var/log/nginx/error.log` или аналогичный путь) для получения дополнительной информации о возникшей ошибке.
- **Настройки Power BI**: Убедитесь, что настройки Power BI Report Server позволяют доступ извне.
- **Фаервол и безопасность**: Убедитесь, что фаервол на сервере также не блокирует запросы.

### Заключение

Следуя приведенным примерам, вы сможете настроить nginx в качестве обратного прокси для Power BI Report Server. Попробуйте применить приведенные рекомендации и, если ошибка все еще возникает, проверьте логи для более детальной информации об источнике проблемы.
Похожие вопросы