• Какое оптимальное значение у max_user_connections?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    max_user_connections - максимальное количество сессий для 1 пользователя. настраивается для каждого пользователя отдельно. Т.е. user1 -5 user2 -10 wordpress - 100.
    max_connections - максимальное количество сессий всего, на сервер.
    к примеру, имеем 2 пользователя, у каждого max_user_connections=100. Настройки мускуля дефолтные, max_connections = 151. 1 пользователь создал 100 соединений, остальные пока спят. Этот первый пользователь пытается поднять 101-е соединение, получает отлуп(Error: 1203 SQLSTATE: 42000 (ER_TOO_MANY_USER_CONNECTIONS)) - кончились персональные соединения. Просыпается второй, начинает поднимать свои соединения (первый, по-прежнему 100 штук "съел"). 49 - ОК, 50 - ОК, 51 - ОК, 52 - Error: 1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR), общее количество соединений кончилось.
    т.е. отвечая на Ваши вопросы:
    1. а фиг его знает, зависит от вашего приложение.
    2. да, ставить больше, чем max_connection бестолку, сработает общее ограничение.

    общий совет - дайте серверу поработать с недельку хотя-бы, затем выполните show status like '%onn%';
    посмотрите, что в поле Max_used_connections и есть ли ошибки Connections_error. Если первое значение далеко от max_connections(и нет/почти нет ошибок), этот параметр можно и уменьшить - освободите память.
    Ответ написан
    Комментировать
  • Как перенести большую базу на другой сервер без простоев?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Рабочий ли вариант если просто через rsync передать всю папку /var/lib/mysql?

    Просто перенос файлов рабочей БД окончится тем, что файлы есть, а базы нет, потому что неоткуда взяться метаданным в системной базе данных. Вернее, всё ещё забавнее - базы вроде бы и нет (USE приводит к ошибке "БД не существует"), но её нельзя создать, потому что она есть. И то же самое с таблицами (SELECT/DROP/прочее нельзя, потому что таблицы нет, CREATE нельзя, потому что она есть).

    Метод сработает, если переносить все БД сразу, включая служебные. Но требуется точное соответствие исходной и конечной конфигураций - начиная с версии и сборки MySQL и кончая именами каталогов и именами/паролями учётных записей в операционной системе. Плюс перегенерация и переподключение сертификатов.

    Еще вариант с репликацией, но насколько я понял всё равно базу нужно блокировать на момент дампа, а это тоже какое-то время

    Решений без блокирования практически не существует. Нет, можно наколхозить реальное решение, которое обойдётся вообще без остановки, я даже представляю как именно (FEDERATED ENGINE + triggers), но подробно рассказывать не буду - для её реализации нужны достаточная квалификация и опыт, на одних советах шанс на удачу невелик, скорее всё поломается.

    Есть вполне себе документированные способы: Copying MySQL Databases to Another Machine. Особенно последний из описанных. Он предполагает минимальное время простоя при использовании штатных средств.
    Ответ написан
    Комментировать
  • DDOS атака на сайт Wordpress. Как заблокировать WPscan?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Если не хочешь разбираться с fail2ban то можно поставить wordfence и (или) настроить Cloudflare.
    Ответ написан
    1 комментарий
  • Почему не работает Wordpress + Nginx?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    При этом не работают ссылки, по любому адресу открывается главная страница.

    Потому что не прописаны правила для ЧПУ

    try_files $uri $uri/ /index.php?$args;.

    После изменений перезапустить сервис и обновить пермалинки в ВП.
    Ответ написан
    1 комментарий
  • CPU загружается на 100% из за запросов mysql. Как отразить ddos?

    @veroni1337 Автор вопроса
    В итоге проблема решилась когда я удалил текущий докер контейнер и поставил вместо него другой контейнер mariadb, перенес туда базу данных и поменял доступы. После этого запросы сразу перестали поступать
    Ответ написан
    Комментировать
  • Как заблокировать доступ к ресурсу для конкретного региона?

    @Everything_is_bad
    Недавно проверял состояние сервера и заметил в логах много неудачных попыток входа на сервер (В основном через ssh)
    ну как первый раз в интернет вышел, уже сто лет такое, ssh вообще постоянно долбят, ставишь fail2ban, а еще лучше меняешь дефолтный порт и ставишь логин только по ключу. А регион блокировать, так себе идея.
    Ответ написан
    9 комментариев
  • Как включить относительную адресацию в nginx?

    dyuriev
    @dyuriev
    A posteriori
    serve_from_sub_path в true

    # this is required to proxy Grafana Live WebSocket connections.
    map $http_upgrade $connection_upgrade {
      default upgrade;
      '' close;
    }
    
    upstream grafana {
      server localhost:3000;
    }
    
    server {
      listen 80;
      root /usr/share/nginx/www;
      index index.html index.htm;
    
      location /grafana/ {
        proxy_set_header Host $http_host;
        proxy_pass http://grafana;
      }
    
      # Proxy Grafana Live WebSocket connections.
      location /grafana/api/live/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_pass http://grafana;
      }
    }


    Пруф (читать раздел полностью, а не до первого конфига nginx): https://grafana.com/tutorials/run-grafana-behind-a...
    Ответ написан
    Комментировать
  • Как редиректнуть HTTPS на другой айпишник?

    @Drno
    Тебе ненадо слать https.. ты можешь редиректить на http, а ssl (первичный) сделает nginx с твоим цертбот

    Либо тебе надо на удаленный сервер скопировать и подставить сертификаты тоже
    Ответ написан
    3 комментария
  • CPU загружается на 100% из за запросов mysql. Как отразить ddos?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    1) fail2ban
    2) Временно повесить заглушку "на сайте идут технические работы, все пучком"
    3) Ждите, через некоторое время ботнет целиком поместиться в банлист и нагрузка упадет

    Про адекватные решения по типу подключить Cloudflare вы скорее всего и сами знаете.
    Ответ написан
    2 комментария
  • CPU загружается на 100% из за запросов mysql. Как отразить ddos?

    @koder_1
    Битрикс программист
    /bitrix/redirect.php - Эти скрипты, rk.php, redirect.php ограничьте через nginx или htaccess чтоб были доступны только с локального сервера, а с внешних адресов не доступны.
    Ответ написан
    Комментировать
  • Как сверстать такую карточку?

    @Nurkanaat
    Ответ написан
    Комментировать
  • Есть счёт для оплаты. Как сделать по нему оплату картой через сайт на wordpress woocommerce (юkassa)?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ничего не понял

    вот тут какой шаг вам не подходит?
    Ответ написан
    Комментировать
  • Как вернуть работоспособность сайта на Wordpress?

    PolarOneBear
    @PolarOneBear
    Вы можете поменять ссылки через phpMyAdmin введя запроc.
    Вот тема.
    Статья
    Сам запрос
    UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://VASH-DOMEN', 'https://VASH-DOMEN');
    UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://VASH-DOMEN', 'https://VASH-DOMEN');


    Обратите внимание на название таблиц (wp_posts , wp_postmeta), если они отличаются - назовите как у вас. Ну и конечно в таблице wp_options поменять если не меняли.
    UPDATE wp_options SET option_value = REPLACE(option_value, 'http://VASH-DOMEN', 'https://VASH-DOMEN') WHERE option_name = 'home' OR option_name = 'siteurl';


    Еще проверьте в wp-congig.php в корне сайта. иногда там прописывают домены.
    И тут писали уже, потом лучше используйте плагин better-search-replace.
    Ответ написан
    Комментировать
  • Как интегрировать ChatGPT в WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Да, на сайте есть документация по API https://platform.openai.com/docs/guides/gpt

    Вот пример запроса и работы функции. 100% работу не гарантирую, т.к. несколько раз переписывал функцию, а у них выходят новые модели и изменения в запросах API, поэтому вам нужно будет все проверить и сделать настройки передаваемых аргументов под конкретную задачу

    if ( ! function_exists( 'get_chatgpt_responce' ) ) {
    
    	/**
    	 * Returns query result or error
    	 *
    	 * @param string $question Text API question.
    	 * @param string $promt    Text API promt (for chat).
    	 * @param string $model    API model.
    	 * @param string $api_key  API key.
    	 *
    	 * @return void
    	 */
    	function get_chatgpt_responce( $question = null, $promt = null, $model = 'gpt-3.5-turbo', $api_key = 'sk-le000000000000000000000000000000000000' ) {
    
    		if ( is_null( $question ) ) {
    			return null;
    		}
    
    		$type = 'text';
    
    		if ( $model === 'davinci-codex' ) {
    			$type = 'codex';
    		}
    
    		if ( in_array( $model, array( 'gpt-4', 'gpt-4-0314', 'gpt-4-32k', 'gpt-4-32k-0314', 'gpt-3.5-turbo', 'gpt-3.5-turbo-0301' ), true ) ) {
    			$type = 'chat';
    		}
    
    		$headers = "Content-Type: application/json\r\n" . "Authorization: Bearer " . $api_key . "\r\n";
    
    		$params = array(
    			'model'       => $model,
    			'temperature' => 0.7,
    			'top_p'       => 1,
    		);
    
    		if ( $type === 'chat' ) {
    			$url         = 'https://api.openai.com/v1/chat/completions';
    			$params['n'] = 1;
    			if ( ! is_null( $promt ) ) {
    				$params['messages'][] = array(
    					'role'    => 'system',
    					'content' => $promt,
    				);
    			}
    			$params['messages'][] = array(
    				'role'    => 'user',
    				'content' => $question,
    			);
    		} elseif( $type === 'codex' ) {
    			$url                  = 'https://api.openai.com/v1/engines/davinci-codex/completions';
    			$params['prompt']     = $question;
    			$params['max_tokens'] = 4096 - iconv_strlen( $question );
    		} else {
    			$url                  = 'https://api.openai.com/v1/completions';
    			$params['prompt']     = $question;
    			$params['max_tokens'] = 4096 - iconv_strlen( $question );
    		}
    
    		$args = array(
    			'method'       => 'POST',
    			'timeout'      => 240,
    			'redirection'  => 5,
    			'httpversion'  => '1.0',
    			'blocking'     => true,
    			'headers'      => $headers,
    			'body'         => json_encode( $params ),
    			'sslverify'    => true,
    		);
    
    		$response = wp_remote_request( $url, $args );
    
    		if ( is_wp_error( $response ) ) {
    			$notification = $response->get_error_message();
    		} elseif ( in_array( wp_remote_retrieve_response_code( $response ), array( 400, 401, 403, 404 ), true ) ) {
    			$body         = json_decode( wp_remote_retrieve_body( $response ), true );
    			$notification = $body['error']['message'];
    		} elseif ( wp_remote_retrieve_response_code( $response ) === 200 ) {
    			$body         = json_decode( wp_remote_retrieve_body( $response ), true );
    			$notification = 'Расход GPT токенов: ' . $body['usage']['total_tokens'] . '. Причина остановки: ' . $body['choices'][0]['finish_reason'];
    
    			if ( $type === 'chat' ) {
    				return $body['choices'][0]['message']['content'];
    			} else {
    				return $body['choices'][0]['text'];
    			}
    		}
    
    		if ( function_exists( 'telegram_notification' ) ) {
    			telegram_notification( $notification );
    		}
    
    		return false;
    	}
    }
    
    $query   = 'Write a list frequently asked questions about the get_the_title() WordPress function.';
    $chatgpt = get_chatgpt_responce( $query );
    var_dump( $chatgpt );
    Ответ написан
    Комментировать
  • Как сделать безопасный перевод денег исполнителю на фриланс сервисе на wordpress?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Чтобы заказчик закидывал деньги на сайт, они сохранялись на сайте, и потом выводились в кошелек фрилансера,

    А потом новоявленная "биржа" резко канет в лету.. Кинув и заказчиков и исполнителей.

    Поэтому нормальные люди (особенно фрилансеры, тк больше "в теме") никогда не будут иметь дела с такими биржами.

    Вначале нужно имя и доверие завоевать, а потом уже думать как поиметь денег с участников.
    Ответ написан
    Комментировать
  • Является ли хорошей практикой использовать связку Nginx+Apache сегодня?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Если точно понимаете, зачем вам Апач - почему бы и нет?

    Но, честно говоря, вариантов тут немного - чаще всего такое взгромождают, когда приложение работает только с неким экзотическим модулем апача, аналога которого для других веб-серверов не существует (см. напр. 1С). Ну или когда несколько поколений веб-программистов в три слоя обмазало сайт htaccess-магией и конвертировать это в nginx-директивы никто не хочет.
    Ответ написан
    2 комментария
  • Где, в каких зонах и как регистрировать домен с учётом тенденций одной конкретной страны в 2023?

    @RoundRobin
    Риски регистрации доменов у российских регистраторов очевидны.

    Но также есть и риски регистации у регистраторов из "недружественных стран". Заблокируют услуги для русскоязычных клиентов, как это сделал namecheap в том году и все. Специально пишу русскоязычных, а не граждан РФ, т.к. тогда попали под раздачу и клиенты с русскими именами из Казахстана например.

    Но регистраторов полно и из нейтральных стран. Есть например хороший вариант с китайскими регистраторами, например alibaba group и еще почти сотня других - https://www.icann.org/en/accredited-registrars?pag...

    Проблемы лишь две:

    1. Китайские регистраторы обычно поддерживают только внутрикитайские способы оплаты и тем более там нет никакой крипты.

    2. Ужасная поддержка. Мало того, то редкие регистраторы оказывают поддержку на английском, так еще могут просто кинуть в игнор и даже заблокировать аккаунт если сильно требовать ответ. Решается получением контакта менеджера (в QQ/Wechat, реже Скайп).

    Но регистраторов полно, можно что-то найти подходящее. А оплатить в Китай сейчас не проблема, помогашек много сейчас развелось (успешно ищуться на форумах закупщиков их Китая и т.п. разделах карго услуг).

    Есть и другие страны, например Индия, и классические оффшоры. Есть сервисы в т.ч. с русскоязычной поддержкой, оплатой российскими картами, криптой и т.п, например regway (юрисдикция Сейшельские о-ва / Индия).
    Но криминал там не приветствуется, в отличие от китайцев, которым на все пофиг.

    В общем варианты всегда есть. А что именно выбирать нужно выбирать исходя из модели рисков для конкретного кейса.

    А регистрировать "экзотических" доменов через российского посредника типа nic.ru или reg.ru - самая плохая идея. Подвергаетесь сразу всем рискам в одном месте.
    Ответ написан
    Комментировать
  • Может ли самозанятый предоставлять услуги хостинга(размещения и хранения)?

    Sanes
    @Sanes
    Не всё так просто. Там почтовый сервер подпадает под какой-то закон о связи.

    Однако хостинг-провайдерам приходилось в свое время оформлять телематическую лицензию, поскольку наряду с базовыми услугами размещения сайтов провайдеры также предлагают сопутствующие услуги, прописанные в законе «О связи»: предоставление услуг электронной почты и т.д.
    Ответ написан
    2 комментария