• Поп ап из плагина hustle не отображается вне админки, в чем проблема?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Если Popup из плагина Hustle для WordPress отображается только в админке, но не на фронтенде сайта, это может быть связано с несколькими возможными причинами:

    • Неактивный плагин: Убедитесь, что плагин Hustle активирован на вашем сайте. Если плагин не активирован, то его функциональность не будет работать.

    • Конфликт с другим плагином: Некоторые плагины могут конфликтовать с плагином Hustle и блокировать отображение Popup. Попробуйте временно отключить все другие плагины, кроме Hustle, и проверить, появится ли Popup на сайте.

    • Тема: Некоторые темы WordPress могут также блокировать отображение Popup. Попробуйте временно изменить тему на стандартную WordPress Twenty Twenty-One и проверить, появится ли Popup на сайте.

    • Блокировщик рекламы: Если на вашем сайте или в браузере установлены блокировщики рекламы, они могут блокировать отображение Popup. Проверьте, отключен ли блокировщик рекламы на вашем сайте/в браузере.

    • Неактивные условия отображения: Проверьте условия отображения Popup в настройках плагина Hustle. Убедитесь, что выбранные условия активны на вашем сайте и что Popup должен отображаться на нужной странице.

    Если ответ помог, не забудьте отметить его как решение вашего вопроса.
    Ответ написан
    Комментировать
  • Почему у меня на странице магазина woocommrce выводятся одинаковые товары?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Возможно, проблема заключается в наличии дубликатов товаров в базе данных WooCommerce или в конфигурации настроек. Ниже приведены некоторые возможные причины и способы их решения:

    • Дубликаты товаров в базе данных: убедитесь, что у вас нет дубликатов товаров в базе данных. Вы можете проверить это, открыв таблицу "wp_posts" в базе данных WordPress и убедитесь, что у каждого товара есть уникальный идентификатор (ID). Если вы обнаружили дубликаты, удалите их.

    • Кэширование: проверьте, используете ли вы какие-либо плагины кэширования на вашем сайте. Если да, попробуйте отключить кэширование и проверить, решит ли это проблему.

    • Конфигурация настроек: проверьте настройки WooCommerce в админ-панели WordPress и убедитесь, что вы не настроили какие-либо фильтры или параметры, которые могут приводить к повторному выводу тех же товаров.

    • Проверьте наличие дубликатов в шаблоне вашего магазина. Убедитесь, что в коде не используется какой-либо цикл, который мог бы выводить один и тот же товар несколько раз.

    • Обновление: обновите все плагины и темы до последней версии. Если проблема сохраняется, попробуйте отключить все плагины, кроме WooCommerce, и проверить, устранится ли проблема. Если да, включайте плагины по одному, чтобы определить, какой из них вызывает проблему.

    Если ответ помог, не забудьте отметить его как решение вашего вопроса.
    Ответ написан
    Комментировать
  • Как настроить anydesk на android?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    • Если вы используете какое-то приложение для оптимизации работы вашего устройства (например, приложения для очистки кэша или ускорения работы устройства), попробуйте временно отключить его и проверить, работает ли AnyDesk после перезапуска устройства.
    • Проверьте настройки безопасности вашего устройства. Некоторые настройки безопасности могут блокировать работу AnyDesk, особенно если вы используете неконтролируемый доступ.
    • Если вы используете приложение AnyDesk с root правами, попробуйте отключить их. В некоторых случаях использование приложений с root правами может привести к нестабильной работе.
    • Убедитесь, что у вас установлена последняя версия приложения AnyDesk и плагина AD1. Если вы используете старые версии приложений, это может привести к нестабильной работе.
    • Удалите AnyDesk с вашего устройства и переустановите его заново. После установки попробуйте настроить неконтролируемый доступ и проверить, работает ли он.

    Если ответ помог, не забудьте отметить его как решение вашего вопроса.
    Ответ написан
    Комментировать
  • Принимать созданные сделки с Битрикс24 в гугл таблицы?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Для получения значения ключа "ID" из объекта e.parameter, вы можете использовать следующий код:
    let dealId = e.parameter['data[FIELDS][ID]'];
    SpreadsheetApp.getActive().getActiveSheet().getRange(1,2).setValue(dealId);

    Обратите внимание, что ключ "ID" находится внутри объекта data[FIELDS], поэтому мы используем квадратные скобки для доступа к этому ключу. В кавычках мы указываем строку "data[FIELDS][ID]", которая соответствует ключу объекта e.parameter.

    Таким образом, вы можете получить значение ID сделки и записать его в ячейку вашей Google таблицы.
    Ответ написан
  • Как добавить функционал в код с помощью promise и async/await?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Чтобы реализовать функционал выбора конкретного места из списка freeSeats, можно добавить аргумент функции bookTickets, который будет принимать массив выбранных мест. Затем нужно проверить, что все места из выбранного массива находятся в списке свободных мест freeSeats. Если все места доступны, то их можно забронировать.

    Чтобы реализовать выбор формата фильма и наличия еды, можно добавить соответствующие параметры в вызов функции bookTickets. Затем можно добавить проверки на соответствие параметров формата и наличия еды заданным значениям в объекте seats. Если формат фильма или наличие еды не соответствуют требованиям, можно выкинуть ошибку.

    Вот пример, как можно изменить код с учетом этих требований:
    Раскрыть код

    async function bookTickets(date, time, numTickets, selectedSeats = [], is3D = false, hasFood = false){
      try{
        const availableSeats = await checkTicketsAvailable(date, time, numTickets);
        
        // проверка наличия выбранных мест
        const unavailableSeats = selectedSeats.filter(seat => !seats[date][time].freeSeats.includes(seat));
        if (unavailableSeats.length > 0) {
          throw new Error(`Места ${unavailableSeats.join(', ')} недоступны`);
        }
    
        // проверка формата и наличия продуктов питания
        if ((is3D && !seats[date][time].format) || (hasFood && !seats[date][time].food)) {
          throw new Error(`Невозможно забронировать билеты с выбранными параметрами`);
        }
    
        console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
        if (selectedSeats.length > 0) {
          console.log(`Выбранные места: ${selectedSeats.join(', ')}`);
        }
        if (is3D) {
          console.log(`Формат фильма: 3D`);
        } else {
          console.log(`Формат фильма: 2D`);
        }
        if (hasFood) {
          console.log(`С едой`);
        } else {
          console.log(`Без еды`);
        }
      } catch (error) {
        console.error(error);
      }
    }
    
    bookTickets('2023-02-17', '15:00', 2, ['11', '21'], false, true);


    В данном примере добавлены аргументы selectedSeats, is3D и hasFood для выбора мест, формата фильма и наличия еды соответственно. Затем в функции bookTickets проверяется доступность выбранных мест и соответствие параметров формата и наличия еды требованиям. Выводится сообщение о бронировании билетов и выбранных параметрах.
    Ответ написан
    Комментировать
  • Нужно ли защищать api веб админки телеграм бота?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Да, необходимо защищать API админки, поскольку это поможет предотвратить несанкционированный доступ к вашей системе и защитить данные, которые обрабатывает ваш бот. Ваше предложение использовать авторизацию на JWT - это хороший вариант, чтобы обеспечить безопасность вашего API.

    JWT (JSON Web Token) - это стандарт для создания токенов доступа, которые могут использоваться для аутентификации и авторизации пользователей в приложениях. Токены JWT состоят из заголовка, полезной нагрузки и подписи, и могут быть проверены на подлинность при каждом запросе на API.

    При использовании JWT для защиты вашего API вы можете создать токен доступа при запуске бота и использовать его для каждого запроса к вашей админке. Также можно установить срок действия токена и обновлять его периодически для повышения безопасности.
    Либо можете создать и прописать некий статичный секретный ключ доступа, который будет знать только бот и админка, которая в свою очередь будет сверять его каждый раз при поступлении запроса к ней извне.

    Кроме того, для усиления безопасности API админки вы можете использовать HTTPS-протокол для шифрования данных, передаваемых между ботом и админкой. Это обеспечит дополнительную защиту от перехвата данных.
    Ответ написан
    Комментировать
  • Как в rhel 9 / oracle 9.1 задать динамический motd для ssh?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Для задания динамического motd в RHEL 9 можно использовать модуль PAM (Pluggable Authentication Modules) и скрипты в папке /etc/update-motd.d/, аналогично Ubuntu.

    В RHEL 9 можно установить пакет pam_motd, который обеспечивает генерацию динамического motd при входе по ssh. Для этого нужно выполнить следующие шаги:

    1. Установите пакет pam_motd:
    sudo yum install pam_motd

    2. Отредактируйте файл /etc/pam.d/sshd и добавьте следующую строку в конец блока session:
    session optional pam_motd.so
    Эта строка добавит модуль pam_motd в PAM-стек при входе по ssh.

    3. Создайте скрипты в папке /etc/update-motd.d/, которые будут генерировать нужный вам motd. Например, можно создать скрипт /etc/update-motd.d/10-disk-usage с содержимым:
    #!/bin/bash
    df -h | grep '^/dev/' | awk '{print $1 " " $5}'

    Этот скрипт покажет использование дисковых разделов.

    4. Сделайте скрипты исполняемыми:
    sudo chmod +x /etc/update-motd.d/*

    5. Перезапустите sshd, чтобы изменения вступили в силу:
    sudo systemctl restart sshd

    Теперь при входе по ssh будет отображаться динамический motd, сгенерированный скриптами в папке /etc/update-motd.d/.
    Ответ написан
  • PHP curl стал выдавать ошибку?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Судя по логу из спойлера, запрос делается к сайту который использует Cloudflare в качестве WAF и защиты от DDoS атак.
    Как раз таки Cloudflare при блокировке поступающего запроса на защищаемый им сайт возвращает Error 1020 Access Denied (подробнее тут).
    Либо администрация сайта усилила правила фильтрации поступающего HTTP трафика, либо система защиты от атак поняла что запросы с вашего IP или User-Agent'а являются автоматическими (ботом), в связи с чем начала блокировать их.

    Попробуйте:
    • изменить значение для CURLOPT_USERAGENT, выставив реальный User-Agent обычного браузера
    • изменить IP с которого делается отправка такого запроса

    Затем выполните вопрос и залогируйте полный ответ (тело), а не только http-статус ответа.
    Если запрос пройдёт - значит всё отлично, а иначе увидите полный html вывод ответа, на базе которого можно будет лучше понять какие дальнейшие действия можно предпринимать чтобы "обойти" защиту.

    Если ответ помог, не забудьте отметить его как решение вашего вопроса. Успехов!
    Ответ написан
    Комментировать
  • Почему div исчезает при нажатии tab?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Это происходит потому что классу .body задан режим отображения в виде display: flex с направлением flex-direction: row - таким образом два элемента выстраиваются на странице друг за другом в ряд по горизонтали (row), а свойство overflow: hidden скрывает содержимое выходящее за границы элемента, которому был назначен класс .body.
    Отключив свойство overflow через DevTools браузера или в коде, увидите ту самую вторую кнопку (её маленький кусочек), а на странице в браузере появится горизонтальный скроллбар. Либо можно через DevTools просто навести на второй div и браузер подсветит где этот элемент находится в окне, скриншот:
    609818e60650e671540025.png
    Почему при нажатии tab одна кнопка будто пропадает, а другая появляется?
    - потому что при помощи tab вы изменяете фокус с одного элемента на другой, и браузер автоматически фокусирует вас на вторую кнопку, учитывая при этом значение свойства overflow - оно как раз и скрывает от нашего взора вторую, не "активную" кнопку (потому что она становится за пределами фокуса, и не вмещается в текущий viewport страницы).
    Как исправить это поведение в браузере?
    - способов несколько и зависит от того что хотите в итоге получить.
    Но пожалуй самыми правильными в рамках текущего кода будут один из этих:
    1. Установить значение column в свойство flex-direction у класса .body60981b2c2c938810907091.png
    2. Убрать свойство flex-shrink у CSS селектора .body>div, тогда браузер не будет пытаться переносить элементы на новую строку/колонку согласно настройкам flex
      60981bd9cca60364324714.png
    Ответ написан
    Комментировать
  • Почему не перезагружается браузер при редактировании кода с расширением PHP на локальном сайте Wordpress?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    С кодом gulp-файла практически всё в порядке.
    Убедитесь что при открытии вкладки в браузере, справа сверху в углу сайта появляется похожая надпись как на скриншоте - это означает что текущая вкладка успешно подключилась к серверу Browsersync, в противном случае что-то мешает подключению (расширения в браузере, CORS политики, запрет загрузки http ресурсов и соединений из под открытой по https странице)
    609755e32e832804684561.png
    Также, можно дополнительно посмотреть "админку" сервера Browsersync со списком подключенных вкладок (браузеров) к серверу: localhost:3001 (раздел: Current Connections - скриншот ниже).
    И нажав на кнопку "Reload all" (скриншот ниже) проверить перезагрузится ли вкладка с сайтом.
    Если перезагрузится, значит проблема не в подключении к серверу Browsersync, значит что-то не так в тасках gulp/путях к файлам за изменениями которых вы наблюдаете из под Gulp.
    Если же не перезагрузится, то точно проблема с подключением к серверу Browsersync из под вкладки с сайтом.
    60975a05b16d0030381815.png
    В целом советую посмотреть в DevTools браузера - консоль и вкладку Network, и изучить подробнее доки: https://www.browsersync.io/docs/options
    Ответ написан
    2 комментария
  • Чем PHPMailer отличается от обычной mail() функций??

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Функция mail() в PHP по сути вызывает встроенную в систему почтовую программу - стандартно, это sendmail в linux (также, возможно использовать qmail, postfix, но для этого надо сначала сконфигурировать PHP через .ini файл).
    Подробнее про Mail в PHP: https://www.php.net/manual/ru/book.mail.php
    И про основную проблему кроссплатформенного использования: https://habr.com/ru/post/26518/

    PHPMailer - это мощная библиотека, реализующая почтовые транспорты, а не использующая sendmail как стандартная mail() функция. Имеет из коробки большое количество возможностей, таких как (в списке представлена лишь малая часть):
    • полная поддержка SMTP, Qmail, POP3, IDN, DKIM;
    • поддержка SSL и TLS;
    • работает на любой win32 и *nix платформе;
    • гибкость отладки;
    • определяемые вручную заголовки писем;
    • совмещение нескольких сообщений и вложений;
    • встроенная поддержка изображений;
    • умеет посылать письма с множественными: адресатами (TO), копиями (CC), BCC и REPLY-TO;
    • многослойные/альтернативные сообщения для клиентов, которые не могут читать HTML письма;
    • поддержка 8 бит, base64, бинарного режима, и пригодного для печати формата;
    • перенос слов (word wrap);
    • сообщения в виде HTML (шаблоны);
    • библиотека проверена на множестве SMTP серверах: Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier;
    • библиотека используется под капотом таких гигантов: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla;

    Подробнее можно прочитать тут:
    https://jino.ru/journal/articles/pochta-phpmailer/
    https://www.sesmikcms.ru/pages/read/ischerpyvajusc...

    Помимо PHPMailer существуют и другие крутые библиотеки, оставляю список для интересующихся:
    Swiftmailer
    (Symfony) Mailer

    Если вы активно пользуетесь функцией mail() при разработке на PHP и до сих пор ещё не сталкивались с проблемами при её использовании на хостингах или на своих собственных серверах без соответствующего правильно настроенного окружения, то mail() вам идеально подходит. А когда столкнётесь с проблемами или захотите иметь больше возможностей из коробки, станут очевидными плюсы PHPMailer и других специализированных библиотек.
    Ответ написан
    1 комментарий
  • Как удалить все кроме одного файла в папке (bash)?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    #!/bin/bash
    
    set -e
    export LC_ALL=C
    export TZ=Europe/Moscow
    
    # папка с бэкапами
    backups_dir="/backups"
    # количество дней с момента создания файла/папки, после которого удалять бэкапы
    backups_expire_days=30
    # название файла (можно использовать маски), который нужно исключить из процесса удаления
    filename_to_exclude="myfile.bin"
    
    find "${backups_dir}/"* -ctime "+${backups_expire_days}" \( ! -name "${filename_to_exclude}" \) -exec rm -rf {} \;
    # можно подставлять сразу несколько название файлов, пример:
    # \( ! -name "myfile.bin" ! -name "*.log" \)

    ! Данный скрипт выполняет rm -rf, что опасно. Поэтому несколько раз перепроверьте, прежде чем выполнять в той или иной папке.
    Ответ написан
    5 комментариев
  • В каком жизненном цикле Vue 3 закрыть соединение с вебсокетом после закрытия клиентом сайта?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Надо понимать что вы имеете в виду под фразой "когда клиент выходит с сайта", и какие конкретно вебсокеты используете - стандартные, или либу Socket.io работающую по Websocket транспорту.
    • Если подразумеваете закрытие вкладки браузера клиентом (как пример), то в этот момент браузер разорвёт соединение с socket.io сервером, а на сервере произойдёт событие `disconnect` у конкретного сокета, который был привязан к данному подключению.
      Более того - при закрытии вкладки с сайтом, у Vue не вызывается `beforeUnmount` или `unmounted`, поэтому ваш код не сработает - клиент (браузер) ничего не отправит, сервер ничего не получит.
      *Но это можно реализовать самому через слушатель события `beforeunload` у `window` (правда событие не сработает, если произойдёт вылет браузера или самой ОС) , подробнее тут:
      https://forum.vuejs.org/t/detect-browser-close/5001/2
      https://developer.mozilla.org/en-US/docs/Web/API/B...
      https://developers.google.com/web/updates/2018/07/...
      https://developer.mozilla.org/en-US/docs/Web/API/W...

    • Если подразумеваете выход из учетной записи клиента на сайте, то ваш код сработает

    Пример обработки первого случая (когда клиент выходит с сайта закрывая вкладку) на серверной стороне, если используете Socket.io (по аналогии можно и с обычными вебсокетами, но там придётся детектить разрыв соединения на базе отсутствия ответа на ping-pong со стороны браузера):
    // https://socket.io/docs/v4/server-initialization/
    import * as Server from 'socket.io'
    const io = Server()
    io.listen(3000)
    
    // коллекция сокет-подключений
    const connections = new Set()
    
    // когда Socket.io сервер словил новое подключение
    io.on('connection', (s) => {
      // добавляем это подключение в коллекцию
      connections.add(s)
      // слушаем событие отключения сокета и реагируем на него
      s.once('disconnect', () => {
        // удаляем данное сокет-подключение из коллекции
        connections.delete(s)
      })
    })
    // connections.size - покажет размер коллекции, то есть количество подключенных клиентов к серверу Socket.io (онлайн на сайте в вашем случае)

    Однако данный код можно не использовать в таком виде, тк в Socket.io уже есть под капотом готовые функции и коллекции для работы с подключенными сокетами, поэтому нет необходимости создавать и хранить в памяти свои собственные списки сокет-подключений.
    Например в v4, количество/список подключенных клиентов можно получить таким способом:
    // https://socket.io/docs/v4/server-instance/#Server-engine
    io.engine.clientsCount
    // или:
    // https://socket.io/docs/v4/server-api/#namespace-allSockets
    await io.allSockets()
    Ответ написан
    1 комментарий
  • Телеграм бот получает уведомление, что пользователь изменил / удалил сообщение?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Согласно документации (по состоянию на март 2021), бот может получать уведомления от TG о том что юзер изменил своё сообщение, но при этом не получает уведомление в случае если сообщение было удалено юзером.
    https://core.telegram.org/bots/api#update - edited_message

    Чтобы проще было тестировать разные события, которые бот может получать от юзера, советую воспользоваться этим ботом: https://t.me/RawDataBot - будет отправлять сообщения с телом пришедшего уведомления от TG.
    Ответ написан
    1 комментарий
  • Как сделать адаптивную верстку под мобильные устройства в этом коде?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Код:
    @media screen and (max-width: 980px)
    {
    	.wrap {
    	width: inherit;
    	min-width: inherit;
    	}
    	.blockapps {
    	width: inherit;
    	}
    }
    
    @media screen and (min-width: 980px)
    {
    
    	.wrap {
    	width: 1060px;	
    	min-width: 1060px;
    	}
    	.blockapps {
    	width: 800px;
    	}
    
    }

    #UPD: Для отображения блоков вертикально на мобильном устройстве,необходимо добавить в HEAD сектор страницы этот код:
    <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
    Ответ написан
    Комментировать
  • Как реализовать на сайте безопасную сделку?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Да все верно сказал, Escrow, но только если на автомате и свое, то вот план:

    1 - Заказчик
    2 - Исполнитель

    1) Исполнитель выполнил работу, которую заказал заказчик, далее исполнитель загружает на сайт/сервис выполненную работу - она каким либо образом урезается(если звук, то накладываются доп помехи; если картинки, то вотермарки и все остальное в подобном духе).
    2) Заказчик получает уведомление СМС, email, Viber ... и заходит, чтобы оплатить работу.
    3) После выполнения оплаты, средства резервируются в системе(сайте).
    4) Заказчик получает доступ к демо-предпросмотру выполненной работы и прямо через сообщения на сайте сообщает исполнителю все ли нравится и что стоит изменить/добавить.
    5) Исполнитель может загружать новые образцы выполненной работы, а заказчик может наблюдать за изменениями, которые постоянно сохраняются в системе
    6) Как только заказчика все устраивает, он нажимает на кнопку подтверждения завершения сделки и в этот же момент, заказчик получает доступ к загруженной работе исполнителя без каких либо вотермарков, а исполнитель в свою очередь получает оплаченную ранее заказчиком сумму, но уже от имени системы. Далее исполнитель может выбрать куда выплатить средства(на счет системы, на карту, на электронные кошельки...)

    Если какой либо из сторон что-то не понравилось, каждый из участников сделки может открыть диспут и уже тогда к этой сделке подключится менеджер системы, который проследит всю историю переписки заказчика и исполнителя, включая все изменения выполняемой исполнителем работы.
    В итоге менеджер может заключить определенные решения.

    Таким образом у нас получился эдакий Escrow своего производства.

    P.S. Никогда не реализовывал подобную схему, а лишь изложил первое, что пришло в голову.
    Ответ написан
    1 комментарий
  • Как поменять цветовую схему подсветки синтаксиса в Brackets?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Официально пока это невозможно, но если покопаться в API Brackets и/или в его файликах, то можно без труда найти код который отвечает за подсветку а дальше сделать хак-плагин для Brackets.
    Ответ написан
    Комментировать
  • VestaCP на 8083 порте. Как используя субдомен получить доступ к ПУ?

    TemaSM
    @TemaSM Автор вопроса
    Fullstack, DevOps, InfSec
    UPD: ВНИМАНИЕ. Ответ был написан очень давно, многое поменялось с тех пор. Ответ скорее всего более не актуален.

    Все, 5 часов мучения вылились в отличный результат!
    Как я сделал:

    1)Идем в админку VestaCP в раздел WEB, редактируем основной домен(например domain.ru) и добавляем алиас вида: panel.domain.ru (вместо panel укажите путь, по которому при заходе Вы будете видеть VestaCP)
    2)Заходим в раздел DNS и проверяем записи этого же домена. Обязательно должна быть A запись с именем, которое Вы вводили до этого!
    3)Идем по пути /etc/nginx/conf.d/ - там будет файл вида 127.0.0.1.conf (только там ip вашего сервера) - очищаем содержимое этого файла и сохраняем.
    4)Далее идем по пути /usr/local/vesta/nginx/conf/ - там будет файл nginx.conf - открываем и редактируем:
    После # Vhost будет стоять блок виртуального хоста, примерно такой:
    server {
    	listen       	8083;
    	server_name     _;        
            root            /usr/local/vesta/web;
            charset         utf-8;


    Заменяем его на:
    server {
    	listen       	panel.domain.ru:80;
    	server_name     panel.domain.ru;        
            root            /usr/local/vesta/web;
            charset         utf-8;


    Теперь выше этого кода, но после # Vhost, добавляем это:
    server {
    		listen       domain.ru:80 default;
    		server_name  domain.ru;		
    		location / {
    			proxy_pass  http://domain.ru:8080;
    		}
    		}

    domain.ru - Меняйте на тот домен, для которого выставляли A запись в DNS разделе(он же и в WEB разделе)

    Теперь поясняю:
    С этого момента запросы к главному домену - основной nginx не обрабатывает, а родительский(в VestaCP) делает это именно так как нам необходимо!
    При заходе на domain.ru nginx перенаправляет нас на 8080 порт, который принимает пакеты и отображает нам содержимое.
    При заходе на panel.domain.ru nginx принимает запросы и выполняет их относительно Location'ов, которые выставлены ниже в файле конфигурации.

    Таким образом мы "убили сразу двух зайцев":
    1)Как бы переместили нашу панель на субдомен
    2)Везде в запросах убрали какие либо порты

    Всех благодарю за помощь!
    Ответ написан
    2 комментария
  • Какой сервис выбрать в качестве хранилища фотографий?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Разве не знаете про Mail ? Они раздают 100 гигов. А если не подходит, то советую воспользоваться mega.co.nz (бывший megaupload.com) - только теперь там свое облако. Тарифы дешевые, юзабилити просто супер, скоро приложения для телефонов сделают + API есть
    Ответ написан
    1 комментарий