Как правильно настроить VLESS с использованием nginx?

У меня есть сервер на базе Debian 12. Я планирую установить VPN с использованием протокола VLESS. Однако, поскольку на 443 порту уже находятся мои сайты, я хочу использовать этот же порт для VPN и настроить Nginx как реверс-прокси. 

Вот конфигурация VLESS:

<pre><code>{
  "inbounds": [
    {
      "port": 8443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "c6d44e18-0bdb-4f56-9862-4f00c1b4862e",
            "level": 0
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none",
        "xtlsSettings": {
          "flow": "xtls-rprx-vision"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}</code></pre>

Эта конфигурация находится в файле /usr/local/etc/xray/config.json. Я также настраиваю поддомен vpn.site.ru в Nginx:

<pre><code>server {
    listen 443 ssl http2;
    server_name vpn.site.ru;  

    location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8443; 
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

    ssl_certificate /etc/letsencrypt/live/vpn.site.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/vpn.site.ru/privkey.pem; # managed by Certbot
}</code></pre>

Я перенаправляю запросы на локальный порт 8443, где запущен Xray. Однако при подключении возникла проблема: VPN не работает, и появляется ошибка. Как можно решить эту проблему?
  • 9 сентября 2024 г. 21:03
Ответы на вопрос 2
Для настройки VLESS через Nginx на порту 443 при условии, что этот порт уже используется для веб-сайтов, вы правильно используете Nginx в качестве реверс-прокси. Однако в вашей конфигурации могут быть некоторые аспекты, которые требуют внимания.

Вот некоторые рекомендации, которые могут помочь вам правильно настроить VPN на базе VLESS:

### Конфигурация VLESS

1. **Порт и Предпочтения о безопасности**: Убедитесь, что вы хотите использовать `xtls` (как в вашем случае) или `tls`. Например, XTLS имеет свои преимущества, такие как меньшая нагрузка на сервер для некоторых пользователей, но может потребовать дополнительных настроек.

2. **Порт для VLESS**: Порт 8443 вы можете заменить на любой другой неиспользуемый порт, чтобы внести больше ясности и избежать конфликтов, однако, если вы планируете использовать реверс-прокси, то этот порт должен оставаться.

### Настройка Nginx

Ваш Nginx конфиг выглядит правильно, но есть некоторые моменты, которые стоит проверить и исправить:

1. **Проверьте Nginx на ошибки**: У вас могут быть ошибки в конфигурации Nginx, которые мешают ему корректно проксировать трафик. Проверьте синтаксис командой:

   ```bash
   sudo nginx -t
   ```

2. **Логи**:
   - Проверьте лог файлы Nginx для получения информации о ошибках: `/var/log/nginx/error.log`.
   - Также рекомендуется включить логи для самого Xray и проверить их на наличие ошибок.

3. **Заголовки**: Убедитесь, что вы правильно отправляете заголовки, необходимые для VLESS. Попробуйте изменить вашу секцию `location` следующим образом:

   ```nginx
   location / {
       proxy_pass http://127.0.0.1:8443;
       proxy_redirect off;
       proxy_http_version 1.1;
       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_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
   }
   ```

4. **SSL Редиректы**: Убедитесь, что у вас правильно настроены SSL-сертификаты, и проверьте, что они обновляются и не истекли.

### Проверка подключения

После настройки попробуйте подключиться к VPN:

1. Убедитесь, что клиент использует правильный ID и настройки:
   - ID (UUID) необходимо точно скопировать в клиентское приложение (например, V2Ray или Xray).
   - Обратите внимание на настройки протокола на клиенте и убедитесь, что они совпадают с вашим сервером.

2. Проверьте, что клиент подключается именно к `vpn.site.ru` и на порт 443. 

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

- Если вы можете использовать `tcp` без `xtls`, а также попробуйте использовать более стандартный способ шифрования (`tls`) для упрощения отладки.
- Разработайте минимум конфигурации (например, уберите сложные настройки и сначала протестируйте, а затем добавляйте по мере необходимости).

Если после выполнения всех этих действий проблема не решится, предоставьте логи и дополнительные детали о том, какая ошибка возникает, чтобы мы могли помочь более конкретно.
XTLS-Vision требует прямой доступ к TLS-сессии, пережёванная через nginx не подойдёт. Можно через nginx всё же проксировать на XRAY, но целиком TCP-поток, не залезая внутрь TLS-сессии. Наподобие такого: https://nginx.org/ru/docs/stream/ngx_stream_ssl_pr... 
Внутренние сайты на nginx тогда придётся переложить с 443 порта на какой-то другой и тоже проксировать.
И да, "flow": "xtls-rprx-vision" задаётся в секции "clients", насколько помню.
Похожие вопросы