Инсталиране на nginx на ubuntu. Създаване на прост прокси сървър

Уеб сървърът 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 инсталирайте 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 инсталирайте nginx

Ще бъде инсталиран най-новият Nginx версия 1.13.2, s пълна подкрепа ALPN. След това да преминем към настройката.

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

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

глобални опции
събития()
http(
сървър (
местоположение ()
}
сървър()
}

Първо има глобални опции, които задават основните параметри на програмата, например от кой потребител ще бъде стартирана и броя на процесите. Следва раздел събития, който описва как Nginx ще реагира на входящи връзки, последван от раздела http, който комбинира всички настройки по отношение на работата http протокол. Съдържа раздел сървър, всеки такъв раздел отговаря за отделен домейн; сървърният раздел съдържа секции местоположение, всеки от които отговаря за конкретен URL адресзаявка, моля, имайте предвид, че това не е файл на сървъра, както в Apache, а URL адрес на заявка.

Ще направим основните глобални настройки във файла /etc/nginx/nginx.conf. След това нека да разгледаме какво точно ще променим и какви стойности е препоръчително да зададем. Нека започнем с глобалните опции:

  • потребител- потребителят, от чието име ще се стартира сървърът, трябва да е собственик на директорията с файловете на сайта и php-fpm трябва да се стартира от негово име;
  • работни_процеси- броят на Nginx процесите, които ще бъдат стартирани, трябва да бъде зададен точно толкова, колкото ядра имате, например аз имам 4;
  • worker_cpu_affinity- този параметър ви позволява да присвоите всеки процес на отделно ядро ​​на процесора, така че програмата сама да избере към какво да се прикачи;
  • worker_rlimit_nofile - максимална сумафайлове, които програмата може да отвори, всяка връзка се нуждае от поне два файла и всеки процес ще има посочения от вас брой връзки, така че формулата е: работни_процеси * работни_връзки * 2, параметър работни_връзкиНека го разгледаме по-долу;
  • pcre_jit- активирайте тази опция, за да ускорите обработката регулярни изразиизползване на JIT компилация;

В раздела за събития трябва да конфигурирате два параметъра:

  • работни_връзки- броят на връзките за един процес трябва да е достатъчен за обработка на входящи връзки. Първо, трябва да знаем колко от тези входящи връзки има, за това разглеждаме статистиката на сървъра ip_address/nginx_status. Ще разгледаме как да го активирате по-долу. IN линия АктивнаВръзките виждаме броя на активните връзки към сървъра, трябва също да вземете предвид, че връзките с php-fpm също се броят. След това обърнете внимание на приетите и обработените полета, първото показва обработените връзки, второто - броя на приетите. Стойностите трябва да са еднакви. Ако се различават, това означава, че няма достатъчно връзки. Вижте примери, първата снимка е проблема, втората е реда. За моята конфигурация оптималната цифра може да бъде 200 връзки (общо 800, като се вземат предвид 4 процеса):

  • мулти_приемане- позволява на програмата да приема няколко връзки едновременно, също така ускорява работата с голям брой връзки;
  • accept_mutex- задайте стойността на този параметър на изключено, така че всички процеси незабавно да получават известие за нови връзки;

Препоръчително е също да използвате директивата use epoll в раздела за събития, тъй като това е най-много ефективен методобработка на входящи връзки за Linux, но този метод се използва по подразбиране, така че не виждам смисъл да го добавям ръчно. Нека да разгледаме още няколко параметъра от секцията http:

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

Ето как ще изглежда настройката на nginx conf:

потребител nginx;
работни_процеси 4;
worker_cpu_affinity auto;
worker_rlimit_nofile 10000;
pcre_jit включен;

error_log /var/log/nginx/error.log предупреждение;
load_module "modules/ngx_pagespeed.so";

събития (
мулти_приемане на;
accept_mutex изключен;
worker_connections 1024;
}

изпращане на файл;
tcp_nopush включен;
tcp_nodelay включен;

open_file_cache max=200000 неактивен=20s;
open_file_cache_valid 120s;
open_file_cache_errors на;

reset_timeout_connection включено;
client_body_timeout 10;
keepalive_timeout 65;

включват /etc/nginx/sites-enabled.*.conf

3. Настройване на http2

Няма да описвам подробно настройката на сървърния раздел, защото вече го направих в статията Инсталация на Nginxв Ubuntu и няма какво да добавя тук; настройката на SSL е доста обширна тема и също ще бъде обсъдена в отделна статия. Но за да конфигурирате http2, трябва вече да имате SSL. След това просто коригирайте директивата за слушане в секцията на вашия сървър:

слушане 194.67.215.125:443 default_server;

слушане 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 инсталирайте wget gcc cmake разархивирайте 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
# разархивирайте v1.12.34.2-stable.zip

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

cd ngx_pagespeed-1.12.34.2-стабилен/
# 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 --с-http_flv_module --с-http_gunzip_module --с-http_gzip_static_module --с-http_random_index_module --с-http_realip_module --с-http_secure_link_module --с-http_ssl_module --с-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)
# направи

Ако всичко е направено правилно, тогава на изхода ще получите модула 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, php-fpm, php-apc ви позволява да ускорите сайта, когато е конфигуриран правилно в сравнение с apache и да намалите натоварването на сървъра. Това е особено вярно при настройка на сайтове с голяма сумапосещения. Това е комбинация от компоненти в напоследъкстава все по-популярен, но настройването му е доста лесно и бързо. Нека да разгледаме пример за конфигурация на Debian. Нека конфигурираме nginx с кеш + php-fpm + php-apc.

Първо, нека си припомним какви са тези компоненти. Nginx е бърз и гъвкав уеб сървър, който също позволява кеширане. Php-fpm е PHP FastCGI Process Manager, мениджър FastCGI процесиза PHP. FastCGI е двоичен протокол клиент-сървър, който позволява заявките да се обработват многонишково, за разлика от еднонишковия CGI. А php-apc е алтернативен PHP кеш, безплатна рамка за кеширане на PHP байт код в паметта, която може значително да ускори Изпълнение на PHP, с многократно използване на кода, разбира се. Така ускорението трябва да е на няколко места. Първият е кеш паметта на nginx, вторият е по-бързо статично изобразяване с помощта на nginx в сравнение с apache, третият е PHP байткод кеширане, четвъртият е по-бързо изпълнение php кодизползване на php-fpm в сравнение с комбинацията apache + mod_php5.

Инсталиране на пакети

Инсталирайте пакети:

Apt-get инсталирате nginx php5-fpm php-apc php5-mysql

Всичко необходимо ще бъде инсталирано според зависимостите

Настройка на nginx

След като инсталирате пакетите, трябва да конфигурирате настройките за nginx. Създаваме файл с настройки на nginx за нашия сайт, нека го наречем „сайт“

Докоснете /etc/nginx/sites-available/site

Нека запишем следното във файла:

Сървър ( # Прослушване на порт 80 чрез IPv4 слушане 0.0.0.0:80; # Име на сайта ( Име на домейн) име на сървър сайт; # Индекс файл индекс index.php; # Основна директориякорен на сайта /var/www/site; # Отказ на достъп до файлове .htaccess и .htpasswd местоположение ~ /\.ht ( deny all; ) # Обслужване на местоположение на статични файлове ~ \.(jpg|jpeg|ico|gif|css)( # Деактивиране на записи за обслужване на статични файлове # Това ще помогне за намаляване на броя на записите на диск access_log off; max root /var/www/site; ) location ~ \.php ( include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php-fpm-site; fastcgi_index index.php; # Разрешаване на кеша на nginx, свързване на зоната my-cache proxy_cache; 1m; # Директория за временно съхранение proxy_temp_path /var/cache/nginx/tmp;

Ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled

Трябва да добавите кеша, който вече сме написали за използване към файла /etc/nginx/nginx.conf. В началото на секцията http поставете следния ред:

Proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:8m max_size=128m inactive=600m;

Този ред означава следното: директорията за съхраняване на кеша е /var/cache/nginx. нива — нива на кеширане 1:2, това са нивата на влагане на директории в директорията за съхранение на кеша. Параметърът keys_zone определя името и размера на кеш зоната (може да има няколко зони). Зона от 1 мегабайт може да съхранява 8000 ключа. Параметърът max_size определя максималния размер на кеша; когато кешът достигне този размер, старите файлове от кеша ще бъдат изтрити, за да се освободи място. Ако данните не бъдат поискани от кеша в рамките на времето, посочено в неактивния параметър (в нашия случай 600 минути), тогава те ще бъдат премахнати от кеша. Ако неактивният параметър не е зададен, времето по подразбиране е 10 минути.

Настройка на php-fpm

Настройките на php-fpm се намират в директорията /etc/php5/fpm. Тази директория съдържа поддиректория pool.d, която съхранява файлове за работа със сайтове. Трябва да създадем файл за нашия уебсайт. Нека го наречем site.conf

Докоснете /etc/php5/fpm/pool.d/site.conf

В този файл записваме следното:

# Сокет файл за обмен на данни с nginx listen = /var/run/php-fpm-site.sock # Максимален брой връзки, налични в системата listen.backlog = -1 # Собственик на сокет и група на собственост listen.owner = www-data listen .group = www-data # Разрешения, зададени при създаване на сокет listen.mode = 660 user = www-data group = www-data # Броят на процесите ще се контролира динамично pm = dynamic pm.max_children = 30 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 50 env = сайт env = /usr/local/bin:/usr/bin:/bin env = /tmp env = /tmp env = /tmp

Сега можете да стартирате php-fpm с командата

Стартиране на услугата php5-fpm

И след това също стартирайте nginx

Стартиране на услугата nginx

Нека създадем директорията /var/www/site, ако вече не е създадена:

Mkdir -p /var/www/site

И в тази директория ще създадем файл /var/www/site/index.php със следното съдържание:

Сега нека отворим нашия сървър в браузъра, използвайки името на домейна. Например „http://сайт“. Трябва да се отвори страница с информация за сървъра. Всички модули, които се използват, също са изброени там. Модулът apc трябва да присъства в този списък и състоянието му трябва да е „Активирано“.

Настройка на php-apc

Конфигурационният файл на apc се намира в следния път: /etc/php/fpm/conf.d/20-apc.ini

По принцип този модул вече може да се използва с настройките по подразбиране, но ако искате да го конфигурирате по-фино, можете да видите описание на всички параметри.

Като цяло конфигурацията е готова, можете да разположите сайта и да конфигурирате всички тези компоненти по-подробно, в зависимост от това как е структуриран сайтът и какви статистики ще се натрупват по време на работата му.

Nginx е един от най-популярните уеб сървъри в света, използван за хостване на някои от най-големите и натоварени сайтове в Интернет. Nginx е изключително по-малко ресурсоемък от Apache; може да се използва както като уеб сървър, така и като обратен прокси.

В тази статия ще разгледаме процеса на инсталиране на Nginx на вашия Ubuntu 16.04 сървър.

Преди монтаж

Преди да започнете да следвате стъпките в тази статия, уверете се, че сте обикновен потребител без root със sudo привилегии. Можете да разберете как да настроите такъв потребител на вашия сървър от.

След като създадете такъв потребител, влезте в сървъра, като използвате неговото потребителско име и парола. Вече сте готови да следвате стъпките, описани в тази статия.

Стъпка 1: Инсталиране на Nginx уеб сървър

Nginx се предлага стандартно Хранилища на Ubuntu, така че инсталирането му е доста лесно.

Тъй като ще използваме apt за първи път в тази сесия, ще започнем с актуализиране на локалния списък с пакети. След това нека инсталираме сървъра:

  • sudo apt-getактуализация
  • sudo apt-get инсталирайте nginx

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

Стъпка 2: Настройване на защитна стена

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

За да покажете настройките за достъп за приложения, регистрирани в ufw, въведете командата:

  • sudo ufw списък с приложения

В резултат на изпълнение на тази команда ще се покаже списък с профили на приложения:

Налични приложения: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

Както можете да видите от този резултат, Nginx има три конфигурирани профила:

  • Пълен Nginx: Този профил отваря портове 80 (обикновен, некриптиран уеб трафик) и 443 (трафик, криптиран с помощта на TLS/SSL).
  • Nginx HTTP: Този профил отваря само порт 80 (обикновен, некриптиран уеб трафик).
  • Nginx HTTPS: Този профил отваря само порт 443 (трафикът е криптиран чрез TLS/SSL).

Препоръчително е да конфигурирате ufw да разрешава само трафик, който изрично искате да разрешите. Тъй като все още не сме конфигурирали SSL за нашия сървър, в тази статия ще разрешим трафик само на порт 80.

Това може да се направи следваща команда:

  • sudo ufw позволява "Nginx HTTP"

Можете да проверите промените, като въведете командата:

  • състояние sudo ufw

Резултатът трябва да бъде подобен на следния:

Състояние: активно До действие от -- ------ ---- OpenSSH РАЗРЕШАВА навсякъде Nginx HTTP РАЗРЕШАВА навсякъде OpenSSH (v6) РАЗРЕШАВА навсякъде (v6) Nginx HTTP (v6) РАЗРЕШАВА навсякъде (v6)

Стъпка 3: Проверка на уеб сървъра

След приключване на процеса Инсталации на Ubuntu 16.04 ще стартира автоматично Nginx. Следователно уеб сървърът вече трябва да работи.

Можем да проверим това, като изпълним следната команда:

  • systemctl състояние nginx
● nginx.service – Уеб сървър с висока производителност и обратен прокси сървър Зареден: зареден (/lib/systemd/system/nginx.service; активиран; предварително зададен от доставчика: активиран) Активен: активен (работи) от понеделник 2016-04-18 16:14:00 EDT; Преди 4 минути 2 секунди Основен PID: 12857 (nginx) CGroup: /system.slice/nginx.service ├─12857 nginx: главен процес /usr/sbin/nginx -g демон на; master_process на └─12858 nginx: работен процес

Както можете да видите от резултата по-горе, услугата е готова и работи. Нека обаче се уверим, че работи напълно, като поискаме уеб страница.

За да направим това, можем да проверим дали се показва уеб страницата на Nginx, достъпна по подразбиране при въвеждане на името на домейна или IP адреса на сървъра.

Ако не искате да конфигурирате име на домейн за вашия сървър, можете да използвате публичния IP адрес на вашия сървър. Ако не знаете публичния IP адрес на сървъра, можете да намерите този IP адрес със следната команда:

  • ip адрес показване на 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 стоп nginx

За да стартирате спрян уеб сървър, въведете:

  • sudo systemctl стартира nginx

Можете да използвате следната команда, за да рестартирате уеб сървъра:

  • sudo systemctl рестартирайте nginx

Ако направите промени в конфигурацията на Nginx, често можете да го рестартирате, без да затваряте връзките. За да направите това, можете да използвате следната команда:

  • sudo systemctl презареди nginx

По подразбиране Nginx е конфигуриран да стартира автоматично при стартиране на сървъра. Ако не се нуждаете от това поведение на уеб сървъра, можете да го деактивирате със следната команда:

  • sudo systemctl деактивира nginx

За да активирате отново Nginx, когато сървърът стартира, въведете:

  • sudo systemctl активира 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 няма да използва конфигурационни файлове в тази директория, освен ако нямат съответните връзки в директорията с активирани сайтове (вижте по-долу). Обикновено всички настройки за блокиране на сървъра се правят в тази директория и след това сайтът се активира чрез създаване на връзка в друга директория.
  • /etc/nginx/sites-enabled/ : Тази директория съхранява сървърни блокове за разрешени сайтове. Това обикновено се постига чрез създаване на връзки към профили за конфигурация на сайтове, разположени в директорията за достъпни сайтове.
  • /etc/nginx/snippets: Тази директория съхранява конфигурационни фрагменти, които могат да се използват за конфигуриране на всякакви сайтове. Конфигурационните фрагменти, които потенциално биха могли да се използват в множество конфигурационни файлове, са отлични кандидати за създаване на тези фрагменти.

Сървърни регистрационни файлове

  • /var/log/nginx/access.log: Всяка заявка към вашия уеб сървър се записва в този лог файл, освен ако не е указано друго от настройките на Nginx.
  • /var/log/nginx/error.log: Всички грешки на Nginx ще бъдат регистрирани в този файл.

Заключение

Сега, след като имате инсталиран и конфигуриран уеб сървър, можете да изберете какво съдържание да предоставяте на потребителите и какви други технологии можете да използвате в допълнение към уеб сървъра.

Класическата комбинация за стартиране на уебсайтове, написани на PHP, е apache + mod_php. Тъй като mod_php изисква prefork_mpm по подразбиране, apache създава отделен процес за обработка на всяка отделна връзка, което не е много икономично по отношение на консумацията на RAM.

Тогава той се появи nginx- лек прокси уеб сървър и започнаха да го инсталират пред apache, за да издава статични данни и да не занимава apache с дреболии. Следващия логична стъпкае да изключим посредника в лицето на apache от веригата nginx - apache - php, което ще направим.

php-fpmви позволява да демонизирате php, за да избегнете разходите за стартиране на процеси (от които CGI страда), което FastCGI също може да направи. Но php-fpm предоставя и други полезни функции:

  • стартиране на пулове манипулатори от името на определени потребители,
  • динамичен контрол на броя работещи манипулатори,
  • възможност за рестартиране на манипулатори, ако нещо не е наред с тях,
  • регистриране на бавни заявки, подобни на mysql,
  • страници за състояние и пинг,
  • друго.

Инсталирането на php-fpm на Debian е изключително просто:

Aptitude инсталира php5-fpm

След което можете да редактирате два конфигурационни файла, които са доста добре документирани сами по себе си, но голям бройдумите също могат да затруднят намирането на същността зад тях. Първият (/etc/php5/fpm/php-fpm.conf) ви позволява да зададете общи настройки:

включват- от коя директория да включите допълнителни конфигурации,
pid- път до файла с идентификатора на процеса,
error_log- път към регистъра на грешките,
syslog.facility- позволява ви да посочите в кой дневник да пишете,
syslog.ident- с какво име да маркирате записи в системния дневник,
лог_ниво- ниво на регистриране от предупреждение до отстраняване на грешки,

По принцип горните параметри могат да бъдат оставени по подразбиране, ако не се изисква отстраняване на грешки, например. Още по-интересни параметри:

аварийно_рестартиране_праг- позволява ви да посочите при какъв брой отклонения на процеса със сигнали SIGSEGV или SIGBUS в рамките на определен период от време е необходимо да рестартирате меко php-fpm,
авариен_интервал_рестартиране- определен период от време.
изчакване_на_контрола на процеса- колко време потомците трябва да чакат господарят да отговори на сигналите,
процес.макс- максимален брой процеси за всички пулове,
процес.приоритет- можете да посочите приоритета на главния процес,
демонизирам- да се демонизира или не. Може да е полезно за отстраняване на грешки,
rlimit_files- броя на файловите дескриптори, достъпни за главния процес,
rlimit_core- не разбра
събития.механизъм- в linux определено epoll,
systemd_интервал- ако вашата операционна система използва systemd, тогава можете да зададете честотата на отчетите за състоянието на процесите. Ще бъде от значение в Debian 8.

Втората конфигурация е основна за конфигуриране на пулове и се намира в /etc/php5/fpm/pool.d/www.conf. В този файл можете да зададете още повече параметри и всички те са добре документирани в него. Ще изтрием или преименуваме този файл и ще създадем наш собствен конфигурационен файл.

Интересното е, че в конфигурацията на пула можете да използвате името на пула като променлива $пул. Благодарение на това можете да създадете единен конфигурационен файл и да го използвате като основа за нови пулове. Името на басейна е зададено квадратни скобии предшества блок от параметри. Всъщност всички пулове могат да бъдат описани в един файл, но изглежда това не трябва да се прави. Примерен конфигурационен файл:


префикс = /var/www/$pool

потребител = $pool
група = $pool

слушай = /var/run/phpfpm-$pool.sock
listen.owner = $пул
listen.group = www-данни
listen.mode = 0660

pm = динамичен
pm.max_children = 16
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4

pm.status_path = /fpmstat

request_slowlog_timeout = 3s
slowlog = /var/www/logs/$pool.slow.log

Ако е необходимо:

access.log = /var/www/logs/$pool.access.log

Нека да разгледаме параметрите:

префикс- позволява ви да зададете пътя по подразбиране, който може да се използва в параметрите slowlog, listen, chroot, chdir, php_values, php_admin_values.
потребителИ група- определя собственика и групата процеси, които да бъдат стартирани.
слушам- показва на кой сокет да слушате. Поддържат се както UNIX, така и TCP сокети. Ако уеб сървърът и PHP манипулаторите са на един и същи сървър, тогава е по-добре да използвате UNIX сокети, тъй като това е потенциално по-бързо, тъй като няма допълнителни разходи, свързани с генерирането на пакети.
listen.owner, listen.group, listen.mode- позволяват ви да зададете параметри за достъп до сокет. Името, което съответства на името на пула, се посочва като собственик. Трябва да създадете подходящия потребител и да се уверите, че няма ssh достъп за него, разбира се, освен ако нямате виртуален хостинг. Групата е указана като www-data, тъй като под нея работи nginx и е необходимо да му се осигури достъп до сокет файла. Правата 660 ви позволяват да блокирате достъпа на други.
следобед- определя как мениджърът на процеси ще управлява броя на дъщерните процеси. Може да бъде статичен (постоянен брой процеси), динамичен (броят на процесите може да варира в рамките на определени граници) и при поискване (когато процес се стартира и унищожава след изчакване).
pm.max_children- максимален брой дъщерни процеси.
pm.start_servers- колко процеса се стартират при стартиране на php-fpm.
pm.min_spare_servers- минимален брой изчакващи процеси. Ако има по-малко процеси от стойността на параметъра, ще бъдат създадени нови процеси.
pm.max_spare_servers- максимален брой чакащи процеси. Ако има повече чакащи процеси от стойността на параметъра, тогава ненужни процесище бъде убит.
pm.status_path- път към страницата със състоянието.
request_slowlog_timeout- време, след което заявката се счита за бавна.
slowlog- път до регистрационния файл на бавната заявка.
access.log- път до файла с регистъра за достъп.

Други интересни опции:

pm.max_requests- броя на обработените заявки, след които процесът трябва да се рестартира. Позволява ви да се борите с изтичането на памет.
процес.приоритет- задава приоритета на процесите в този пул.
chroot- позволява ви да прикачите процеси към посочената директория. Въпреки това, всички пътища, използвани от php, ще работят спрямо посочената директория, което изисква допълнителна конфигурация.
сигурност.лимит_разширения- позволява ви да посочите списък с файлови разширения за обработка от php-fpm.

Можете също така да замените променливите на средата, например:

и замени параметрите от php.ini почти както се прави в .htaccess:

php_флаг = изключено

Това означава, че можем да конфигурираме много php параметри поотделно за всеки пул.

Между другото, можете да използвате php, за да промените параметрите в директорията на сайта.

Внедряване

Материалът по-горе е поднесен някак хаотично. Нека се опитаме да разгледаме конкретен прост пример за изпълнение.

Предполагаме, че nginx и php-fpm вече са инсталирани.

Сега трябва да конфигурирате виртуален хост в nginx, така че заявките към статични файлове да се обработват от самия nginx, а заявките към php скриптове да се прехвърлят към php-fpm за обработка. Пример:

сървър (
слушам 80;
сървър_име webpanels.spb.ru;

корен /var/www/webpanels;
индекс index.php;

местоположение ~ \.php$ (
try_files $uri =404;

fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

включват fastcgi_params;
}

местоположение ~ ^/(fpmstat|ping)$ (
access_log off;
позволи 127.0.0.1;
позволи 123.123.123.123; #вашият-ip
отрече всички;
включват fastcgi_params;
fastcgi_param SCRIPT_FILENAME /fpmstat;
fastcgi_pass unix:/var/run/phpfpm-webpanels.sock;
}

местоположение ~* ^.+.(html|jpg|jpeg|gif|css|png|js|ico|txt)$ (
изтича 60d;
}
}

Това показва къде да пренасочите заявките. В нашия случай се използва unix сокет. Ние също така посочваме индексен файли пътя до файла. Както можете да видите, всичко е съвсем просто. Този примерможе да се използва като формула.

Сега нека конфигурираме php-fpm. В Debian общите настройки са във файла /etc/php5/fpm/php-fpm.conf:

pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
process.max = 64
process.priority = -5
rlimit_files = 1024
събития.механизъм = epoll
include=/etc/php5/fpm/pool.d/*.conf

Ясно е, че тези настройки са минимални и много са оставени по подразбиране. Но работи и вероятно ще се справи с хиляда посещения на ден без никакви проблеми.

По-горе беше даден пример за създаване на пул. Струва си да припомним, че всеки пул се стартира от отделен потребител, който може да бъде създаден с команда като:

Useradd -m -d /var/www/webpanels -s /usr/sbin/nologin -c "webpanels сайт" -U уебпанели

Освен това те казват, че за нормална операцияСледните параметри трябва да бъдат зададени във файла /etc/php5/fpm/php.ini:

cgi.fix_pathinfo = 0

Също така, поради изоставянето на Apache, може да се наложи да преобразувате правилата mod_rewrite в правила, разбираеми за nginx. Това може да стане например с помощта на конвертори, достъпни на:

На този моментДвата уеб сървъра, които спечелиха най-голяма популярност. Това са Apache и Ngnix. Всеки от тях има своите плюсове и минуси. Apache е разработен през 1995 г. и неговата разработка не е взела предвид всички възможни потребителски нужди; консумира много памет и системни ресурси, но е лесна за конфигуриране. Nginx е разработен малко по-късно през 2002 г., като се вземат предвид грешките на Apache и се фокусира върху максимална производителност.

Няма да навлизаме в подробности за предимствата и недостатъците на двата уеб сървъра. Всеки от тях има своя област на приложение. Това ръководство ще обхване инсталирането на Nginx Ubuntu 16.04. Въпреки че ще говоря за Ubuntu 16.04, всички стъпки ще работят и за други дистрибуции. Настройката на Nginx е еднаква навсякъде, само командата за инсталиране е различна.

Първата стъпка е да инсталирате самия уеб сървър в системата. Програмата е в официални хранилища, но версията му вече е малко остаряла, така че ако искате най-много нова версия, трябва да добавите PPA:

sudo apt-add-repository ppa:nginx/stable

В момента версия 1.10.0 е налична в официалните хранилища, а 1.10.1 вече е налична в стабилния PPA. Ако не се нуждаете от версията, можете да направите без PPA. След това актуализирайте списъците с пакети от хранилищата:

И инсталирайте ngnix:

sudo apt инсталирайте nginx

След монтажа Nginx сървърще бъде завършен, добавете програмата към стартиране, така че да стартира автоматично:

sudo systemctl активира nginx

Ако отворите браузъра си сега, ще видите, че nginx работи, но все още трябва да го конфигурираме.

Настройка на Nginx Ubuntu

Настройването на Nginx Ubuntu е много по-сложно от Apache. Тук няма да разглеждаме всички опции и възможности на програмата, а ще говорим само за основните. Има различни конфигурации, в които Nginx се използва като прокси сървър, а основният сървър е Apache, но това няма да ни интересува. Трябва да инсталираме Nginx като самостоятелен уеб сървър.

Настройките на Nginx са много различни - има само един основен конфигурационен файл и файлове за виртуални хостове. Конфигуриране от всяка директория, както в Apache, не се поддържа.

  • /etc/nginx/nginx.conf- основен конфигурационен файл
  • /etc/nginx/sites-available/*- конфигурационни файлове за виртуални хостове, с други думи, за всеки сайт.
  • /etc/nginx/sites-enabled/*- конфигурационни файлове на активирани сайтове.

Всъщност конфигурационните файлове за виртуални хостове се четат само от директорията с активирани сайтове, но това съдържа връзки към достъпни сайтове. Тази система е изобретена, за да направи възможно временно деактивиране на определени сайтове, без да изтрива конфигурацията им. Всички останали файлове съдържат само декларации на променливи и стандартни настройки, които не се нуждаят от промяна. Що се отнася до nginx.conf, всички файлове от sites-enables са включени в него и следователно могат да съдържат абсолютно същите инструкции. Сега нека да разгледаме основния конфигурационен файл:

sudo vi /etc/nginx/nginx.conf

Както можете да видите, файлът е разделен на секции. Общата структура е:

глобални опции
събития()
http(
сървър (
местоположение ()
}
сървър()
}
поща()

  • глобални опцииса отговорни за работата на цялата програма.
  • събития- този раздел съдържа настройки за работа с мрежата.
  • http- съдържа настройки на уеб сървъра. Трябва да съдържа раздел за сървър за фина настройка на всеки сайт.
  • сървър- този раздел съдържа настройките за всеки сайт, хостван на уеб сървъра.
  • местоположение- секцията за местоположение може да се намира само в секцията на сървъра и съдържа настройки само за конкретна заявка.
  • поща- съдържа настройки за прокси сървър за електронна поща.

Преди да преминем към опциите, трябва да кажем още няколко думи за синтаксиса на редовете в конфигурационния файл. Изглежда така:

стойност на параметъра допълнителна_стойност...;

Редът трябва да завършва с ";" и всички отворени скоби ( трябва да бъдат затворени.

Сега, след като сте проучили малко глобалната структура, можете да преминете към разглеждане на самите параметри. Няма много глобални опции:

  • потребител- потребителят, от чието име ще се изпълнява програмата.
  • работни_процеси- задава колко процеси трябва да бъдат стартирани, за да паралелизирате работата на програмата, не трябва да стартирате повече процеси, отколкото имате ядра; Можете да зададете параметъра Автоматичени след това програмата сама ще определи това число.
  • pid= програмен pid файл.
  • worker_rlimit_nofile- показва максималния брой файлове, които програмата може да отвори. Изчислява се като worker_processes * worker_connections* 2.

СЪС глобални опцииприключиха, не бяха толкова много и не са толкова интересни. Много по-интересни откъм оптимизация са опциите от секцията събития:

  • работни_връзки- броя на връзките, които програмата може да обработва едновременно на един процес. Ако умножим worker_process по този параметър, получаваме максималния брой потребители, които могат да се свържат към сървъра едновременно. Препоръчително е да зададете стойност от 1024 до 4048.
  • мулти_приемане- позволява приемането на много връзки едновременно, настройте параметъра на включване или изключване.
  • използване- начин на работа с мрежов стек. По подразбиране е анкета, но на Linux е по-ефективно да използвате epoll.
  • изпрати файл- използвайте метода за изпращане на данни sendfile. Стойността е включена.
  • tcp_nodelay, tcp_nopush- изпращане на заглавки и начало на файла в един пакет. Стойността е включена.
  • keepalive_timeout- изчакване за изчакване преди затваряне на връзката за поддържане на активност, по подразбиране е 65, но може да бъде намалено до 10 секунди.
  • keepalive_requests- максимален брой поддържащи активност връзки от един клиент, препоръчва се 100.
  • reset_timeout_connection- прекъсване на връзките след изчакване. Стойността е включена.
  • отворен_файл_кеш- кеширане на информация за отворени файлове. Редът за настройка изглежда така: open_file_cache max=200000 inactive=20s; max - максимален брой файлове в кеша, време за кеширане.
  • отворен_файл_кеш_валиден- показва след колко време трябва да се изтрие информацията от кеша. Например: open_file_cache_valid 30s;
  • open_file_cache_min_uses- кеш информация за файлове, които са били отваряни поне определен брой пъти.
  • отворен_файл_кеш_грешки- кеш информация за липсващи файлове, стойност на.

Основните параметри са прегледани. Тези настройки ще ви помогнат да получите по-добра производителност от nginx. Ще разгледаме разделите за сървъра и местоположението при настройването на виртуални хостове.

Настройване на Gzip компресия

Компресирането на съдържанието е необходимо, за да се намали размерът на данните, изтеглени от браузъра. Това ускорява зареждането на сайта, но допълнително натоварва сървърния процесор. За да активирате компресията в секцията http, трябва да добавите следния параметър:

Тази директива може да се използва и в раздела на сървъра, тогава ще работи само за посочения виртуален домейн. След това конфигурираме параметрите за компресия, като използваме следните опции:

  • gzip_min_length - минимална дължинастраници в байтове, за които трябва да се използва компресия, например 1000 (1 kb)
  • gzip_proxied- дали е необходимо да се компресират прокси заявки, всеки казва, че всичко трябва да се компресира.
  • gzip_типове- видове файлове, които трябва да бъдат компресирани, например: текст/обикновено приложение/xml приложение/x-javascript текст/javascript текст/css текст/json;
  • gzip_disable "msie6"- компресията не се поддържа в IE 6, затова я деактивираме.
  • gzip_comp_level- ниво на компресия, налични опции от 1 до 10. 1 - минимална, 10 - максимална компресия.

Настройка на виртуални хостове

Както знаете, един сървър може да хоства множество уебсайтове. Всички заявки идват към IP адреса на сървъра и nginx вече определя, въз основа на домейна, какво съдържание трябва да бъде обслужено. За да може nginx да знае към кой домейн принадлежи, трябва да конфигурирате виртуални хостове. Всеки хост обикновено се поставя в отделен файл. Конфигурацията на хоста се намира в секцията на сървъра, но тъй като всички файлове от активирани сайтове се импортират в секцията http, логиката на структурата на конфигурационния файл не е нарушена.

Нека да разгледаме примерна настройка:

vi /etc/nginx/sites-enabled/site.conf

  • слушай 80- указва, че връзката трябва да се слуша на порт 80, може също да съдържа опция сървър по подразбиране, което означава, че този домейн ще бъде отворен, ако домейнът не е посочен в заявката.
  • корен /var/www/html- директорията, в която се намират файловете на сайта.
  • индекс index.html- страницата, която ще се отвори по подразбиране.
  • Име на сървъра- домейн име на сайта.
  • access_log- файл за запис на дневник на заявки към сървъра, може да се използва както глобално в секцията http, така и за определен типфайлове в местоположение.
  • error_log- регистър на грешките на уеб сървъра, може да получи допълнителен параметър, указващ подробностите за дневника. warn - максимум, crit - само критични грешки.

Това са всички основни настройки виртуален хост, след тях вече ще работи. Но има и раздел за местоположение, който ви позволява да конфигурирате поведението на сървъра за определени директории и файлове. Синтаксисът на местоположението е:

адрес на местоположение ()

Като адрес може да се използва както директна заявка относно корена на сървъра, така и регулярни изрази. За да използвате регулярни изрази, той се предхожда от знак "~". Нека да разгледаме примерите по-долу, но засега нека разгледаме възможните директиви:

  • позволява- разрешаване на достъп до местоположението за потребители, всички - всички, можете също да посочите ip или подмрежа.
  • отричам- отказ на достъп до местоположението, всички - за всички.
  • пробни файлове- опитва се да отваря файлове в определен ред, отваря първия намерен файл. Например тази конструкция: $uri $uri/index.html $uri.html =404; първо се опитва да отвори $uri, след това index.html, ако $uri.html не бъде намерен и след това, ако не съществува нито един от препозиционните файлове, дава грешка 404.
  • изтича- задава времето за кеширане на браузъра за дадения елемент, например 1d - един ден, 2h - два часа, 30s - 30 секунди.

В допълнение към тези основни директиви тук могат да се използват и други. За повече подробности вижте официалната документация. Нека да разгледаме няколко примера:

Не влизай в фавикона:

местоположение = /favicon.ico (
log_not_found изключен;
access_log off;
}

Отказ на достъп до файлове, започващи с точка:

местоположение ~ /\. (
отрече всички;
}

Кеширайте обикновените файлове за 90 дни:

местоположение ~* ^.+\.(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 изключен; изтича 90d;