• Как правильно настроить Exim?

    @xtreme
    Кирилл:
    SPF - https://yandex.ru/support/pdd/set-mail/spf.xml
    Там все просто - просто TXT-запись в DNS домена, указывающая, кто может отсылать почту от имени данного домена.
    DKIM - habrahabr.ru/post/173605
    Все, что нужно для его поддержки - уже есть в современном exim.
    Всё подключение сводится к:
    1. Генерация секретного ключа, которым подписываются сообщения
    2. Генерация публичной части ключа
    3. Внесение публичной части ключа в DNS домена.
    4. Правка exim.conf для подписи исходящих писем.
    Все.
  • Падает WiFi на Macbook-ах, куда копать?

    @xtreme
    Значит, скорее всего, если я прав, то стоит кому-то подцепиться к WiFi - ровно через час коннект падает. Если это так - значит, как временный костыль - увеличить время аренды, если позволяет инфраструктура. У нас, например, это проблематично, поскольку устройств гораздо больше, чем адресов в выделенной подсети.
  • Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    @xtreme
    По скриншоту. Все, что идет до первой пустой строки - это заголовки. Ниже первой пустой строки - уже не заголовки, а тело письма.
  • Есть ли железяка для переадресации звонков с GSM (мобильная сеть) на Skype?

    @xtreme
    Как другой вариант - арендовать телефонный номер у любого SIP-оператора (первым на ум почему-то приходит "задарма"), подцепиться смартфоном к оператору по SIP (там все просто - номер/логин, пароль и адрес сервера), переадресовать звонки с мобильного номера на арендованный и принимать звонки по SIP откуда угодно.
  • Есть ли железяка для переадресации звонков с GSM (мобильная сеть) на Skype?

    @xtreme
    Когда сам сталкивался с подобной ситуацией, в моем случае оказалось проще воткнуть обычный 3G-свисток (разлоченный для голоса) в рабочий сервер с Asterisk, а на смартфон поставить CSipSimple. Пара строк в диалплане для переадресации входящего звонка со свистка на sip-аккаунт и обратно, включение у оператора функции переадресации звонка с моего номера на номер в свистке (не оставлять же свою симку) и как будто никуда не уезжал. Из затрат - только свисток подходящей модели, который может принимать голос, время для нахождения способа разлочки с "только интернет", плюс интернет.
    Но, думаю, это будет несколько сложно и излишне, если вы никогда не использовали Asterisk и некуда его поставить.
  • Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    @xtreme
    Просто посмотрите на исходники любого письма в своем почтовом ящике. Особенно от правильных сервисов. Там четко видно, что все заголовки идут подряд, а тело отделяется пустой строкой. Поэтому надо для начала определить, что у вас является телом письма, а что хедерами и только между ними вставлять два конца строки. Судя по коду выше у Вас в хедеры еще и контент письма вставляется... это же неправильно. Конечно проверка будет ругаться, потому что двойной перенос строк в теле письма не запрещен, а PHP при отправке считает тело хедером.
  • Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    @xtreme
    Возможно. Как я уже сказал, я не силен в PHP :) Но по стандарту двойной перенос строки отделяет хедеры от тела письма. Если двойной перенос строки встречается в хедерах где-то еще - PHP формирует Warning и письмо не формируется.
  • Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    @xtreme
    У Вас в коде:
    $headers .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"" . $eol . $eol;

    И практически везде дальше в хедерах набивается два $eol подряд в конце строки.

    Собственно, Вы сами привели ссылку на обсуждение бага. В самом нижнем сообщении от разработчика английским по белому написано, что чтобы посылать multipart-сообщения, пользователи должны соблюдать соглашение RFC 2822, в котором написано, что двойной перенос строки ( два $eol подряд в вашем случае) используется для разделения хедеров письма от тела письма. Поэтому, если пользователи неверно используют $additional_headers - они должны поправить свой код.
    У вас же в хедерах почти везде двойной перенос строки.
  • Permission denied при загрузке страниц на виртуальном хосте, что делать?

    @xtreme
    chmod -R 777 /var/www/arkston/system/cache
    и
    chown -R httpd: /var/www/arkston/system/cache
    конечно же
    Кто знает, что у вас там внутри еще есть...
  • Permission denied при загрузке страниц на виртуальном хосте, что делать?

    @xtreme
    chmod 777 /var/www/arkston/system/cache
    chown httpd: /var/www/arkston/system/cache

    (вместо httpd - пользователь, из-под которого запускается apache)
  • Периодически не подгружаются картинки на сайте, почему?

    @xtreme
    Только если будешь ставить nginx - я тебе только секцию server написал. Остальные конфиги по-умолчанию можно сначала оставить. И дефолтный server убрать (закомментить или удалить, по-желанию) на всякий пожарный. Если будешь делать по-моему - тогда в апаче в Listen укажи именно
    Listen 127.0.0.1:80
    Если используешь apache-2.2 и виртхосты, тогда также
    NameVirtualHost 127.0.0.1:80
    и также в VirtualHost тоже указать 127.0.0.1, а nginx повесить только на внешний интерфейс.
    Стоит учесть, что и nginx и apache будут работать на 80 порту, но на разных интерфейсах. Если вдруг интерфейсы и порты в конфигах пересекутся - при перезагрузке или перезапуске один из демонов не запустится с ругнёй на невозможность прибиндиться на уже занятый порт.
  • Как правильно настроить nginx proxy?

    @xtreme
    OKNOZA: Это и так уже понятно из конфига.

    Для начала стоит определиться, по каким локейшнам у тебя что будет доступно.
    Проще всего разделить по локейшнам, например, следующим образом:
    Предположим, что имя сервера testchat.com. Корень, где расположены статические и php-файлы расположены в /var/www/chat/, php обрабатывается с помощью php-fpm, висящем на порту 9000, индексный файл, который должен открыться по-умолчанию - index.php, а в случае его отсутствия - index.html, а на node.js мы будем отправлять все uri, которые начинаются на /nodejs/.
    В этом случае конфиг будет выглядеть примерно так:
    server {
      listen 80;
      server_name testchat.com;
      index index.php;
      location / {
        root /var/www/chat;
      }
      location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
      location ~ ^/nodejs/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
      }
    }


    Проблемы, которые могут здесь возникнуть - придется переписывать ссылки, которые должны вести в node.js, чтобы они начинались на /nodejs/, чтобы попасть в верный локейшн. И в самом node.js надо учитывать, что uri, который будет приходить туда, будет начинаться на /nodejs/, хотя это можно обойти, вписав "rewrite ^/nodejs/(.*)$ /$1 break" в локейшн /nodejs/.

    Второй вариант - создать локейшны для обработки известных тебе директорий и файлов, а все остальное отправлять на node.js. Этот вариант описан выше. В том числе и используя try_files, если имена файлов пересекаются так, что их не вытащишь регулярками.
  • Как правильно настроить nginx proxy?

    @xtreme
    Если надо, чтобы по "GET /" запрос уходил в .html, вынеси index index.html; выше по уровню из локейшна в секцию server. Кстати, в
    location ~ \.html$ {
      root   html;
      index  index.html index.htm;
    }

    директива index совсем лишняя. Она там не отработает никогда, так что в любом случае её надо выносить выше.
  • Как правильно настроить nginx proxy?

    @xtreme
    OKNOZA: Тогда задача немного некорректна. Если Cannot GET /, то я так понял ты запрашиваешь "GET /", а он на .html не заканчивается, а значит уйдет на node.js.
    Т.к. я не знаю, какая у тебя там иерархия директорий, то могу посоветовать два варианта:
    1. Если у тебя статичные js лежат в отдельной директории (например, /js/):
    location ~ /js/.+\.js$ {
      root html;
    }


    2. Конструкция через try_files, когда проверяется существование статического файла и в случае неудачи запрос уходит в другой локейшн. Она немного более затратная из-за необходимости проверять существование файла, но работает.

    location ~ \.js$ {
      root html;
      try_files $uri @nodejs;
    }
    
    location @nodejs {
      proxy_pass http://127.0.0.1:3000;
      proxy_set_header Host $host;
    }


    Как вариант, во втором примере можно совместить .html и .js, чтобы не плодить локейшны.
    location ~ \.(html|js)$ {
  • Как настроить Nginx в качестве прокси?

    @xtreme
    Svav: Это уже зависит от настроек сервера на той стороне. Что ты ему передаешь, то он и видит. Но вообще, обычно, смотрится X-Forwarded-For, как заголовок, который используют неанонимные прокси-серверы для обозначения адреса клиента.
    Кстати, хотя nginx и умеет проксировать, все же для доступа большого числа клиентов к неограниченному (или ограниченному) числу сайтов лучше применять именно прокси-серверы. Был опыт установки nginx в качестве прокси для всего HTTP и могу сказать, что Squid с такой задачей справляется гораздо лучше.
  • Как настроить Nginx в качестве прокси?

    @xtreme
    Svav: искать на удаленном сервере оно должно, если ты ре врайт написал внутри локейшна с проксированием. Вариан с другим локейшном тоже нормально. Фактически, тебе надо корневой локейшн обрисовать и всё.
  • Как настроить Nginx в качестве прокси?

    @xtreme
    У тебя в реврайте с robots.txt написана чушь, которая никогда не сработает. Не вижу реврайт для logo.png, из-за чего могу предположить, что ты его не туда вставлял, оттого он и не работал.

    По поводу robots.txt, который стал недоступен - быть такого не может, если в конфиге остался root и других, кроме adb, локейшнов не вписано.
  • Как настроить Nginx в качестве прокси?

    @xtreme
    Svav: оба вопроса показывают, что конфиг не настолько прост и не все условия верны. Если есть возможность - покажи целый конфиг.
  • Nginx, rewrite, как удалить часть URL?

    @xtreme
    Попробуй во втором вариенте вместо break использовать last. Там несколько иной механизм. Обычно break используется внутри location, а такой реврайт надо использовать вне всех локейшнов.

    Если пользовательские приложения поддерживают 301 редирект - можно использовать вариант, который дал sim3x. Но в этом случае пользователь будет генерировать два запроса вместо одного.
  • Как настроить Nginx в качестве прокси?

    @xtreme
    Svav: resolver используется для разрешения имен в случае, если ты проксируешь не на IP-адрес, а на доменное имя. Если я правильно помню (надо в документации посмотреть), то nginx резолвит имена в конфиге один раз при старте. В случае, если у тебя стоит сторонний адрес - прибавь ко времени старта время, которое ушло на запрос для резолвинга имени. Если же у тебя есть локальный DNS, гораздо проще спрашивать у него - если имя уже есть в кеше DNS - резолвинг выполнится не за 50-100 мс, а гораздо быстрее.

    Про картинку - я бы сделал так в секции server:
    rewrite ^/adb/logo.png$ /logo.png last;
    Можно также вместо last попробовать break. Но, вроде как, особого различия в данном случае это дать не должно.