Задать вопрос
  • Как прописать в записях DNS AAAA запись с адресом IPv6 Hetzner'a?

    karabanov
    @karabanov
    Системный администратор
    В панели управления сервером должен быть виден адрес. Если нет то зайди в консоль и посмотри какой он, команда ip a

    Далее добавь в DNS запись AAAA для домена abcd.domain.com и впиши туда этот адрес.

    Проверить можешь здесь dnschecker.org
    Ответ написан
    3 комментария
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно

    Вариант с GuzzleAsync - самый лучший. Под капотом он использует возможности curl_multi_exec, которые позволяют асинхронно отправлять несколько запросов, не плодя при этом лишние процессы. Не уверен конечно, что осилит 5000 параллельных запросов, но даже если и не сможет, то можно разделить 5000 между несколькими воркерами.

    2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?

    У вас нагрузка в основном IO bound, так что не имет значения какой язык выбрать. Главное чтобы он поддерживал IO multiplexing (который поддерживается в PHP через вышеупомянутый curl_multi_exec).

    3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел

    Guzzle
    Ответ написан
    3 комментария
  • Как правильно подключить favicon через сборщик задач gulp?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    1. В корне следует располагать только favicon.ico (16x16 или 32х32). Остальные иконки спокойно можно закинуть в любую папку.
    2. Зачем вообще использовать какие-то плагины для генерации фавиконок, вы что их постоянно обновлять собираетесь? Раз сгенерил на каком-то онлайн-сервисе весь пак и забыл на пару лет. Подключение руками, те же онлайн генераторы предоставят готовый код, в котором только пути под себя скорректировать, если не в корень класть будете.

    В общем, боюсь, вы ерундой маетесь.
    Ответ написан
    8 комментариев
  • Как убрать таблицу стилей агента пользователя?

    nickolyashka
    @nickolyashka
    Если правильно понял вопрос
    input, textarea, select {
       -webkit-appearance: none;
       -moz-appearance: none;
     }
    Ответ написан
    1 комментарий
  • Ошибка при работе с библиотекой requests, что делать?

    @Andy_U
    Вот, стоило опубликовать протокол и ясности прибавилось. См. предпоследнюю строку в протоколе. Читайте, что такое sys._MEIPASS. Это директория, где оказываются файлы, которые лежали рядом с исходным скриптом и которые были указаны в параметре Analysis(binaries=...) в spec-файле, чтобы быть включенными в генерируемый exe-файл. В вашем случае, не указаны. Я про сертификат сacert.pem. Или certifi/сacert.pem? Но поскольку минимальный пример, где воспроизводится ошибка, вы не привели, дальше разбирайтесь сами.

    P.S. Вот буквально сегодня был пример, как этим пользоваться: https://qna.habr.com/q/1083572
    Ответ написан
    Комментировать
  • Как сделать отступ от абсолютного или фиксированного блока?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Возможно, вам нужен не абсолют, а sticky.
    Ответ написан
    Комментировать
  • Как сделать отступ от абсолютного или фиксированного блока?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    большая часть браузеров поддерживает `attr()`, хотя если упор на слове динамически, то ответ - никак
    Ответ написан
    Комментировать
  • Как найти определенный текст на картинке OpenCV?

    @apiwi Автор вопроса
    Решил вопрос с помощью: pdfminer, pdf2image, PIL
    Нашел координаты нужного текста с помощью pdfminer, преобразовал в картинку с помощью pdf2image и с помощью PIL сделал обрезку нужной области ( прибавил к координатам значения )
    Ответ написан
    6 комментариев
  • Как найти определенный текст на картинке OpenCV?

    @calculator212
    Вот код, пытаюсь им найти текст на картинке, но не получается, я так понял не подходит метод
    Нужен tesseract для этого а opencv
    Ответ написан
    Комментировать
  • Как в NGINX пропустить запрос OPTIONS в php-fpm?

    karabanov
    @karabanov
    Системный администратор
    Для включения указанных методов намеренно делать ничего не надо, так как они доступны по умолчанию. Вот что бы отключить некоторые методы, да надо приложить усилия.

    В подтверждение своих слов приведу пример:

    docker-compose.yml

    version: '3'
    
    services:
      alpine-nginx:
        image: nginx:stable-alpine
        container_name: alpine-nginx
        restart: "no"
        links:
          - composer-php
        volumes:
          - ./default.conf:/etc/nginx/conf.d/default.conf
          - ./code:/code
        ports:
          - "80:80"
    
      composer-php:
        image: php:7-fpm
        container_name: composer-php
        restart: "no"
        volumes:
          - ./code:/code
        ports:
          - "9000:9000"



    default.conf

    server {
      listen 80;
      listen [::]:80;
    
      client_max_body_size 2M;
    
      server_name domain.com admin.domain.com www.domain.com api.domain.com;
    
      charset utf-8;
      index index.php;
    
      root /code;
    
      gzip on;
      location / {
        try_files $uri $uri/ @phpindex;
      }
    
      location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass composer-php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    
        fastcgi_param   QUERY_STRING            $query_string;
        fastcgi_param   REQUEST_METHOD          $request_method;
        fastcgi_param   CONTENT_TYPE            $content_type;
        fastcgi_param   CONTENT_LENGTH          $content_length;
        fastcgi_param   SCRIPT_FILENAME         $realpath_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
        fastcgi_param   PATH_INFO               $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
        fastcgi_param   REQUEST_URI             $request_uri;
        fastcgi_param   DOCUMENT_URI            $document_uri;
        fastcgi_param   DOCUMENT_ROOT           $realpath_root;
        fastcgi_param   SERVER_PROTOCOL         $server_protocol;
        fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
        fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
        fastcgi_param   REMOTE_ADDR             $remote_addr;
        fastcgi_param   REMOTE_PORT             $remote_port;
        fastcgi_param   SERVER_ADDR             $server_addr;
        fastcgi_param   SERVER_PORT             $server_port;
        fastcgi_param   SERVER_NAME             $server_name;
      }
    
      location @phpindex {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass composer-php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    
        set $index_name /index.php;
    
        fastcgi_param   QUERY_STRING            $query_string;
        fastcgi_param   REQUEST_METHOD          $request_method;
        fastcgi_param   CONTENT_TYPE            $content_type;
        fastcgi_param   CONTENT_LENGTH          $content_length;
        fastcgi_param   SCRIPT_FILENAME         $realpath_root$index_name;
        fastcgi_param   SCRIPT_NAME             $index_name;
        fastcgi_param   PATH_INFO               $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
        fastcgi_param   REQUEST_URI             $request_uri;
        fastcgi_param   DOCUMENT_URI            $document_uri;
        fastcgi_param   DOCUMENT_ROOT           $realpath_root;
        fastcgi_param   SERVER_PROTOCOL         $server_protocol;
        fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
        fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
        fastcgi_param   REMOTE_ADDR             $remote_addr;
        fastcgi_param   REMOTE_PORT             $remote_port;
        fastcgi_param   SERVER_ADDR             $server_addr;
        fastcgi_param   SERVER_PORT             $server_port;
        fastcgi_param   SERVER_NAME             $server_name;
      }
      location ~ /\.ht {
        deny  all;
      }
    }



    code/index.php

    <?php
    
    header('X-PHP-REQUEST_METHOD: ' . $_SERVER['REQUEST_METHOD']);
    
    echo $_SERVER['REQUEST_METHOD'];
    
    echo "\n\n"
    ?>



    Результат

    zend@zbook:~$ curl -X GET http://api.domain.com/ -d ''
    GET
    
    zend@zbook:~$ curl -X POST http://api.domain.com/ -d ''
    POST
    
    zend@zbook:~$ curl -X DELETE http://api.domain.com/user/1000
    DELETE
    
    zend@zbook:~$ curl -X OPTIONS http://api.domain.com/user/1000
    OPTIONS
    
    zend@zbook:~$ curl -X PATCH http://api.domain.com/user/1000
    PATCH
    
    zend@zbook:~$ curl -I http://api.domain.com/user/1000
    HTTP/1.1 200 OK
    Server: nginx/1.20.1
    Date: Sun, 18 Jul 2021 18:05:05 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    X-Powered-By: PHP/7.4.21
    X-PHP-REQUEST_METHOD: HEAD
    
    zend@zbook:~$ curl -X PUT http://api.domain.com/user/1000
    PUT

    Ответ написан
    4 комментария
  • Как идентифицировать юзера инкогнито?

    @nirvimel
    Собрание секты верующих в приватный режим браузера в этом треде. Волшебная кнопка "инкогнито" (слово то какое красивое) надевает на юзера шапку невидимку, защищает его от слежки и вообще от всего.

    Так что же такое приватный режим на самом деле?

    Privacy mode or "private browsing" or "incognito mode"[1] is a privacy feature in some web browsers to disable browsing history and the web cache. This allows a person to browse the Web without storing local data that could be retrieved at a later date. Privacy mode will also disable the storage of data in cookies and Flash cookies. This privacy protection is only on the local computing device as it is still possible to identify frequented websites by associating the IP address at the web server.

    https://en.wikipedia.org/wiki/Privacy_mode

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

    Чтобы окончательно развеять сомнения в своей уникальности, включаем приватный режим, проходим этот тест и наслаждаемся результатом (Show full results for fingerprinting -> Ctrl+F эту строку):
    Your browser fingerprint appears to be unique among the xxx,xxx,xxx tested so far.
    Ответ написан
    1 комментарий
  • Возможно ли установить контейнер как сервер?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Так слой докера почти ничего к нагрузке не добавляет, если вы не используете оркестраотр, то это вообще просто окружение. Проще уж само приложение тогда вынести. Но вся суть контейнеров в том, что если приложение написано правильно, с возможностью горизонтального масштабирования, докер контейнер очень быстро запускается на разных хостах.
    Ответ написан
    1 комментарий
  • Возможно ли установить контейнер как сервер?

    romesses
    @romesses
    Backend инженер
    Если у вас вычислительные задачи на том контейнере, то есть немалая вероятность, что вам не удастся выиграть отказом от Docker.
    Пожалуй, разве только если вы запускаете контейнер слишком часто. Тогда это будет иметь смысл. Но тогда вы неправильно пользуетесь Docker.

    Попробуйте переселить тот контейнер на машину помощнее. А лучше даже распараллелить, увеличив количество экземпляров. В итоге, это, может быть, даже архитектурная задача.
    Ответ написан
    5 комментариев
  • Как Не ждать input от пользователя в python?

    Внучок, используй библиотеку threading
    Ответ написан
    Комментировать
  • Как спроектировать архитектуру большого проекта с начальным знанием программирования?

    Микросервисы + отсутствие опыта = головная боль и нерабочий код.
    Ответ написан
    Комментировать
  • Как спроектировать архитектуру большого проекта с начальным знанием программирования?

    tema_sun
    @tema_sun
    В вашем случае методолгия "хренак-хренак и в продакшн" подойдет как нельзя лучше. Я не шучу. Наговнокодьте что-то работающее, ничего страшного в этом нет.
    Ответ написан
    Комментировать
  • Как спроектировать архитектуру большого проекта с начальным знанием программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    К сожалению с начальным знанием программирования - никак.
    Вы не можете привлекать сторонних разработчиков, но уже привлекаете их через Тостер.

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

    Как говорят - оптимизация до оптимизации не нужна.

    У меня был опыт запуска интернет-магазина во времена, когда их было десяток на всю страну. Первый интернет-магазин мы писали почти полгода, внедрив в него тысячи фич, которые оказались невостребованными. Через год проект себя отбил, и мы заказали не редизайн а весь магазин с нуля. Разработка шла 2 месяца, обошлась в 4 раза дешевле. Функционал стал гораздо удобнее. И мы поняли, что в первый раз надо было тоже пойти по более простому пути, тогда мы мы запустились на 4 месяца раньше и отбились бы за полгода.
    Ответ написан
    1 комментарий
  • Как парсить поисковые подсказки?

    @Fadey001
    В хроме открываешь инструменты разработчика – F12
    Пишешь запрос в поисковик и смотришь куда и что отправляется.
    Гугл например шлет запросы на
    https://www.google.ru/complete/search?sclient=psy-ab&newwindow=1&safe=off&biw=840&bih=589&q=hello&oq=&gs_l=&pbx=1&bav=on.2,or.r_cp.&bvm=bv.150120842,d.bGs&fp=340975d5227619b6&pf=p&gs_rn=64&gs_ri=psy-ab&gs_mss=%D0%BF%D0%B0h&tok=0mPi7H_lGIpBh7dz7hlFyQ&cp=5&gs_id=24&xhr=t&tch=1&ech=15&psi=uGDSWO_2CMb-6ASvx7PoDg.1490182331198.1

    Сам запрос в параметре q передается.
    Но при запросе без параметров ругается на неправильный запрос. Осталось узнать откуда берутся все параметры (чаще всего это все есть прямо на странице). Далее формируешь запрос с ключевым словом, подставляешь все параметры и ловишь ответ с подсказками.
    Алгоритм такой
    Ответ написан
    4 комментария
  • Могут ли быть в документе больше одного тега header, main, footer?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Насколько я осведомлён, main как раз-таки, можно использовать один раз. Если нет, ткните пальцем, пожалуйста.
    Ответ написан
    1 комментарий
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев