Да всё намного проще. Ошибка 400 в связке Xray/веб-сервер в 95% случаев говорит о том, что пришёл не тот тип трафика, который ожидается. Проще говоря, вы уже расшифровали трафик, который пришёл например на Xray, и пытаетесь ещё раз его расшифровать стоящим за ним веб сервером.
Вы определитесь, что у вас стоит снаружи на 443 порту, а что внутри на 8443 например. Возможны оба варианта, и не всегда нужно использовать прокси протокол.
Вы бы лучше сперва просто настроили отдельно веб сервер на 443 порту, чтобы у вас сайт заработал, а уже потом настраивали бы всё остальное.
Вот например мой xray конфиг. Кто хоть раз в жизни реалити настраивал не средствами панели, тот сразу увидит что это банальная элементарщина. По-сути изменён только target, вместо фейк сайта указан локалхост, всё остальное обычный реалити.
Ещё как видите, в моём случае Xray слушает на 443 а веб-сервер стоит за ним на 8443. В этом случае прокси протокол не используется. XVER должен быть 0!
Спойлер
{
"listen": "IP",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "ID",
"email": "admin",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"target": "127.0.0.1:8443",
"serverNames": ["domain.name"],
"privateKey": "PRIVATE_KEY",
"shortIds": ["SHORT_ID"],
"show": false,
"xver": 0
}
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"tag": "reality"
}