Задать вопрос
Ответы пользователя по тегу Nginx
  • Как уменьшить время ответа SSL на вебсервере?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Можно немного оптимизировать настройки, но все равно 2мя самыми большими пожирателями времени будут сеть (RTT) и процессорное время. Первое можно улучшить расположившись на сервере который физически ближе к вашим клиентам, второе - более мощным процессором. Именно так получают <100ms. Вот например на моем сайте используется стандартный CloudFlare, и как видите тут как раз <100ms. Я пробовал настраивать на самом сервере, но никак не получалось добиться таких же цифр, особенно с учетом того что сервер у меня один, и RTT для разных точек мира будет разный (и часто долгий), а у CloudFlare все-таки баллансировка адекватная:

    5e774dca0daf4419180142.jpeg
    Ответ написан
    Комментировать
  • Как исправить проблему кэширования?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если too long header у cache file, то при чем тут fastcgi_buffer_size? Данный параметр используется при чтении ответа от fastcgi сервера, а cache file читается самим nginx, без участия внешнего fastcgi.

    Конфиг вы не показали, поэтому вангую что у вас кеш настроен через proxy_cache_path /cache/... и тд. А значит вам нужно увеличивать proxy_buffer_size.
    Ответ написан
  • Что лучше исполльзовать для VoD: nginx+memcaсhe, haproxy+varnish, nginx + varnish?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сразу скажу - я не специалист в стриминге, VoD и подобном, но исходя из логики и знания упомянутых инструментов, мне кажется есть смысл рассмотреть вариант haproxy в виде балансировщика и для SSL termination, а за ним пусть стоит Nginx. Первый быстрее по SSL и хорош в виде балансировщика. Второй хорош для оставшихся задач.
    Ответ написан
    Комментировать
  • Как настроить ЧПУ на wordpress apache+nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Зачем вам Apache? Используйте Nginx + PHP-FPM, тогда для ЧПУ надо всего лишь одну строчку в конфиге Nginx.
    2. Если все-таки Apache нужен, настраивайте ЧПУ в .htaccess. Nginx в данной связке всего лишь форвардит (проксирует) запросы на Apache, а их обработку производит последний.
    Ответ написан
    Комментировать
  • Как сделать редирект?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Директива rewrite может использоваться в блоке server, совсем необязательно (и даже не рекоммендуется) для каждого правила rewrite писать свой отдельный блок location. См. документацию.
    2. Если редиректов больше чем парочка штук, для удобства в блоке server подключите отдельный файл, класть его можно где угодно (я держу в самом проекте, это позволяет трекать все изменения в git):

    include /var/www/site-name/redirects.conf;

    3. А уже в этом файле пишите редиректы друг за другом, по одному в строчку:

    rewrite ^/page/qwe/?$ $schema://$server_name/page-qwe/ permanent;
    rewrite ^/qwe/?$ $schema://$server_name/qwe-qwe/ permanent;


    4. После каждого изменения конфига (в том числе подключенного конфига с редиректами) необходимо попросить Nginx перезагрузить конфиги (не обязательно, и даже не нужно перезагружать сам Nginx):

    sudo service nginx reload
    Ответ написан
    Комментировать
  • Почему nginx выдаёт 404?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    location /images/ - маппит УРЛ site.com/images/ в папку, которую вы укажете в директиве root. Соответственно, должно быть:
    location /images/ {
          root /var/www/stuff/images;
    }
    Ответ написан
  • Как для каждого виртуального сервера nginx задать своего пользователя?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В принципе можно запустить несколько nginx instances на разных портах, но ИМХО это бред. Nginx очень эффективный сервер и справится со всеми сайтами из одного instance. Что касается пользователей для сайтов, то это принято решать с помощью PHP-FPM, вот с этим проблем нет - запускаете несколько пулов, каждый под своим пользователем и с отдельным сокетом. А далее говорите Nginx для каждого виртуального хоста использовать свой сокет.
    Ответ написан
    Комментировать
  • Почему не работают домены в homestead?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Директива folders маппит корневую папку с проектами, которая с хоста маппится на виртуалку. В вашем случае это ~/Documents/dev/server – в этой папке у вас должны лежать все проекты.

    Директива sites содержит конкретный маппинг папок проектов, где каждому домену соответствует папка проекта в корневой папке всех проектов (см. выше), то есть /home/vagrant/server/project. Путь отсюда будет использован в конфиге сервера в директиве root.

    folders:
        - map: ~/Documents/dev/server
          to: /home/vagrant/server
    
    sites:
        - map: homestead.test
          to: /home/vagrant/server/homestead
        - map: example.test
          to: /home/vagrant/server/example

    В вашей файловой системе это должно выглядеть вот так:

    ~/Documents
       - dev
         - server (вот эту папку маунтим на виртуалку)
           - homestead (конкретный проект)
           - example (конкретный проект)

    После этого не забываем homestead up --provision
    Ответ написан
    3 комментария
  • Оптимальная конфигурация для сервера?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если вопрос поставлен таким образом - то current stable, то есть PHP 7.2 и MariaDB 10.2.
    Главное - убедиться, что ваш код работает с ними как положено.
    Ответ написан
    Комментировать
  • Как дописать правильно данный код в nginx.conf?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В server{...}.

    Из документации:
    Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
    location @name { ... }
    Default: —
    Context: server, location

    nginx.org/en/docs/http/ngx_http_core_module.html#l...
    Ответ написан
    Комментировать
  • Как прервать закачку файла при закрытии страницы?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У Nginx есть 3 полезные директивы:

    reset_timedout_connection on; # 1
    client_body_timeout 5; # 2
    send_timeout 2; # 3


    Что они делают:

    # 1 - Если клиент перестал читать отвечать от сервера, Nginx будет сбрасывать соединение с ним, освобождая ресурсы.

    # 2 - Ограничение времени ожидания тела запроса от клиента. Если тело запроса не пришло в этот интервал, Nginx сбросит соединение.

    # 3 - Если клиент прекратит чтение ответа, Nginx подождет заданный интервал и сбросит соединение.

    По умолчанию эти значения весьма высоки. Если я правильно понимаю ваш вопрос, то по сути Nginx это и так делает (сбрасывает соединение с отвалившимся клиентом), но делает это не сразу (в момент закрытия вкладки браузера), а по истечении некоторого времени. Уменьшив эти интервалы можно заставить Nginx сбрасывать соединения сильно раньше. Но и слишким низкие значения не стоит использовать - в этом случае медленные клиенты будут посланы куда подальше. А половина мобильных клиентов в половине мобильных сетей - медленные.
    Ответ написан
    Комментировать
  • Какая серверная ОС более продуктивна для совместной работы nginx и apache?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы уже с самого начала не разобрались:
    nginx + apache (фронтенд и бэкенд)

    И Nginx, и Apache - это веб-серверы, вашей терминологией - фронтенд. Бекенд - это PHP, Python и тд. Первое, что надо сделать - выбросить Apache вообще, если для его использования нету реально обоснованной причины.
    Ответ написан
    6 комментариев
  • Как добавить водяные знаки «на лету» через config Nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    https://github.com/intaro/nginx-image-filter-watermark
    https://github.com/vdvm/nginx-watermark

    Правда оба модуля достаточно давно не обновлялись, надо тестить со свежей версией Nginx (или с той, которую вы используете).
    Ответ написан
  • Какая увязка nginx с Apache 2 лучше?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Какая увязка nginx с Apache 2 лучше?

    Та, в которой отсутствует Apache.

    Если вы не дешевый shared-хостинг, которому нужен .htaccess в каждой папке и применение конфига на лету - назовите мне хотя бы одну вескую причину держать Apache за Nginx. В чем профит? Nginx быстрее Apache по статике. Nginx + PHP-FPM быстрее чем Nginx + Apache + PHP.
    Ответ написан
    Комментировать
  • Как настроить постоянные ссылки в Wordpress на nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас не конфиг, а какой-то винегрет...
    return 301 https://$server_name$request_uri;
    В рамках listen :80 вы редиректите на https?!
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    Этот фрагмент у вас вложен в такой же
    location / {
        ...
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
        ...
    }

    Что это за чушь? В этом конфиге даже разбираться не хочется.

    Вот базовый конфиг, который работает и отвечает за пермалинки в том числе:
    server {
            # Слушаем 80й порт
            listen 80; 
            # Обслуживаем доменное имя, www тут же слушать не надо - будут дубликаты контента, печаль для SEO
            server_name example.com;
            # Корневая директория проекта
            root /var/www/example.com/httpdocs;
    
            # Индексы
            index index.php index.html;
    
            # Обработка запросов
            # $uri - существует ли конкретный файл
            # $uri/ - существует ли директория
            # /index.php?$args - если это не запрос на существующий файл или директорию, то перебрасываем на роутер WordPress (это и есть то, что надо для пермалинков)
            location / {
                    try_files $uri $uri/ /index.php?$args;
            }
    
            # Обрабатываем PHP
            location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                    fastcgi_pass unix:/var/run/php5-fpm.sock; # или php7.0-fpm.sock
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
            }
    
            # Все остальное
    
            # Запрещаем доступ к .htaccess
            location ~ /\.ht {
                    deny all;
            }
    
            # Просим кешировать статику на Х дней, не писать в логи
            location ~*
            ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                    access_log off;
                    log_not_found off;
                    expires 30d;
            }
    
    }
    
    # Отдельно слушаем домен с www и редиректим на основной
    server {
            # Слушаем 80й порт
            listen 80; 
            # Обслуживаем доменное имя c www
            server_name www.example.com;
            # Отправляем запрос на основной домен
            return 301 $scheme://example.com$request_uri;
    }

    Снабдил комментами для ясности.

    Что касается протокола HTTPS, то во-первых, его слушать надо на отдельном порту, а во-вторых, там еще SSL-сертификат надо подключать.
    Ответ написан
    5 комментариев
  • Как сделать ЧПУ на Nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    На уровне Nginx вы ставите только:
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    А уже вся остальная логика - на уровне PHP.
    Ответ написан
  • Медленный - быстрый сайт?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если у вас именно фильтры / поиск / аггрегация товаров жрут много времени (в том числе аякс-запросы, в виджетах и тд) - смотрите в сторону Elastic Search. WP_Query и его расширенная версия от WooCommerce не особо предназначены для такого объема данных. Будут ли они работать? О да, если железо с большим запасом. Но лучше перенести это все на Elastic Search, и сервер сильно выдохнет.

    Впрочем, по скринам у вас бекенд в принципе шустрый. Вопрос скорее во фронте. И вот тут надо смотреть, что именно его так насилует. Предположение Дмитрий по поводу тяжелой темы скорее всего верное. Попробуйте http/2, должно облегчить (а по хорошему это уже должно быть стандартом). Темку надо тестить и искать узкие места. Явно тонны javascript. Если много аякс-запросов шлет тема, смотрите можно ли запрашиваемые данные отдавать без ajax или хотя бы сделать fragment caching для этих данных и возвращать из сразу сгенерированными в конечный результат из памяти. В общем, в таких случаях надо дебажить на всех уровнях, искать узкие места и устранять их на корню.
    Ответ написан
    2 комментария
  • Как отдавать nginx только изменившиеся файлы?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Есть такой прием, называется "cache busting". Это когда к ссылке на статический файл (jpg, css, js и тд) добавляется произвольная или инкрементальная строка в виде GET-параметра, как написал axeax, только там может быть что угодно. Есть 2 основных способа - либо рандомный набор символов, либо "версия", имеющая смысл - это может быть стандартное версионирование кода / релиз - например, ?v=2.0.1 или же кусок хеша коммита из VCS, например ?v=952f038. Сам параметр может называться как угодно - v, rnd, version и тд. Смысл в том, что если присутствует такой параметр и он отличается от предыдущего - браузер запросит свежий файл. Но Google PageSpeed например на эти параметры ругается. Впрочем, пусть идет лесом, его рекомендации далеко не всегда имеют смысл.
    Ответ написан
    Комментировать
  • Как сделать редирект в nginx со сменой адреса в адресной строке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Так и должно происходить - редиректы именно так и работают, что return 301 {to}, что rewrite {from} {to} permanent. Они сообщают клиенту, что надо отправить новый запрос на новый урл, что клиент и делает.
    Если у вас остается старый урл - что-то не так с конфигурацией в другом месте.
    Ответ написан
    1 комментарий
  • Как в последней версии Nginx работать с множеством конфигов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Можно вообще в любую произвольную, хоть старую привычную sites-enabled. Да и хранить их можно хоть в своей домашней директории. Просто создайте нужные папки и в nginx.conf пропишите чтение конфигов оттуда.
    Ответ написан
    1 комментарий