Ответы пользователя по тегу Linux
  • Как проверить, какая система инициализации ядра стоит на сервере?

    Проверить какая система инициализации на Linux можно множеством путей, как правила все они зависят от версии Linux дистрибутива и не все работают 100% на всех дистрибутивах, первоначально проверяем

    ls -l `which init`

    если покажет симлин вида

    lrwxrwxrwx 1 root root 20 фев 15  2017 /sbin/init -> /lib/systemd/systemd


    то тут все понятно - systemd

    если симлинка нет, то команда

    strings /sbin/init | awk 'match($0, /(upstart|systemd|sysvinit)/) { print toupper(substr($0, RSTART, RLENGTH));exit; }'


    выдаст либо SYSTEMD либо UPSTART либо SYSVINIT
    Ответ написан
    Комментировать
  • Как сконфигурировать nginx для того чтобы он работал как http прокси?

    Как установить Nginx можете почитать в моей статье.

    А как настроить проксирование Иван Корюков хоть и кривенько, но описал.
    Ответ написан
    Комментировать
  • Нормальна ли такая архитектура для хостинга?

    Все 3 ваши варианта мимо.

    Есть 2 подхода в хостинге:

    1. Виртуализация (Virtuozzo, OpenVZ, Jail, KVM, LXC, etc...)
    Недостатки: Накладные расходы, сложности администрирования
    Плюсы: Изоляция => Хорошая безопасность

    2. Shared-хостинг
    Недостатки: Проблемы с безопасностью, ограниченность индивидуальных настроек, большая зависимость пользователей
    Плюсы: Простота администрирования
    Ответ написан
    5 комментариев
  • Почему php-fpm не находит файл?

    Ошибка "FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream" говорит о том, что Nginx не может найти указанный в файле конфигурации скрипт, речь про эту строку:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;


    Рекомендация тут простая - проверьте все пути и убедитесь, что все нужные файлы существуют и лежат на своих местах.

    Конкретно в Вашем случае я не вижу определения директивы root за пределами location / или в нем.

    Если вы не можете разобраться, в каком каталоге Nginx ищет нужный скрипт, то на узле vh2_fphp7.0 запускаете:

    tcpdump port 9000 -A | strings

    Вывод покажет всю нужную информацию, в том числе путь к скрипту.

    Так же можно включить логирование:
    http {
       ...
       log_format scripts '$document_root$fastcgi_script_name > $request';
       server {
       ...
       access_log /var/log/nginx/mysite-scripts.log scripts;
       ...
       }
    }


    Так же возможно вы неправильно написали регулярку в директиве fastcgi_split_path_info, см. оф. документацию.

    Так же проверьте значение cgi.fix_pathinfo = 1 (в некоторых мануалах советуют cgi.fix_pathinfo = 0 что может привести к не правильной обработке переменной PHP_SELF не равной DOCUMENT_URI).

    Кстате строки

    if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }


    по моему абсолютно излишни, уберите их или используйте try_files.
    Я конечно понимаю, что сами разработчики Nginx в этой статье написали так..., но....

    location ~ \.php$ {
            try_files       $uri = 404;
            fastcgi_pass    127.0.0.1:9001;
            include         /etc/nginx/fastcgi_params;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    Ответ написан
    Комментировать
  • Почему gzip не ускоряет время загрузки сайта?

    Вопрос - почему время загрузки страницы не ускорилось?


    Ну наверно потому, что у Вас неправильно настроено сжатие gzip.
    Например писать gzip_types image/png image/jpeg бессмысленно, т.к. бинарные данные картинок итак сжаты и никакого выигрыша Вы не получите.

    Правильно написать так:

    http {
       ....
       gzip on;
       gzip_http_version 1.0;
       gzip_min_length 512;
       gzip_buffers 64 8k;
       gzip_comp_level 5;
       gzip_proxied any;
       gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
       ...
    }


    В секции server { } можете ничего не писать если не планируете менять параметры.

    Потом берем curl и проверяем:
    curl -H "Accept-Encoding: gzip,deflate" -I http://mysite.ru/index.html


    получаем ответ

    HTTP/1.1 200 OK
    Server: nginx
    Date: Fri, 24 Nov 2017 11:32:00 GMT
    Content-Type: text/html
    Last-Modified: Tue, 12 Apr 2016 06:48:17 GMT
    Connection: keep-alive
    ETag: W/"570c9a31-576"
    Content-Encoding: gzip


    Обращаем внимание на поле Content-Encoding

    Для теста из консоли берем утилиту Apache Benchmark:
    ab -n 1 -H "Accept-Encoding: gzip,deflate" http://mysite.ru/index.html


    Смотрим на поля помеченные жирным, при выключенном gzip они увеличиваются.

    Concurrency Level: 1
    Time taken for tests: 0.128 seconds
    Complete requests: 1
    Failed requests: 0
    Total transferred: 3405 bytes
    HTML transferred: 3025 bytes
    Requests per second: 7.80 [#/sec] (mean)
    Time per request: 128.249 [ms] (mean)
    Time per request: 128.249 [ms] (mean, across all concurrent requests)
    Transfer rate: 25.93 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 90 90 0.0 90 90
    Processing: 38 38 0.0 38 38
    Waiting: 38 38 0.0 38 38
    Total: 128 128 0.0 128 128


    Ну и берем Firefox и смотрим там поля Передано и Размер, если сжатие работает, то Передано должно быть меньше Размер.
    Ответ написан
    1 комментарий
  • Как отключить все автоматические проверки обновлений в Debian?

    sudo apt remove unattended-upgrades
    Ответ написан
    Комментировать
  • Как измерить процессорное время, потраченное ядром на ipsec и NAT?

    Утилиты для диагностики проблем с производительнос...

    А вобще, чтобы понимать что или кто грузит систему во времени нужно собирать данные, аккумулировать их, потом строить графики, то есть по сути Вам нужна простенькая система мониторинга, к примеру тот же munin он прост в установке и настройке и по нему очень много мануалов.
    Ответ написан
  • Fail2ban уведомления в Telegram?

    В /etc/fail2ban/jail.conf в параметре action указывается конфигурация из каталога /etc/fail2ban/action.d

    А вообще Google Вам в помощь
    https://blog.mypapit.net/2015/08/how-to-send-fail2...

    Если не хотите использовать telegram-cli, то в /usr/share/fail2ban/fail2ban-telegram.sh напишите замену telegram-cli на curl
    Ответ написан
  • Какие различия программирования под UNIX и Linux?

    Подскажите, верно ли утверждение, что я прочитаю книгу по системному программированию в UNIX и смогу после этого программировать в Linux без изменений?


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

    Так что нет, не верное утверждение. Прочитать книгу не значит освоить её и тем более получить навыки.
    Программировать Вы сможете, вопрос только в том что именно, Hello world да, а вот дальше и глубже этого - тут все зависит от упорства и труда. И конечно же чтобы освоить системное программирование этим нужно заниматься регулярно и постоянно, а не набегами по 2 часа в неделю. Нужно работать над реальными проектами, решать реальные задачи. Только так Вы наберетесь опыта.
    Ответ написан
    3 комментария
  • Какие есть скрипты для настройки хостинга?

    Готовых под Ваши нужды bash-скриптов нет и скорее всего не будет, т.к. это большинству это не нужно.
    Есть "коленочные" скрипты вроде тех, что приводили Вы, можете допилить их под ваши нужды.
    Либо пользуетесь панелями хостинга с Web-интерфейсом, либо делаете все через консоль linux.
    У большинства панелей есть API, а через него Вы можете делать очень много, написать простенький скрипт, который через это API решает Ваши задачи не сложно - но возникает вопрос - зачем тогда держать панель хостинга?

    P.S. Тем кто активно рекомендет VestaCP - читайте про уязвимость:
    04.11.2017 11:37 Уязвимость в панели управления х...
    Ответ написан
  • NGINX: как узнать какие файлы (из каких папок) скачивают пользователи?

    Прежде чем удалять /data/2017, мне нужно точно убедиться, что данные берутся именно из /mnt/2017.


    1. Отключите в конфиге nginx использование /data/2017 и станет сразу все понятно, откуда будут браться ваши данные.
    2. Не удаляйте /data/2017, а просто переименуйте например в /data/2017.old, поживите так N дней, проверьте что все работает корректно.
    3. Анализируйте access.log на предмет 404 для файлов которые лежали в /data/2017, а сейчас уже берутся из /mnt/2017
    4. Только убедившись, что все хорошо, удаляйте /data/2017
    Ответ написан
    Комментировать
  • Что не нравится Nginx?

    Что не нравится Nginx?


    nginx не нравится, что Вы подсунули ему неправильный файл сертификата cert.crt, правильный должен иметь примерно такой вид (многострочный):

    -----BEGIN CERTIFICATE-----
    MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
    ................
    ................
    JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
    Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
    -----END CERTIFICATE-----


    Сделайте:

    openssl x509 -in /etc/ssl/certs/domains/sea3.ru/cert.crt -noout -text -purpose


    Если файл сертификата корректный, то вы увидите всю информацию о сертификате, иначе будет ошибка.
    Ответ написан
    Комментировать
  • Что не так с записью в crontab?

    1. Проверьте бит исполнения (x) на скрипте ~/backup.sh командой
    ls -la ~/backup.sh
    если нет бита execute (x), то ставьте:
    chmod a+x ~/backup.sh

    2. Проверьте логи cron
    cat /var/log/syslog | grep CRON | grep backup.sh

    3. Всегда! Повторяю, Всегда указывайте полный путь к запускаемому скрипту, то есть
    @midnight bash /full/path/backup.sh >/var/log/backup.log 2>&1


    4. Рекомендую организовать вывод отладочной информации и обработку ошибок в лог на уровне скрипта, а в crontab писать конструкцию:
    @midnight bash /full/path/backup.sh >/dev/null 2>&1

    чтобы перенаправить все потоки вывода и ошибок в /dev/null

    если вы напишите конструкцию вида
    @midnight bash /full/path/backup.sh >/dev/null
    то только поток вывода будет перенаправлен в /dev/null, если произойдет ошибка выполнения скрипта, то cron уведомит пользователя root на email (при условии правильной настройки рассылки на сервере)
    Ответ написан
  • Nginx не проксирует на удаленный хост?

    Что мешает обратиться к официальной документации с примерами настроек, а не городить огород?

    https://github.com/ONLYOFFICE/document-server-prox...

    У меня в одном проекте проксирование HTTPS-to-HTTPS на Nginx настроено так:
    http {
    
            # Websocket
            map $http_upgrade $connection_upgrade {
                    default upgrade;
                    ''      close;
            }
    
    server {
    ...  
              lingering_time 86400;
              proxy_ssl_verify off;
              proxy_ssl_session_reuse on;
              proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
              proxy_cache off;
              proxy_store off;
    
              set $ssl off;
              set $port 80;
              if ($scheme = https) {
                  set $ssl on;
                  set $port 443;
              }
    
            location / {
                proxy_pass https://192.168.XX.XX:8443/;
                gzip off;
                proxy_read_timeout          600s;
                proxy_connect_timeout       600s;
                proxy_redirect              off;
                proxy_buffering             off;
                proxy_request_buffering     off;
                proxy_http_version          1.1;
                proxy_set_header Host                   $http_host;
                proxy_set_header X-Real-IP              $remote_addr;
                proxy_set_header X-Forwarded-Ssl        $ssl;
                proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto      $scheme;
                proxy_set_header X-Forwarded-Port       $port;
                proxy_set_header X-Frame-Options        SAMEORIGIN;
                proxy_set_header Upgrade                $http_upgrade;
                proxy_set_header Connection             $connection_upgrade;
                proxy_set_header Referer "";
            }
    }
    }
    Ответ написан
    7 комментариев