• Как убрать зеркало нашего сайта?

    @xtreme
    Снимаю порчу по SSH :)
    Самый простой, и, наверное, выгодный вариант - создать в веб-сервере виртуальные хосты с именем зеркал (или вообще любых других хостов) и настроить там 301 редирект на основной сайт. Таким образом можно еще и получить какой-никакой приток трафика с посетителей зеркал.
    Ответ написан
    5 комментариев
  • Как заставить Nginx перенаправлять запросы на виртуальные хосты апача?

    @xtreme
    Снимаю порчу по SSH :)
    Можно.
    По-умолчанию, если нигде не используется proxy_set_header, то все будет работать и так. Если надо явно задать имена в бэкенде не такие, как у фронтенда - в таком случае прописываем подмену заголовка
    proxy_set_header Host trololo.com;
    Далее, апач, если на нем настроены NameVirtualHost при попадании на него запроса с nginx, отдаст запрос в виртхост с именем, переданным в заголовке Host.
    Ответ написан
    Комментировать
  • Что бы вы посоветовали поменять в таком конфиге NGINX?

    @xtreme
    Снимаю порчу по SSH :)
    Прочитал комментарии - фигней вы занимаетесь. Конкретная задача есть? Если нет - тогда к чему сотрясать клавиатуру, накидывая конфиг?
    Есть такое понятие - "преждевременная оптимизация". Вам почти любой, кто с этим сталкивался, скажет, что преждевременная оптимизация - это плохо.
    Как сказал Игорь Сысоев в одном из докладов - "Фактически настройка nginx сводится к выставлению worker_processes в число железных ядер на машине, или в auto, а дальше надо заниматься тюнингом самой системы".
    С моей колокольни, обычно первоначальная настройка выглядит так:
    В nginx.conf
    worker_processes auto;
    worker_rlimit_nofile 65535;
    worker_connections 65535;
    accept_mutex off;


    А потом в conf.d описываем первый виртхост с минимальным конфигом...
    Запустили что надо в минимальной конфигурации, посмотрели на все это дело и уже только потом тюнить - включить gzip где надо, выставить опции к сокетам (включая http2, куда ж без него :-) ), выключение sendfile, где не надо, включение aio, где надо, включение thread-pool если ситуация требует, выкручивание буферов в крайних случаях.

    По вашему конфигу - портянка получилась еще и потому, что многие опции дублированы в разных server, хотя можно было их вынести выше в секцию http, ssl-опции можно также почти полностью вынести в секцию http (в вашем случае можно вообще некоторые опустить).
    Ответ написан
    3 комментария
  • Какая программа подойдет для склеивания сканов?

    @xtreme
    Снимаю порчу по SSH :)
    ImageMagick - свободней некуда, конкретней утилита montage из его состава
    www.imagemagick.org/Usage/montage/#geometry_spacing
    Ответ написан
    Комментировать
  • Как ускорить загрузку гифки 22Кб со своего же сервера (используется JS)?

    @xtreme
    Снимаю порчу по SSH :)
    Если я все правильно понял - львиная доля времени уходит на установление SSL-соединения.
    Сам при таких ситуациях первым делом полез бы в настройки веб-сервера, чтобы посмотреть, что там не так с секцией с параметрами SSL (рекомендаций по ускорению SSL в nginx в интернетах - вагон с тележкой).
    Вторым делом - убедился бы, что файлы gif отдаются с помощью nginx, а не проксируются на апач в бэкенде.
    location /img/ {
      root /var/www/...... ;
      expires 2y;
    }


    Либо, если, кровь из носа, надо обрабатывать gif апачем - ну хотя бы proxy_cache туда впилить, чтобы каждый раз к нему не лазить.
    Судя по заголовкам сервера - у вас nginx стоит фронтендом, а судя по таймингу - либо запросы на gif действительно уходят на apache, либо у вас ооочень медленный (либо загруженный) диск.
    Ответ написан
  • Как правильно настроить Exim?

    @xtreme
    Снимаю порчу по SSH :)
    Давно уже взял за правило - при поднятии любого почтосервера, который будет работать с внешним миром:
    1. Проверить, что mail.domain.com указывает на адрес сервера, убедиться, что PTR адреса сервера указывает на mail.domain.com
    2. primary_hostname = mail.domain.com (в Exim. Так мы представляемся собой остальным)
    3. domainlist relay_to_domains = domain.com (так мы разрешаем релей почты для основного домена
    4. SPF-запись в DNS - "v=spf1 a mx ip4:1.2.3.4 ~all"
    5. Генерация DKIM-сертификатов для domain.com, конфигурация DNS и Exim на работу с этой подписью.
    5а. В запущеных случаях - настройка SPF и DKIM для домена mail.domain.com, для писем, генерируемых самим сервером.
    6. Тестовое письмо на ящик в яндексе, чтобы увидеть зеленый шильдик о том, что DKIM настроен верно.
    7. Чуть не забыл - в /etc/aliases строку "root: vasya.pupkin@gmail.com" (вкупе с "webmaster: root"), затем newaliases чтобы получать отчеты об отлупах.

    Минимум действий - рабочая почта.
    Ответ написан
    9 комментариев
  • Реально ли имплементировать ospfv2 на linux?

    @xtreme
    Снимаю порчу по SSH :)
    quagga же вроде поддерживает.
    Ответ написан
    Комментировать
  • Падает WiFi на Macbook-ах, куда копать?

    @xtreme
    Снимаю порчу по SSH :)
    Столкнулись с похожей проблемой, только еще и мобильники отваливались, а постоянное переподключение WiFi высасывало за день батареи в ноль. Проблему до конца так и не решили, поскольку было принято решение перестроить сеть полностью с другой архитектурой и не тратить силы на временное решение.
    Возможно вас натолкнет на правильное решение, если вдруг в этом дело. Также на роутере FreeBSD и точки Ubiquiti.
    В нашем случае проблема заключается в сроке аренды IP-адресов от DHCP-сервера. На половине срока аренды, устройство пытается продлить аренду, что чаще всего по каким-то причинам не удается... либо запрос не доходит до DHCP-сервера, либо ответ от DHCP-сервера не доходит до пользователя (по косвенным признакам кажется, что оно режется Ubiqiti). Разные устройства ведут себя в этом случае по-разному - кто-то держит свой адрес до последнего и в конце срока аренды переполучает адрес по новой практически незаметно для пользователя, кто-то (в основном мобильные) рвет соединение с WiFi и переподключается, кто-то просто освобождает адрес, не теряя сигнала.
    Немного облегчили жизнь увеличением времени аренды. Но это, конечно, большой костыль.
    Ответ написан
    Комментировать
  • Низкая скорость ответа сервера (WAIT 2-5 сек) - где копать и как решить?

    @xtreme
    Снимаю порчу по SSH :)
    Согласен с nirvimel в том, что надо смотреть $upstream_response_time. Если время ответа бэкенда примерно такое же, как и время ожидания - стоит посмотреть на то, чем он так занят.
    Чаще всего в подобных случаях виноват бэкенд. Особенно если там какая-нибудь джумла (ну да... не люблю я её), придется лезть в потроха и смотреть, где там что (тогда php-xdebug + qcachegrind в руки).
    Ответ написан
  • Как настроить gzip для файлов с переменной после расширения?

    @xtreme
    Снимаю порчу по SSH :)
    Какой веб-сервер используется? Если nginx - добавить в gzip_types параметр application/javascript (и application/x-javascript заодно)
    Ответ написан
    1 комментарий
  • Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    @xtreme
    Снимаю порчу по SSH :)
    Я не PHP-программист, но принимал участие в борьбе с данной фичей. Багом назвать язык не поворачивается, поскольку это сообщение - последствия исправления бага в PHP, позволяющего отправлять неправильные письма.
    Если проштудировать diff исходников самого PHP того самого фикса - картина следующая:
    При формировании заголовков в письме, перенос строки должен выглядеть либо как \r\n либо как \n.
    Если между \r и \n есть какой-либо символ (там ловится \0), либо перепутан порядок символов, либо если встречается два \n\n подряд - формируется сообщение
    Multiple or malformed newlines found in additional_header

    Два символа \n подряд могут встретиться в заголовках, если встречается рядом два переноса строк. Допустим, заканчивается одна строка и после нее стоит еще одна пустая строка, состоящая только из переноса - получаем ошибку.

    Когда привели в порядок все заголовки - пало подозрение, что PHP ругается на разделение между заголовками и телом письма (там тоже пустая строка). В конце концов получилось обойти данную фичу тем, что кодировали само тело письма в base64 и выставляли Content-Transfer-Encoding: base64
    PHP ругаться перестал, письма стали отправляться, исправление костылей отложили "на потом".
    Ответ написан
    3 комментария
  • Как создать паппку\файл с именем текущей датой?

    @xtreme
    Снимаю порчу по SSH :)
    Какой шелл используется в скрипте?
    Ответ написан
    Комментировать
  • Как стать профессионалом в Linux?

    @xtreme
    Снимаю порчу по SSH :)
    +1 к Softer
    Сам начинал со всяких пакетных дистров, ни фига не понимая, почему все должно быть именно так... потом FreeBSD с его портами и сборкой из сырцов - там уже начал разбираться с зависимостями. Затем уже Gentoo - система его портежей была крайне похожа на FreeBSD, а сборка из stage1 до полностью рабочего десктопа заставила полностью разобраться в хитросплетениях зависимостей.
    Но без реальных задач будет тяжело, потому что не будет цели как таковой. Собрать десктоп - слишком просто и долго. А вот если будет цель - будет куда стремиться. Начать можно с универсального роутера, как написал Василий Печерский. Сначала просто шлюз с почтой и файлопомойкой с тривиальной настройкой, а затем уже добивать сервисы до полностью рабочего состояния - например, если почта - сделать так, чтобы письма были с валидной DKIM, SPF, с почтовыми ящиками пользователей с доступом откуда угодно с шифрованием и т.д... Если файлопомойка - разграничивать права, настроить бэкапы с компьютеров пользователей (например, Time Machine для маководов), кеширующий прокси-сервер с резалкой рекламы и блэклистом. Веб-сервер с визиткой компании и парой-тройкой виртхостов. И т.д.
    Дальше уже сам поймешь, что тебе интересно и куда развиваться.
    Ответ написан
    Комментировать
  • Периодически не подгружаются картинки на сайте, почему?

    @xtreme
    Снимаю порчу по SSH :)
    Pending - это ожидание. Если у курильщика Chrome - тогда он ограничен 6 одновременными соединениями к одному ресурсу. Ты установил коннект, получил страницу и браузер начинает подгружать статику. И судя по браузеру "некурильщика" - у тебя там мелкие картинки, и на каждый файл надо установить соединение. С ограничением в 6 соединений, если у тебя сверху заливается нечто тормозящее - остальные будут курить до освобождения очереди.

    Включаю телепатический шлем...

    Как один из вариантов - объединить мелкие картинки в спрайты и грузить их одним коннектом, отображая с помощью CSS нужные участки в нужных местах. (Google PageSpeed тебе то же самое подскажет)
    Второй, как полумера - использовать кеш браузеров клиента, чтобы не грузить картинки каждый раз с сервера. Но в первый раз все равно придется загрузить их со страницы в любом случае.
    Далее, судя по всему у тебя либо подрезана скорость на доступ к веб-серверу, либо сервер откровенно тормозит. Картинку размером в 80КБ грузить секунду - это долго.
    Рискну предположить, что у тебя в качестве веб-сервера стоит апач. В таком случае рекомендую увести его например на 127.0.0.1:80, а перед ним на этом же сервере на внешний интерфейс воткнуть nginx с простым конфигом:
    (Естественно, путь до проекта и внешний IP-адрес подставить свои)
    server {
      listen 192.168.0.1:80;
      server_name my-super-puper-project;
      
      location ~ ^.+\.(jpg|png) {
        root /home/www/your-project-name;
        expires 1d;
      }
      location / {
        proxy_pass http://127.0.0.1:80;
      }
    }


    В этом случае картинки (jpg|png) будет отдавать легковесный nginx без участия apache, что значительно разгрузит твой сервер, а на apache будет уходить все остальное (в т.ч. и ЧПУ-ссылки). Если у тебя css и js также отдаются прямо с диска, а не генерятся на каждый запрос динамически, как сумасшедшие - можно их включить в конфиг к картинкам.
    Если с сетью порядок - браузер станет получать статические файлы гораздо быстрее, а значит время Pending тоже уменьшится, что благоприятно скажется на быстродействии.
    Ответ написан
    2 комментария
  • По какому протоколу лучше подключаться к серверу svn?

    @xtreme
    Снимаю порчу по SSH :)
    Доступ настраивается не одинаково. Для HTTP/HTTPS придется использовать веб-сервер с dav-модулем.
    Отличаются протоколы, как ни странно, протоколом. В HTTP ты общаешься с SVN-сервером поверх HTTP, соответственно, права пользователей для доступа к репозиторию и авторизация настраиваются с помощью средств доступа HTTP-сервера. Это, имхо, несколько удобней, чем ковырять конфиг-файлы каждого репозитория. Фактически, можно все правила доступа вынести в один файл, который менять гораздо удобней.
    А лучше (безопаснее), все же, использовать HTTPS или svn+ssh.
    Ответ написан
    1 комментарий
  • Как правильно настроить nginx proxy?

    @xtreme
    Снимаю порчу по SSH :)
    server {
      listen 80;
      server_name localhost;
    
      location ~ \.html$ {
        root   html;
        index  index.html index.htm;
      }
      location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
      }
    }


    Здесь два локейшна. Первый обрабатывает все uri, оканчивающиеся на .html, второй - все остальное.
    В качестве root в первом локейшне надо указать директорию, где расположены html-файлы.
    Странно, что у тебя стоит listen 127.0.0.1:80, так снаружи не зайдешь.
    Ответ написан
  • Как настроить Nginx в качестве прокси?

    @xtreme
    Снимаю порчу по SSH :)
    server {
      listen 80;
      server_name xxx.com;
      root /var/www/yyy.com/web;
      location /adb/ {
        resolver 127.0.0.1;
        rewrite ^/adb/(.*)$ /$1 break;
        proxy_pass http://yyy.com;
        proxy_redirect default; #???
        proxy_set_header Host yyy.com;
      }
    }


    Не поленитесь поставить named на локалхост. В CentOS, например, достаточно запустить дефолтную конфигурацию (yum install bind && chkconfig named on && service named start). Так будет проще и быстрее резолвить, чем каждый раз стучаться в гуглоднс.
    Далее - если не сделать rewrite с break, убрав ваш локейшн, то запрос на xxx.com/adb/ уйдет не на yyy.com, а на yyy.com/adb/. И если там такого урла нет - получим 404 или что-нибудь еще хуже.
    Далее - если собрались проксировать трафик на yandex.ru, то при проксировании подставляйте заголовок "Host yandex.ru". Если оставить, как есть "Host $host", то получится, что на yandex.ru придет ваш запрос, который ищет xxx.com на хосте с yandex.ru, как следствие - 404.
    Далее - nginx.org/ru/docs/http/ngx_http_proxy_module.html#... - стоит разобраться с proxy_redirect. Для разных узлов возможны разные значения. Обычно хватает default, но вполне может понадобиться и off или другие параметры.

    Чтобы заблокировать xxx.com/adb/logo.png при проксировании:

    location ~ ^/adb/logo\.png$ {
      empty_gif;
    }


    В location можно также и так:
    location = /adb/logo.png {
    Либо вместо empty_gif если надо отдавать свою картинку - тогда можно, например, сделать rewrite в нужный урл и отдавать картинку от себя.

    P.S. Можно также сделать пару локейшнов для статических элементов, чтобы обрабатывать их отдельно и класть в локальный кеш - сокращается трафик и ускоряется доступ.
    Ответ написан
  • Nginx, rewrite, как удалить часть URL?

    @xtreme
    Снимаю порчу по SSH :)
    location ~ /asdf/ {
    rewrite ^/asdf/(.*)$ /$1 break;
    proxy_pass ...;
    #или
    #root /....;
    }

    Либо просто

    rewrite ^/asdf/(.*)$ /$1 break;

    Скорее всего второго варианта с одним rewrite в секции server хватит. Зависит от остальной конфигурации.
    Ответ написан
    2 комментария
  • Как зайти в почту гмайл от сервера?

    @xtreme
    Снимаю порчу по SSH :)
    Настроить для отправки свой почтовик не так сложно, как думается. SPF в DNS и генерация DKIM-ключей занимает насколько минут (если делать в первый раз). Установка exim и настройка, которая сводится к добавлению 4+1+1 строк к дефолтному конфигу, также займет насколько минут. (4+1 строк для dkim и еще одна с именем сервера)
    В результате имеем сервер для нормальной отправки подписанной почты, которая не валится в спам, если, конечно, этот самый спам не рассылать. Просто и эффективно.
    А уже прием почты можно сделать на публичных сервисах.
    Ответ написан
    Комментировать