✨ Обновлена настройка trust proxy и оптимизирована функция получения IP-адреса клиента
- Упрощена настройка trust proxy для работы с nginx proxy manager, теперь доверяем всем прокси. - Оптимизирована функция получения IP-адреса клиента с учетом заголовков от прокси и локальных адресов.
This commit is contained in:
parent
6c4753e9ad
commit
2e615ec92c
13
server.js
13
server.js
@ -14,9 +14,9 @@ require("dotenv").config();
|
|||||||
const app = express();
|
const app = express();
|
||||||
const PORT = process.env.PORT || 3000;
|
const PORT = process.env.PORT || 3000;
|
||||||
|
|
||||||
// Настройка trust proxy для правильного получения IP адресов через прокси
|
// Настройка trust proxy для nginx proxy manager
|
||||||
// Доверяем nginx proxy manager (обычно работает на localhost)
|
// Доверяем всем прокси (nginx proxy manager должен передавать X-Forwarded-For)
|
||||||
app.set("trust proxy", ["127.0.0.1", "::1", "::ffff:127.0.0.1"]);
|
app.set("trust proxy", true);
|
||||||
|
|
||||||
// Создаем директорию для аватарок, если её нет
|
// Создаем директорию для аватарок, если её нет
|
||||||
const uploadsDir = path.join(__dirname, "public", "uploads");
|
const uploadsDir = path.join(__dirname, "public", "uploads");
|
||||||
@ -296,17 +296,16 @@ function logAction(userId, actionType, details, ipAddress) {
|
|||||||
|
|
||||||
// Функция для получения IP-адреса клиента
|
// Функция для получения IP-адреса клиента
|
||||||
function getClientIP(req) {
|
function getClientIP(req) {
|
||||||
// Используем встроенный в Express метод req.ip, который учитывает trust proxy
|
// Используем req.ip который учитывает trust proxy
|
||||||
let ip = req.ip;
|
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") {
|
if (!ip || ip === "127.0.0.1" || ip === "::1" || ip === "::ffff:127.0.0.1") {
|
||||||
// Проверяем заголовки прокси по приоритету
|
// Проверяем X-Forwarded-For заголовок от nginx proxy manager
|
||||||
ip =
|
ip =
|
||||||
req.headers["x-forwarded-for"]?.split(",")[0].trim() ||
|
req.headers["x-forwarded-for"]?.split(",")[0].trim() ||
|
||||||
req.headers["x-real-ip"] ||
|
req.headers["x-real-ip"] ||
|
||||||
req.headers["x-client-ip"] ||
|
req.headers["x-client-ip"] ||
|
||||||
req.headers["cf-connecting-ip"] || // Для Cloudflare
|
|
||||||
req.connection?.remoteAddress ||
|
req.connection?.remoteAddress ||
|
||||||
req.socket?.remoteAddress ||
|
req.socket?.remoteAddress ||
|
||||||
req.connection?.socket?.remoteAddress ||
|
req.connection?.socket?.remoteAddress ||
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user