Как настроить смартфоны и ПК. Информационный портал

Nginx: настройка и установка. Тонкая настройка Nginx

Добрый день!

Да, на мой взгляд, Nginx в несколько раз быстрее сервера Apache. Некоторые возразят - ведь Apache можно оптимизировать и он тоже станет быстрым. Это правда, но, не надо забывать, что и Nginx можно очень сильно разогнать. Подробно про оптимизацию я обязательно напишу отдельную статью.

Немного теории о Nginx + php-fpm

В веб-сервере Apache php является подключаемым модулем, такая связка работает медленно и потребляет много ресурсов. Из-за этой неудачной архитектуры, Apache обычно не может обработать более 200-300 запросов в секунду даже на очень мощном сервере. В Nginx же применена другая архитектура - сам веб-сервер Nginx обрабатывает только запросы на статику (картинки, css и прочее), а выполнение php отдает другому программному серверу - php-fpm. Php-fpm (FastCGI Process Manager) - это полностью самостоятельное программное обеспечение, его можно установить на одном сервере с Nginx (для небольших проектов), либо вынести на отдельный сервер. Большие проекты обычно обслуживают по несколько серверов с Nginx, php-fpm и базами данных.

Заменяя сервер Apache на Nginx + php-fpm, вы сможете ускорить обработку запросов пользователей и сильно сэкономить на "железе". Веб проект с посещаемостью до 10000 уникальных посетителей в день вполне сможет жить на самом дешевом виртуальном сервере от DigitalOcean за 5$ в месяц. Кстати, если вы перейдете по этой ссылке - DigitalOcean , вы получите 10$ при регистрации, а это 2 месяца использования виртуального сервера. Никаких дополнительных условий при этом там нет.

Но перейдем к делу. Я буду описывать процесс установки и настройки на примере CentOS 6.x, но он не сильно будет отличаться и для других дистрибутивов Linux.

Установка Nginx:

  • /var/run/php5-fpm.sock уже должен присутствовать на сервере? в ubuntu 16.04 не нашел такого файла в /var/run
  • 1. Установка репозитария Nginx: в стандартных дистрибутивах Linux по умолчанию нет дистрибутива Nginx, поэтому добавим его в систему.

    vi /etc/yum.repos.d/nginx.repo


    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1

    Далее нажмите ":wq" и Enter для сохранения и выхода. Все, теперь Nginx доступен для автоматической установки через менеджер пакетов yum. Если вы используете другой дистрибутив Linux - перейдите на для получения инструкций именно для вашей системы.

    2. Установка Nginx из репозитария: теперь просто выполните команду установки.

    Установка php-fpm:

    Php-fpm доступен по всех современных дистрибутивах по умолчанию, поэтому просто выполните установку:

    При этом будут установлен сам сервер и все вспомогательные пакеты. Если что-то не получается, можно собрать php-fpm из исходников самостоятельно, для подробных инструкций перейдите сюда .

    Настройка и запуск Nginx + php-fpm:

    1. Начнем с php-fpm: откройте файл конфигурации

    vi /etc/php-fpm.d/www.conf

    и пропишите там работу через сокет (так будет работать быстрее):

    listen = /var/run/php5-fpm.sock

    измените существующую строчку "listen =" или добавьте новую и удалите старую.

    2. Теперь перейдем к Nginx: создайте файл конфигурации для своего первого сайта (site1 замените на название сайта, хотя будет работать и так)

    vi /etc/nginx/conf.d/site1.conf

    Ниже приведена минимальная конфигурация, можете просто ее скопировать. Все что надо заменить, выделено красным. В данной конфигурации настроена отдача статических файлов и доступ к одному php-файлу - index.php. Все современные CMS запускаются одним файлом, поэтому такая конфигурация подойдет для большинства задач. Если вам надо запускать другие php-файлы, пропишите их отдельно. В данной конфигурации файлы сайта надо положить в папку /home/mysite/public_html/

    server {
    listen [ ip адрес сервера] :80;
    server_name сайт ;
    resolver 8.8.8.8;
    error_log /var/log/nginx/сайт _error.log warn;
    root /home/сайт /public_html;
    access_log /var/log/nginx/сайт -access.log;
    charset utf-8;
    index index.php;
    location ~ .*(gif|jpg|jpeg|png|ico|swf|txt|pdf|doc|docx|exe|xls|xlsx|strings|zip|rar|7z)$ {
    expires 1y;
    }

    Location ~ .*(html|htm|js|css)$ {
    expires 1y;
    }

    location ~ ^/index.php {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /home/сайт /public_html/index.php;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_NAME /index.php;
    }

    Теперь положите файлы вашего первого сайта в папку /home/site1 /public_html/ и мы готовы к запуску.

    3. Запуск nginx + php-fpm:

    service nginx start

    service php-fpm start

    Если вы все сделали правильно и нигде не ошиблись, результат будет такой:

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

    Я всегда рад помочь!

    |

    Nginx – один из самых популярных веб-серверов в мире, позволяющий размещать очень объемные сайты с высоким трафиком. Он, как правило, расходует меньше ресурсов, чем Apache. Также его можно использовать в качестве обратного прокси-сервера.

    Данное руководство поможет установить Nginx на сервер Ubuntu 16.04.

    Требования

    • Сервер Ubuntu 16.04.
    • Не-root пользователь с доступом к команде sudo (об этом – в ).

    1: Установка Nginx

    Пакет Nginx доступен в стандартном репозитории системы Ubuntu.

    Поскольку это первое взаимодействие с системой пакетирования apt в текущей сессии, нужно обновить индекс пакетов. После этого можно установить Nginx.

    sudo apt-get update
    sudo apt-get install nginx

    После этого пакетный менеджер установит веб-сервер и все его зависимости.

    2: Настройка брандмауэра

    Прежде чем запустить Nginx, нужно настроить брандмауэр для поддержки трафика этого сервиса. Во время установки Nginx регистрируется как сервис в ufw, потому разрешить трафик веб-сервера очень просто.

    Откройте список настроек приложений ufw:

    sudo ufw app list

    Команда вернёт:

    Available applications:
    Nginx Full
    Nginx HTTP
    Nginx HTTPS
    OpenSSH

    Как видите, в списке есть три профиля Nginx:

    • Nginx Full: этот профиль открывает порт 80 (незашифрованный сетевой трафик) и 443 (зашифрованный трафик TLS/SSL).
    • Nginx HTTP: профиль для незашифрованного трафика HTTP на порт 80.
    • Nginx HTTPS: профиль для зашифрованного трафика TLS/SSL на порт 443.

    Чтобы включить профиль, введите:

    sudo ufw allow "Nginx HTTP"

    Убедитесь в том, что профиль включен:

    Команда должна сообщить, что трафик HTTP разрешен:

    Status: active
    To Action From
    -- ------ ----
    OpenSSH ALLOW Anywhere
    Nginx HTTP ALLOW Anywhere
    OpenSSH (v6) ALLOW Anywhere (v6)
    Nginx HTTP (v6) ALLOW Anywhere (v6)

    3: Тестирование веб-сервера

    После установки Ubuntu 16.04 запустит Nginx автоматически. На данный момент веб-сервер должен запуститься и работать.

    Чтобы убедиться в том, что Nginx запущен, запросите его состояние в системе инициализации systemd.

    systemctl status nginx
    nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
    Active: active (running) since Mon 2016-04-18 16:14:00 EDT; 4min 2s ago
    Main PID: 12857 (nginx)
    CGroup: /system.slice/nginx.service
    ├─12857 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
    └─12858 nginx: worker process

    Как видите, сервис успешно запущен.

    Также можно попробовать посетить стандартную посадочную страницу Nginx. Она доступна в браузере по доменному имени или IP-адресу.

    Если вы не знаете своего IP-адреса, вы можете узнать его с помощью командной строки. Введите:

    ip addr show eth0 | grep inet | awk "{ print $2; }" | sed "s/\/.*$//"

    Команда вернёт несколько строк. Проверьте каждый адрес в браузере.

    Также можно узнать, как видят ваш IP-адрес другие точки в сети.

    sudo apt-get install curl
    curl -4 icanhazip.com

    Узнав вой IP, введите его в браузер, чтобы убедиться, что веб-сервер работает должным образом.

    http://server_domain_or_IP

    На экране должна появиться стандартная посадочная страница Nginx:

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

    4: Управление процессами Nginx

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

    Чтобы остановить Nginx, введите:

    sudo systemctl stop nginx

    Чтобы запустить, введите:

    sudo systemctl start nginx

    Для перезапуска используйте команду:

    sudo systemctl restart nginx

    Чтобы обновить настройки Nginx, не сбрасывая соединения, введите команду:

    sudo systemctl reload nginx

    По умолчанию Nginx автоматически запускается во время загрузки сервера. Это поведение можно отключить:

    sudo systemctl disable nginx

    Чтобы возобновить автозапуск сервиса, введите:

    sudo systemctl enable nginx

    5: Файлы и каталоги Nginx

    Теперь вы знаете, как управлять сервисом. Пора ознакомиться с важными файлами и каталогами Nginx.

    Контент

    • /var/www/htm: этот каталог содержит текущий контент сайта. По умолчанию в нём находится только стандартная посадочная страница, которую вы уже видели. Этот каталог можно изменить в конфигурационном файле Nginx.

    Настройки сервера

    • /etc/nginx: каталог настроек nginx, в котором хранятся все конфигурационные файлы.
    • /etc/nginx/nginx.conf: главный конфигурационный файл Nginx, содержащий глобальные настройки веб-сервера.
    • /etc/nginx/sites-available: каталог, хранящий настроенные блоки server (виртуальные хосты) каждого отдельного сайта. Nginx не будет использовать эти блоки, пока ссылка на них не появится в каталоге sites-enabled (о нём речь пойдёт дальше). Как правило, этот каталог используется для настройки виртуальных хостов.
    • /etc/nginx/sites-enabled/: каталог, хранящий включенные блоки server. Чтобы включить блок, нужно создать символьную ссылку на файл, хранящийся в каталоге sites-available.
    • /etc/nginx/snippets: этот каталог хранит фрагменты настроек, которые можно включить в конфигурацию Nginx. Как правило, в качестве фрагментов добавляют потенциально повторяемые сегменты конфигурации.

    Логи

    • /var/log/nginx/access.log: этот лог регистрирует все запросы, полученные веб-сервером Nginx (если не настроено другое поведение).
    • /var/log/nginx/error.log: этот лог хранит все сообщения об ошибках Nginx.

    Заключение

    Теперь веб-сервер Nginx установлен и готов к работе. Используйте его для обслуживания контента вашего сайта.

    Здравствуй, уважаемый пользователь Хабрахабра. Мое повествование будет о том, как подготовить почву для локальной веб-разработки проектов в операционной системе Ubuntu 16.04.1 LTS.

    В данной статье хочется развеять и разъяснить возможные трудности связанные с установкой и настройкой ПО, которое требуется для современной веб-разработки, с которыми возможно сталкиваются начинающие разработчики и не только.

    Технологии которые будут использованы в статье: nginx, php-fpm.

    Перед началом повествования, хочу отметить, что я проделывал все эти действия на «голой» системе.
    Я буду работать с пакетным менеджером aptitude. Так же рекомендую обновить индекс пакетов и сами пакеты перед установкой ПО. В статье мы проделаем эти действия вместе.

    Поехали!

    Установка пакетного менеджера aptitude , обновление индекса и пакетов

    Устанавливаем:

    Sudo apt install aptitude
    Обновляем индекс.

    Sudo aptitude update
    Обновляем пакеты (команда обновит все пакеты, для которых есть новые версии, если потребуется удаление пакетов, то оно будет выполнено).

    Sudo aptitude full-upgrade

    Установка и настройка nginx (версия >= 1.10.0)

    Устанавливаем.

    Sudo aptitude install nginx
    Запускаем.

    Sudo service nginx start
    Проверяем версию, чтобы убедиться что не установили старую, то есть ниже 1.10.0.

    Установку и запуск произвели, теперь пойдем в каталог туда куда установлен наш nginx и посмотрим на его структуру. Каталог nginx находится по такому пути:

    Cd /etc/nginx/
    Посмотреть содержимое директории можно командой ls, с флагами -la будет удобнее просматривать содержимое каталога (в действительности эту команду с конкретными флагами можно описать детальнее и вернее, но у нас сегодня другая тема).

    Ls -la
    Наc интересуют в данный момент два каталога, которые вы видите на скриншоте. Это каталоги sites-available и sites-enabled.

    Давайте перейдем в каталог sites-available и начнем конфигурировать наш виртуальный хост (сайт).

    Cd /etc/nginx/sites-available
    Перед началом создания конфигурационного файла, проверим что лежит у нас в данном каталоге. В моей случае каталог не пустой, в нем уже есть конфигурационные файлы, я их затер, чтобы не вводить вас в заблуждение.

    Важное отступление

    В случае установки nginx «с нуля», именно «с нуля», так как при удалении nginx командой
    sudo apt-get remove nginx или sudo apt remove nginx конфигурационные файлы остаются и если вы вдруг будете не понимать, почему nginx не работает и захотите его переустановить (обычно к такому прибегают начинающие пользователи Linux), то и после переустановки он не будет корректно работать, из-за того что в старых конфигурационных файлах (они не удаляются после удаления командой remove) прописаны неверные настройки, их придется удалить, либо настроить верно, только тогда nginx заработает.

    Рекомендую удалять командой sudo apt-get purge nginx или sudo apt purge nginx . Если вы используете пакетный менеджер aptitude, то команда sudo aptitude purge nginx удаляет пакет полностью со всеми зависимостями и конфигурационными файлами.


    В этом каталоге будет по умолчанию один файл, с названием default. В нем будет конфигурационный файл с примером, с комментариями, его вы можете изучить на досуге, а можете и вовсе удалить (всегда можно обратиться к официальной документации).

    Ls -la

    Создадим свой конфигурационный файл, который будет соответствовать названию домена нашего локального сайта (или реального, если уже знаете его название). Это удобно, в будущем, когда будет много конфигурационных файлов, то это избавит вас от путаницы в них. У меня этот файл будет называться project.local.

    Sudo touch project.local
    Посмотрим что получилось.

    Теперь откроем его в редакторе, я открою его в nano.

    Sudo nano project.local
    Видим что он у нас пустой. Теперь перейдем к формированию нашего файла. Нужно привести конфигурацию к такому виду, как написано ниже. Я опишу только жизненно важные директивы этого файла, описывать остальное не буду, так как это не является на данный момент важным, все-таки у нас тема базовой настройки. Этих настроек с «горкой» хватит для разработки проектов локально, не только мелких, но и довольно крупных. В следующих статьях опишу отдельно каждые использованные директивы (именно так называются строки, например server_name) этого файла.

    Смотрите комментарии прям в конфигурационном файле.

    Server { listen 80; # порт, прослушивающий nginx server_name project.local; # доменное имя, относящиеся к текущему виртуальному хосту root /home/stavanger/code/project.local; # каталог в котором лежит проект, путь к точке входа index index.php; # add_header Access-Control-Allow-Origin *; # serve static files directly location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; log_not_found off; } location / { # add_header Access-Control-Allow-Origin *; try_files $uri $uri/ /index.php?$query_string; } location ~* \.php$ { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # подключаем сокет php-fpm fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
    Сохраняем файл. Теперь нам надо проверить, нет ли в нем ошибок. Сделать мы это можем командой.

    Sudo nginx -t
    Если видим такую информацию как на скриншоте, значит у нас все верно, может продолжать настройку. Если вы получаете какие-либо ошибки, стоит перепроверить конфигурационный файл.

    Теперь нам надо активировать конфигурационный файл, в каталоге /etc/nginx/sites-enabled/ необходимо создать симлинк (символическая ссылка). Если у вас nginx был установлен «с нуля», то в этом каталоге есть симлинк на файл default, про который рассказывалось выше, его можно удалить, если он вам не требуется. Переходим в нужный каталог.

    Cd /etc/nginx/sites-enabled/
    Теперь мы в нужном каталоге. Давайте создадим наш симлинк. Для создания используется команда ln с флагом -s, далее мы укажем путь до нашего конфига project.local.

    Sudo ln -s /etc/nginx/sites-available/project.local
    Посмотрим на наш созданный симлинк.

    Чтобы убедиться что мы делаем еще все верно опять запустим команду.

    Файл hosts

    Этот файл находится по пути /etc/hosts. Наличие в нем записей, позволяет запускать nginx с использованием в качестве домена localhost. В этом файле можно присваивать альтернативные псевдонимы, например для нашего проекта project.local, мы присвоим домен project.local.

    Открываем файл в редакторе nano.

    Sudo nano /etc/hosts
    У вас в этом файле будет и другая информация, просто игнорируйте ее. Вам всего лишь нужно добавить строку как на моем скриншоте.

    Установка php-fpm (>=7.0)

    sudo aptitude install php-fpm
    Проверяем установленную версию, на всякий случай, хотя в Ubuntu 16.04.1 в репозиториях лежит именно 7.0 версия.

    Php-fpm7.0 -v

    Убеждаемся что все ок. Стартуем php-fpm.

    Sudo service php7.0-fpm start
    Если будете править конфиги, то не забывайте рестартовать демон. Это делает так. Но нам это не потребуется.

    Sudo service php7.0-fpm restart
    На этом установка и настройка php-fpm закончена. Правда, это все. Это не магия, путь до сокета php-fpm у нас уже был прописан в конфигурационном файле. Конечно, вам могут понадобиться какие-либо расширения php для разработки личных проектов, но их вы можете поставить по мере того как они будут требоваться.

    Теперь пойдем для в каталог с нашим проектом, у меня он лежит по такому пути.

    Cd /home/stavanger/code/project.local
    Поднимемся на каталог выше и сделаем права 777 (то есть мы будем делать полные права каталогу с нашим проектом project.local). В будущем это избавим нас от лишних проблем.

    Cd .. sudo chmod -R 777 project.local
    На этом настройка ПО завершена, давайте создадим тестовый файл в нашем рабочем каталоге project.local и убедимся что все работает. Я создам файл index.php с таким содержанием.

    Идем в браузер и видим что у нас все прекрасно работает! Интерпретатор php в том числе.

    С уважением к читателям, Stavanger.

    Веб-сервер Nginx - это один из самых популярных веб-серверов с очень высокой производительностью и быстрой обработкой статических запросов от пользователей. При правильной настройке можно добиться очень высокой производительности от этого веб-сервера. Nginx очень быстро справляется со статическими файлами, будь то html страницы или другие виды ресурсов.

    В одной из предыдущих статей мы уже рассматривали и настройку его основных параметров, в этой же статье я хочу больше остановиться на производительности и подготовке веб-сервера к использованию в боевых условиях. Что касается дистрибутива Linux, то сегодня мы будем рассматривать CentOS, эта система часто используется на серверах и с настройкой Nginx тут могут возникнуть некоторые сложности. Дальше будет рассмотрена настройка Nginx CentOS, поговорим как включить полную поддержку http2, google pagespeed, и настроить основной конфигурационный файл.

    В официальных репозиториях CentOS есть Nginx и он, скорее всего, уже установлен в вашей системе. Но мы хотим чтобы сайт работал по протоколу http2, который позволяет передавать все данные одним подключением, а это увеличивает производительность. Для работы по http2 вам понадобиться настроить SSL сертификат, но об этом уже написано в статье получение сертификата Lets Encrypt Nginx. Но это еще не все. для переключения с обычного SSL на HTTP2.0 в большинстве браузеров сейчас используется протокол ALPN, а он поддерживается начиная с OpenSSL 1.02. В то время, как в репозиториях есть только OpenSSL 1.01. Поэтому нам нужно установить версию Nginx, собранную с OpenSSL 1.02. Для этого можно использовать Broken Repo:

    sudo yum -y install yum-utils
    # sudo yum-config-manager --add-repo https://brouken.com/brouken.repo

    Если вы используете репозиторий EPEL, то нужно указать что не надо из него брать Nginx:

    sudo yum-config-manager --save --setopt=epel.exclude=nginx*;

    Теперь для установки правильной версии Nginx достаточно набрать:

    sudo yum install nginx

    Будет установлена самая последняя версия Nginx 1.13.2, с полной поддержкой ALPN. Дальше перейдем к настройке.

    2. Настройка Nginx

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

    глобальные опции
    events {}
    http{
    server {
    location{}
    }
    server {}
    }

    Сначала идут глобальные опции, которые задают основные параметры программы, например, от какого пользователя она будет запущена и количество процессов. Дальше есть секция events , в которой описано как Nginx будет реагировать на входящие подключения, затем идет секция http , которая объединяет все настройки касаемо работы протокола http. В ней находится секция server , каждая такая секция отвечает за отдельный домен, в секции server размещаются секции location , каждая из которых отвечает за определенный URL запроса, обратите внимание, что не файл на сервере, как в Apache, а именно URL запроса.

    Основные глобальные настройки мы будем делать в файле /etc/nginx/nginx.conf. Дальше рассмотрим что именно будем менять и какие значения желательно установить. Начнем с глобальных опций:

    • user - пользователь, от имени которого будет запущен сервер, должен быть владельцем каталога с файлами сайта, и от имени его же нужно запускать php-fpm;
    • worker_processes - количество процессов Nginx, которые будут запущены, нужно установить ровно столько, сколько у вас есть ядер, например, у меня - 4;
    • worker_cpu_affinity - этот параметр позволяет закрепить каждый процесс за отдельным ядром процессора, установите значение auto, чтобы программа сама выбрала что и к чему крепить;
    • worker_rlimit_nofile - максимальное количество файлов, которые может открыть программа, на каждое соединение нужно как минимум два файла и каждый процесс будет иметь указанное вами количество соединений, поэтому формула такая: worker_processes * worker_connections* 2, параметр worker_connections разберем чуть ниже;
    • pcre_jit - включите этот параметр для ускорения обработки регулярных выражений с помощью JIT компиляции;

    В секции events стоит настроить два параметра:

    • worker_connections - количество соединений для одного процесса, должно быть достаточным для обработки входящих соединений. Сначала нам нужно знать сколько этих входящих соединений есть, для этого смотрим статистику по адресу ip_сервера/nginx_status. Как включить рассмотрим ниже. В строке Active Connections видим количество активных соединений с сервером, также нужно учесть что соединения с php-fpm тоже считаются. Дальше обратите внимание на поля accepted и handled, первое отображает обработанных подключений, второе - количество принятых. Из значения должны быть одинаковыми. Если отличаются значит соединений не хватает. Смотрите примеры, первый снимок проблема, второй - порядок. Для моей конфигурации оптимальной может быть цифра в 200 соединений (всего 800, учитывая 4 процесса):

    • multi_accept - позволяет программе принимать несколько соединений одновременно, тоже ускоряет работу, при большом количестве соединений;
    • accept_mutex - установите значение этого параметра в off, чтобы сразу все процессы получали уведомление про новые соединения;

    Также в секции events рекомендуется использовать директиву use epoll, так как этот самый эффективный метод обработки входящих соединений для Linux, но этот метод применяется по умолчанию, поэтому не вижу смысла добавлять его вручную. Рассмотрим еще несколько параметров из секции http:

    • sendfile - использовать метод отправки данных sendfile. Самый эффективный метод для Linux.
    • tcp_nodelay, tcp_nopush - отправляет заголовки и тело запроса одним пакетом, работает немного быстрее;
    • keepalive_timeout - таймаут поддержания соединения с клиентом, если у вас нет очень медленных скриптов, то будет достаточно будет 10 секунд, устанавливаем значение сколько нужно чтобы пользователь мог быть подключен к серверу;
    • reset_timedout_connection - разрывать соединения после таймаута.
    • open_file_cache - кэшировать информацию об открытых файлах. Например, open_file_cache max=200000 inactive=120s; max - максимальное количество файлов в кэше, время кэширования.
    • open_file_cache_valid - когда нужно проверить актуальность файлов. Например: open_file_cache_valid 120s;
    • open_file_cache_min_uses - кэшировать только файлы, которые были открыты указанное количество раз;
    • open_file_cache_errors - запоминать ошибки открытия файлов.
    • if_modified_since - устанавливает каким образом будут обрабатываться заголовки if-modified-since. С помощью этого заголовка браузер может получить ответ 304 если страница не изменилась с момента последнего просмотра. Возможны варианты - не отправлять - off, отправлять при точном совпадении времени - exact, отправлять если время совпадает точно или больше - before;

    Вот как-то так будет выглядеть настройка nginx conf:

    user nginx;
    worker_processes 4;
    worker_cpu_affinity auto;
    worker_rlimit_nofile 10000;
    pcre_jit on;

    error_log /var/log/nginx/error.log warn;
    load_module "modules/ngx_pagespeed.so";

    events {
    multi_accept on;
    accept_mutex off;
    worker_connections 1024;
    }

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 120s;
    open_file_cache_errors on;

    reset_timedout_connection on;
    client_body_timeout 10;
    keepalive_timeout 65;

    include /etc/nginx/sites-enabled.*.conf

    3. Настройка http2

    Я не буду подробно описывать настройку секции server, потому что делал это уже в статье установка Nginx в Ubuntu и здесь мне нечего добавить, настройка SSL это достаточно обширная тема и тоже будет рассмотрена в отдельной статье. Но чтобы настроить http2 вам нужно иметь уже SSL. Далее, просто подправьте директиву listen в вашей секции server:

    listen 194.67.215.125:443 default_server;

    listen 194.67.215.125:443 http2 default_server;

    Вот таким простым способом можно включить http2 если перед этим была установлена правильная версия Nginx.

    4. Настройка PageSpeed

    Google Pagespeed - это модуль Nginx, который выполняет различные оптимизации для того, чтобы страницы грузились быстрее, веб-сервер работал эффективнее, а пользователи не чувствовали дискомфорта. Сюда входит кэширование, оптимизация html кода, оптимизация картинок, объединение javascript и css кода и многое другое. Все это выполняется на уровне Nginx, поэтому эффективнее, чем если бы вы это делали в php. Но тут есть один недостаток, модуль удаляет заголовок Last Modified.

    Дело в том, что PageSpeed устанавливает очень долгий строк кэширования для всех файлов, а в имя файла добавляет его хэш. Так скорость загрузки ресурсов выходит намного выше, поскольку браузер будет запрашивать файлы только с новым хэшем, а LastModified удаляется чтобы пользователи смогли увидеть изменения в случае если какой-либо файл будет изменен. А теперь рассмотрим как установить модуль. Нам придется собрать его из исходных кодов.

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

    yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel

    Скачайте и распакуйте исходники Nginx для вашей версии, например, 1.13.3:

    wget -c https://nginx.org/download/nginx-1.13.3.tar.gz
    # tar -xzvf nginx-1.13.3.tar.gz

    Настройка сервера nginx не включает пере сборку и замену программы из репозитория, мы просто используем эти исходники для сборки модуля. Скачайте и распакуйте исходники PageSpeed:

    wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
    # unzip v1.12.34.2-stable.zip

    Скачайте и распакуйте библиотеку оптимизации PageSpeed в папку с исходниками модуля:

    cd ngx_pagespeed-1.12.34.2-stable/
    # wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
    # tar -xvzf 1.12.34.2-x64.tar.gz

    Скачайте и распакуйте исходники OpenSSL 1.02:

    wget -c https://www.openssl.org/source/openssl-1.0.2k.tar.gz -O /opt/lib/$OPENSSL.tar.gz
    # tar xvpzf openssl-1.0.2k.tar.gz

    Теперь нам нужно собрать модуль. Сначала смотрим опции, с которыми собран текущий Nginx:

    А теперь переходим в папку с Nginx, подставляем все полученные опции, опцию --add-dynamic-module для PageSpeed, OpenSSL и пробуем собрать:

    cd nginx-1.13.3
    # ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic" --with-ld-opt= --with-openssl=$HOME/openssl-1.0.2k --add-dynamic-module=$HOME/ngx_pagespeed-1.12.34.2-stable ${PS_NGX_EXTRA_FLAGS}
    # make

    Если все было сделано правильно, то на выходе вы получите модуль ngx_pagespeed.so в папке obj, его нужно скопировать в папку /etc/nginx/modules:

    cp ngx_pagespeed.so /etc/nginx/modules/ngx_pagespeed.so

    Создаем папку для кэша:

    mkdir -p /var/ngx_pagespeed_cache
    # chown -R nginx:nginx /var/ngx_pagespeed_cache

    Теперь добавьте такую строчку для включения модуля в /etc/nginx/nginx.conf:

    load_module "modules/ngx_pagespeed.so";

    Nginx является одним из самых популярных веб-серверов в мире, его используют для хостинга самых больших и нагруженных сайтов в Интернете. Nginx в подавляющем большинстве случаев менее требователен к ресурсам, чем Apache; его можно использовать как в качестве веб-сервера, так и в качестве обратного прокси-сервера (reverse proxy).

    В этой статье мы рассмотрим процесс установки Nginx на ваш сервер с Ubuntu 16.04.

    Перед установкой

    Перед тем, как начать следовать описанным в этой статье шагам, убедитесь, что у вас есть обычный не-рутовый (non-root) пользователь с привилегиями sudo . Узнать, как настроить такого пользователя на вашем сервере, можно из .

    После того, как вы создали такого пользователя, зайдите на сервер используя его логин и пароль. Теперь вы готовы следовать шагам, описанным в этой статье.

    Шаг 1: Установка веб-сервера Nginx

    Nginx доступен в стандартных репозиториях Ubuntu, поэтому его установка достаточно проста.

    Поскольку мы собираемся использовать apt в первый раз в ходе этой сессии, начнём с обновления локального списка пакетов. Далее установим сервер:

    • sudo apt-get update
    • sudo apt-get install nginx

    В результате выполнения этих команд apt-get установит Nginx и другие необходимые для его работы пакеты на ваш сервер.

    Шаг 2: Настройка файрвола

    Перед тем, как начать проверять работу Nginx, нам необходимо настроить наш файрвол для разрешения доступа к сервису. При установки Nginx регистрируется в сервисе файрвола ufw . Поэтому настройка доступа осуществляется достаточно просто.

    Для вывода настроек доступа для приложений, зарегистрированных в ufw , введём команду:

    • sudo ufw app list

    В результате выполнения этой команды будет выведен список профилей приложений:

    Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

    Как видно из этого вывода, для Nginx настроено три профиля:

    • Nginx Full : этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL).
    • Nginx HTTP : этот профиль открывает только порт 80 (обычный, не шифрованный веб-трафик).
    • Nginx HTTPS : этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL).

    Рекомендуется настраивать ufw таким образом, чтобы разрешать только тот трафик, который вы хотите разрешить в явном виде. Поскольку мы ещё не настроили SSL для нашего сервера, в этой статье мы разрешим трафик только для порта 80.

    Сделать это можно следующей командой:

    • sudo ufw allow "Nginx HTTP"

    Вы можете проверить изменения введя команду:

    • sudo ufw status

    В результате должен отобразиться вывод следующего вида:

    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

    Шаг 3: Проверка работы веб-сервера

    После завершения процесса установки Ubuntu 16.04 запустит Nginx автоматически. Таким образом веб-сервер уже должен быть запущен.

    Мы можем убедиться в этом выполнив следующую команду:

    • systemctl status nginx
    ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2016-04-18 16:14:00 EDT; 4min 2s ago Main PID: 12857 (nginx) CGroup: /system.slice/nginx.service ├─12857 nginx: master process /usr/sbin/nginx -g daemon on; master_process on └─12858 nginx: worker process

    Как видно из вывода выше, сервис запущен и работает. Тем не менее, убедимся в его полной работоспособности путём запроса веб-страницы.

    Для этого мы можем проверить, отображается ли веб-страница Nginx, доступная по умолчанию при вводе доменного имени или IP адреса сервера.

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

    • ip addr show eth0 | grep inet | awk "{ print $2; }" | sed "s/\/.*$//"

    В результате будет выведено несколько IP адресов. Попробуйте вставить каждый из них в браузер.

    Другим способом определить свой IP адрес будет проверка, как ваш сервер виден из Интернета:

    • sudo apt-get install curl
    • curl -4 icanhazip.com

    Наберите полученный IP адрес или доменное имя в вашем веб-браузере. Вы должны увидеть страницу Nginx по умолчанию.

    Http://доменное_имя_или_IP_адрес

    Если вы видите подобную страницу в своём браузере, вы успешно установили Nginx.

    Шаг 4: Управление процессом Nginx

    Теперь, когда Nginx установлен и мы убедились в его работоспособности, ознакомимся с некоторыми базовыми командам для управления нашим веб-сервером.

    Для остановки веб-сервера используйте команду:

    • sudo systemctl stop nginx

    Для запуска остановленного веб-сервера наберите:

    • sudo systemctl start nginx

    Для перезапуска веб-сервера можно использовать следующую команду:

    • sudo systemctl restart nginx

    Если вы вносите изменения в конфигурацию Nginx, часто можно перезапустить его без закрытия соединений. Для этого можно использовать следующую команду:

    • sudo systemctl reload nginx

    По умолчанию Nginx настроен на автоматический запуск при запуске сервера. Если такое поведение веб-сервера вам не нужно, вы можете отключить его следующей командой:

    • sudo systemctl disable nginx

    Для повторного включения запуска Nginx при старте сервера введите:

    • sudo systemctl enable nginx

    Шаг 5: Важные файлы и директории Nginx

    Теперь, когда мы знаем основные команды для управления веб-сервером, ознакомимся с основными директориями и файлами.

    Контент

    • /var/www/html: веб-контент, который по умолчанию состоит только из тестовой страницы Nginx, которую мы видели ранее, находится в директории /var/www/html . Путь к этой директории можно настроить в файлах конфигурации Nginx.

    Конфигурация сервера

    • /etc/nginx: директория конфигурации Nginx. Все файлы конфигурации Nginx находятся в этой директории.
    • /etc/nginx/nginx.conf: основной файл конфигурации Nginx. Этот файл используется для внесения изменений в глобальную конфигурацию Nginx.
    • /etc/nginx/sites-available: директория, в которой хранятся "серверные блоки" для каждого сайта (серверные блоки являются приблизительным аналогом виртуальных хостов в Apache). Nginx не будет использовать конфигурационные файлы в этой директории, если они не имеют соответствующих ссылок в директории sites-enabled (см. ниже). Обычно все настройки серверного блока осуществляются в этой директории, а затем сайт активируется путём создания ссылки в другой директории.
    • /etc/nginx/sites-enabled/ : в этой директории хранятся серверные блоки для активированных сайтов. Обычно это достигается путём создания ссылок на конфигурационные профили сайтов, расположенные в директории sites-available .
    • /etc/nginx/snippets: в этой директории хранятся фрагменты конфигурации, которые можно использовать при конфигурации любых сайтов. Фрагменты конфигурации, которые потенциально могут быть использованы в нескольких файлах конфигурации, являются прекрасными кандидатами для создания этих сниппетов.

    Логи сервера

    • /var/log/nginx/access.log: каждый запрос к вашему веб-серверу записывается в этот файл лога, если иное не задано настройками Nginx.
    • /var/log/nginx/error.log: любые ошибки Nginx будут записываться в этот файл.

    Заключение

    Теперь, когда у вас есть установленный и настроенный веб-сервер, вы можете выбирать, какой контент отдавать пользователям, и какие другие технологии вы можете использовать в дополнение к веб-серверу.

    Лучшие статьи по теме