From 2e615ec92c2e0e3ca21fe0f3dab6a1640a518a37 Mon Sep 17 00:00:00 2001 From: Fovway Date: Sun, 26 Oct 2025 06:52:45 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20trust=20proxy=20=D0=B8=20=D0=BE=D0=BF?= =?UTF-8?q?=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20IP-?= =?UTF-8?q?=D0=B0=D0=B4=D1=80=D0=B5=D1=81=D0=B0=20=D0=BA=D0=BB=D0=B8=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Упрощена настройка trust proxy для работы с nginx proxy manager, теперь доверяем всем прокси. - Оптимизирована функция получения IP-адреса клиента с учетом заголовков от прокси и локальных адресов. --- server.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index 4907f9b..2eb1752 100644 --- a/server.js +++ b/server.js @@ -14,9 +14,9 @@ require("dotenv").config(); const app = express(); const PORT = process.env.PORT || 3000; -// Настройка trust proxy для правильного получения IP адресов через прокси -// Доверяем nginx proxy manager (обычно работает на localhost) -app.set("trust proxy", ["127.0.0.1", "::1", "::ffff:127.0.0.1"]); +// Настройка trust proxy для nginx proxy manager +// Доверяем всем прокси (nginx proxy manager должен передавать X-Forwarded-For) +app.set("trust proxy", true); // Создаем директорию для аватарок, если её нет const uploadsDir = path.join(__dirname, "public", "uploads"); @@ -296,17 +296,16 @@ function logAction(userId, actionType, details, ipAddress) { // Функция для получения IP-адреса клиента function getClientIP(req) { - // Используем встроенный в Express метод req.ip, который учитывает trust proxy + // Используем req.ip который учитывает trust proxy let ip = req.ip; - // Если req.ip является локальным адресом, пробуем получить из заголовков + // Если req.ip не определен или является локальным адресом nginx proxy manager if (!ip || ip === "127.0.0.1" || ip === "::1" || ip === "::ffff:127.0.0.1") { - // Проверяем заголовки прокси по приоритету + // Проверяем X-Forwarded-For заголовок от nginx proxy manager ip = req.headers["x-forwarded-for"]?.split(",")[0].trim() || req.headers["x-real-ip"] || req.headers["x-client-ip"] || - req.headers["cf-connecting-ip"] || // Для Cloudflare req.connection?.remoteAddress || req.socket?.remoteAddress || req.connection?.socket?.remoteAddress ||