Как настроить веб-сервер и VLESS на одном VPS?

Добрый день! 

У меня есть следующая ситуация: 
1) У меня имеется один VPS (Debian 12) с установленным xray, настроенным на три протокола. 
2) Второй VPS (Debian 12) с веб-сервером, включая Apache2, mariadb-server, phpMyAdmin и composer. Сам сайт представляет собой простую HTML-страницу-заглушку, созданную в конструкторе сайтов. 
3) Я хотел бы объединить эти два VPS, чтобы не платить за оба, и использовать SNI с моим собственным сайтом. 
4) Я нашёл удалённую статью, содержащую информацию о том, что это возможно; нужно лишь настроить веб-сервер на прослушивание localhost на нестандартном порту. 
5) Я начинающий пользователь, не имеющий опыта в разработке и сетевых технологиях. Моя единственная способность - следовать подробным инструкциям. Наиболее сложным для меня является установка пакетов с помощью команды apt install. 

Теперь опишу процесс, который я проделал: 
- Установил веб-сервер, сайт заработал — всё работает отлично. 
- Ознакомился с упомянутой статьёй и нашёл информацию о том, как заставить Apache прослушивать определённые IP и порты, дополнительно уточнив информацию у ChatGPT. 
- Установил xray, скопировав прежний конфигурационный файл (до переустановки сервера) и изменив только SNI, UUID и приватный ключ. Однако, при запуске xray возникла ошибка. Я попытался собрать конфигурацию с нуля, но результат остался прежним. 
- У меня возникло подозрение, что на этом этапе мог возникнуть конфликт с веб-сервером. Я обратился к конфигурациям Apache, сначала в конфиге ports, а затем в конфиге виртуального хоста. 
- В конфиге ports я нашёл три строки: основная с 80 портом и ещё две такие же. Как я понял, одна из них (mod_gnutls.c) касалась определённых возможностей Apache, а другая — настройки сертификата Let's Encrypt (из-за присутствия слова SSL). Аналогичный порт 80 также был указан в конфиге виртуального хоста. 

Что мне следует сделать дальше?
  • 12 декабря 2024 г. 16:43
Ответы на вопрос 2
Объединение веб-сервера и прокси-сервера VLESS (Xray) на одном VPS – это вполне осуществимая задача. Давайте пройдемся по основным шагам для вашей ситуации.

### Шаг 1: Проверка конфигурации Apache

Перед началом работы убедитесь, что ваш Apache настроен правильно и работает без ошибок. Убедитесь, что у вас есть следующие виртуальные хосты в конфигурации Apache.

1. Откройте конфигурацию Apache:
   ```bash
   sudo nano /etc/apache2/sites-available/000-default.conf
   ```

2. Убедитесь, что у вас есть следующее:
   ```apache
   <VirtualHost *:80>
       ServerName yourdomain.com
       DocumentRoot /var/www/html
   </VirtualHost>
   ```

Если вы хотите использовать разные порты, убедитесь, что они указаны и в файле конфигурации для Apache.

### Шаг 2: Настройка VLESS (Xray)

Теперь нам нужно настроить Xray для работы на другом порту.

1. Откройте конфигурационный файл Xray:
   ```bash
   sudo nano /etc/xray/config.json
   ```

2. Настройте VLESS на прослушивание локального порта. Например, используйте порт `443` для VLESS. Пример конфигурации для `config.json` может выглядеть так:
   ```json
   {
       "log": {
           "level": "info",
           "outbounds": null
       },
       "inbounds": [
           {
               "port": 443,
               "listen": "127.0.0.1",
               "protocol": "vless",
               "settings": {
                   "clients": [
                       {
                           "id": "YOUR_UUID",
                           "alterId": 0
                       }
                   ],
                   "decryption": "none"
               },
               "streamSettings": {
                   "network": "tls",
                   "tlsSettings": {
                       "certificates": [
                           {
                               "certificateFile": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
                               "keyFile": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
                           }
                       ]
                   }
               }
           }
       ],
       "outbounds": [{
           "protocol": "freedom",
           "settings": {}
       }]
   }
   ```

### Шаг 3: Настройка Apache для обратного проксирования

Теперь вам нужно настроить Apache для работы как обратный прокси для Xray. Убедитесь, что у вас установлены необходимые модули Apache:

```bash
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
```

После этого открываем конфигурацию виртуального хоста:

```bash
sudo nano /etc/apache2/sites-available/000-default.conf
```

Добавьте следующий блок в файл, чтобы настроить проксирование:

```apache
<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/html

    # Редирект HTTP на HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

<VirtualHost *:443>
    ServerName yourdomain.com

    ProxyPreserveHost On
    ProxyPass / vless://127.0.0.1:443
    ProxyPassReverse / vless://127.0.0.1:443

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
</VirtualHost>
```

### Шаг 4: Перезапустите службы

После всех изменений перезапустите Apache и Xray:

```bash
sudo systemctl restart apache2
sudo systemctl restart xray
```

### Шаг 5: Проверка

Проверьте, работает ли ваш сайт (перейдите на `https://yourdomain.com`). Также попробуйте подключиться к VLESS используя ваш клиент, указав `yourdomain.com` и UUID, который вы указали в конфигурации Xray.

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

Теперь ваш веб-сервер и Xray работают на одном VPS. Если у вас возникнут дополнительные вопросы или ошибки, не стесняйтесь спрашивать!
а) Вариант 1 - использовать xray на веб портах и fallback на сайт. 
Вариант 2 - использовать веб сервер на веб портах и проксирование к xray например через websockets.
Вариант 3 - использовать haproxy\nginx upstream proxy для проксирования сайта и xray по SNI.
б) Веб сервер должен работать по 80 и 443 портам. Вне зависимости от количества виртуальных хостов.
xray может работать на любом порту.
Похожие вопросы