# Примеры настройки WSS соединений

## Шаг 1. Публикуем HTTPS порт на внешнем IP

*Примечание: Если модуль находится за NAT, то настройки надо делать на соответствующем проксирующем устройстве.*

Настройки для FreePBX с внешним адресом:

По умолчанию (если включен модуль Firewall) FreePBX блокирует все неизвестные ему порты. Добавим нужные в настройках файрвола:

*пример ссылки на соответствующий пункт меню*<https://freepbx.example.com/admin/config.php?display=firewall>

<figure><img src="/files/Th5h8j2LshhY0Md2pvUq" alt=""><figcaption></figcaption></figure>

## Шаг 2. В DNS прописываем запись для внешнего адреса, на котором опубликован модуль

Как правило, делается через личный кабинет провайдера, который обслуживает домен клиента.

## Шаг 3. Выпускаем SSL сертификат

Если у клиента уже есть сертификат, то копируем файлы (сам сертификат, ключ) на сервер с модулем. Если сертификата нет, то выпускаем (Тут очень много вариантов решения).

Вариант выпуска бесплатного сертификата через FreePBX:\
<https://freepbx.example.com/admin/config.php?display=certman>

<figure><img src="/files/agFNWaQSjInGVzv1oESv" alt=""><figcaption></figcaption></figure>

## Шаг 4. Прописываем путь до сертификата в модуле

<figure><img src="/files/DVhPoEX9ZCxEZrNZppoD" alt=""><figcaption></figcaption></figure>

**Сохраняем настройки.**

## Шаг 5. Указываем адрес веб-сокетов куда следует

Ссылка вида [wss://freepbx.example.com:8078/…](wss://freepbx.example.com:8078/%E2%80%A6)

{% hint style="info" %}
При перевыпуске сертификата необходимо перезапустить службу, чтобы модуль подгрузил обновленные файлы сертификата.
{% endhint %}

В данном **примере** показано, как настроить WSS-соединение с использованием **Nginx** или **Apache**

## Настройка для Nginx

1. Открыть конфигурационный файл Nginx:

```bash
nano /etc/nginx/nginx.conf
```

2. Добавить конфигурацию для WSS:

```bash
server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /etc/nginx/ssl/server.crt;   
    # Или путь к вашему SSL-сертификату от Let's Encrypt
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location /ws/ {
        proxy_pass wss://freepbx.example.com:8078;   
        # Адрес вашего WebSocket сервера
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        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 X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_set_header Origin "";
    }
}
```

3. Проверить конфигурацию и перезапустить Nginx:

```bash
nginx -t
systemctl restart nginx
```

## Настройка для Apache

1. Открыть конфигурационный файл Apache:

```bash
nano /etc/httpd/conf.d/ssl.conf
```

2. Добавить или изменить блок конфигурации для WSS:

```bash
<VirtualHost *:443>
    ServerName your_domain.com

    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/server.crt   
    # Или путь к вашему SSL-сертификату от Let's Encrypt
    SSLCertificateKeyFile /etc/httpd/ssl/server.key

    <Location /ws/>
        ProxyPass "wss://freepbx.example.com:8078/"   
        # Адрес вашего WebSocket сервера
        ProxyPassReverse "wss://freepbx.example.com:8078/"
        ProxyPreserveHost On
        RequestHeader set Connection "upgrade"
        RequestHeader set Upgrade "websocket"
    </Location>
</VirtualHost>
```

3. Перезапустить Apache:

```bash
systemctl restart httpd
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/for-admins/primery-nastroiki-wss-soedinenii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
