Как Nginx на HTTP сървър
Как HTTP сървър Nginx
За дълго време, Apache е най-популярният HTTP сървър с отворен код. Но тя може да бъде твърде тромави за някои padach. И тук на сцената има нови играчи - леки и асинхронни HTTP сървъри, един от които е Nginx.
Сега, когато имах две възможности, това е най-трудното нещо - да се избере най-подходящия за моя случай. Това е труден избор, защото и двете имат почти същите възможности (въпреки Nginx също може да се използва като поща прокси сървър, не съм го разгледа в сравнение). И двете се използват в много посещавани сайтове, например, YouTube използването Lighttpd г. и Rambler - Nginx. И двете имат доста добра документация, включително Nginx има документация на руски. В резултат на това за себе си, спрях в Nginx, поради следните причини:
Преди да се обърнат, за да помисли за директно Nginx сървъра, помислете за разликата между асинхронни (събитие) от подхода за паралелна обработка на съединенията, в отделни процеси или нишки.
В най-простия случай на паралелна обработка на съединения на основния процес е в очакване на входящи връзки, и след това изпраща на работа обработване на нова връзка с процеса на дете, или отделен поток. При този подход има следните предимства:
п Това е прост модел за сървърния софтуер и плъгини.
Всяко съединение п е независимо обработва, и по този начин е възможно обработка дълго данни се извършва в един процес (резба) не влияе на другите.
п Този подход не мащаб. Например, 1000, едновременно отворени свързвания могат да бъдат съвсем нормално на брой, но през 1000 едновременни процеси или нишки може да е проблем.
Asynchronous обработка в случай на един и същи процес с един конец, специална система за повикване изпрати отворени контакти и описания на файлове. Тази система повикване връща само гнездата и дръжките, готови да отворите връзка, чете или пише. Тъй като по-голямата част от времето, обикновено за изчакване на вход-изход и скоростта на процесора на паметта много пъти по-висока скорост вход-изход, можете да имате време за извършване на необходимата обработка на данните, докато системата ги чака нова партида. Предимствата на този подход:
п За много приложения, само един метод с единична нишка може да се справи повече връзки, отколкото в случай на паралелна обработка.
п Тъй като един процес с единична нишка може да се справи няколко връзки да се справят с повече от съединенията с помощта на по-малко ресурси.
п Програмиране асинхронни приложения може да бъде по-трудно, отколкото с паралелни приложения за обработка.
н В случай на използване само на един и същи процес с един конец може да бъде трудно да мащабирате, макар и по-добре, отколкото паралелна обработка на информацията.
н В най-простия случай не може да се използва асинхронен подход, ако се изисква по-дълго време за обработка.
Както можете да видите, и двата подхода имат своите предимства и недостатъци. За да се комбинират предимствата и минимизира недостатъците на двата подхода в момента са за асинхронни мрежови приложения на най-популярния подход хибрид, в които множество асинхронни приложения работят паралелно в отделни процеси или нишки. Сега нека видим как работи в Nginx.
Изграждане и монтаж
Докато Nginx вече се предлага в пакети за най-новите версии на Ubuntu Linux, реших да го изгради от източник, защото исках да се използва по-нова стабилна версия и mod_wsgi модул за подкрепа на Python WSGI протокол. Ако не трябва да се съберат с Nginx mod_wsgi, можете да пропуснете всички места, където се споменава.
Така че, ние трябва да се изгради на изходния код на Nginx можех, изходния код библиотека Perl Съвместими регулярни изрази (PCRE) и изходния код на mod_wsgi на модула. Ето, ние използваме най-късно, в момент, версия mod_wsgi и PCRE библиотеката. Ако използвате по-стари версии на PCRE версия не трябва да бъде по-малко от 4.4:
$ Tar -xzf Nginx-0.6.32.tar.gz
$ Tar -xjf PCRE-7.8.tar.bz2
$ Tar -xzf mod_wsgi.tar.gz
$ Mv mod_wsgi-8994b058d2db mod_wsgi
ако (R-> метод == NGX_HTTP_GET || R-> метод == NGX_HTTP_HEAD)
ако (RC! = NGX_OK RC! = NGX_AGAIN)
И тогава ние ще направим:
$ Patch -d mod_wsgi -p0 За да се събере с Nginx SSL също трябва да инсталирате OpenSSL библиотеката за използване ngx_http_gzip_module библиотека Zlib модул. За да се сглоби mod_wsgi трябва да инсталирате питон-Dev пакет: $ Ап-да инсталирате libssl-Dev $ Ап-да инсталирате zlib1g-Dev $ Ап-да инсталирате питон-Dev $ Коригират а + х nginx.sh Помислете за реда на възможности: п Опцията потребител описва работните процеси ще се извършват от името на потребител и група. п worker_processes опция се задава броят на работните процеси. Брой работни процеси - параметър, който се отразява на работата и най-вече зависи от очакваното натоварване на сървъра и на изискваната функционалност на сайта. В най-простия случай, тя може да бъде само един работен процес, но ако се използва компресия на данни или SSL, броят им може да е равен на броя на процесорите, или около два пъти повече. В този случай, аз избрах 4 работния процес, като пример на статичен уеб сайт и използва компресия, и SSL и писти на двупроцесорни машина. В случай, ако използвате не е съвсем типични Nginx синхронни модули, като например mod_wsgi, ще трябва да изберете броя на процесите на работниците, в зависимост от очаквания брой едновременни заявки и тяхната скорост на обработка. п Опции error_log и PID, описва пътя към дневника грешка с нивото на сеч и пътя до файла, в който да се съхранява идентификатора на основния процес на сървъра. п раздел събития описва възможностите, свързани с обработка на събитие. Вариант worker_connections описва ограничението за броя на едновременни връзки на работния процес. По този начин, в случай на статично максимална сайт брой едновременни връзки към сървъра може да бъде изчислена по формулата: worker_processes * worker_connections. Също така в тази секция можете да изберете метода на събитие за обработка, например използване epoll и други настройки, свързани с обработка на събитие. раздел н HTTP описва конфигурацията на HTTP сървър и всички сайтове. Опциите включват и описват default_type на MIME типове съответно директорията и на стандартния тип,. Кодова опция се задава кодиране, които ще бъдат добавени към заглавната отговор Content-Type. Ако не е уточнено, браузъри ще използват своя собствена стандартното кодиране като кодировка по съдържание. Server_tokens опция контролира продукцията на номера на версията на сървъра в отговор. Вариантът включва използването на sendfile система повикване, като оптимизира файловете на пакети. Задаване на опции, като се започне от GZIP, описва възможностите за компресия на отговори. Задаване на опции, които започват на SSL, описва настройката SSL сесии. Тази опция свързва включва още един конфигурационен файл, в този случай директно към конфигурацията на сайта. Конфигурация на сайта може да бъде, както следва: server_name example.ru * .example.ru; error_log /var/log/nginx/example.ru/error.log информация; ако ($ домакин! = "example.ru")
error_log /var/log/nginx/example.ru/error.log информация; auth_basic "Пример администратор място"; В този случай, /etc/nginx/example.ru.conf файл описва две версии на сайта - обичайната HTTP-версия и версията на HTTPS, защитено с парола. Секции описват конфигурация сървър виртуални сървъри. Помислете за повече опции: п-сървъра опция указва, имената и псевдонимите на сайта. п Опции error_log и access_log определи пътя към дневника грешка с нивото на сеч и влезте заявки, съответно. п раздел местоположение съчетава конфигурационни параметри в зависимост от искането URI. н Опции корен и индекс опише основната директория на сайта и името на файла с индекс по подразбиране. п и пренапише ако опции се използват за промяна на искането URI. В този пример, всички искания за други домейни са пренасочени към example.ru. н Опции започвайки с ssl_, описват пътя към SSL сертификат и частен ключ, съответно. HTTP сървър често е само посредник (прокси), с лице на другата HTTP сървър. Например, има необходимост от такава конфигурация, ако един от обектите се извършва с използването на технология, която вече има своя собствена HTTP сървър или агент се използва като стабилизатор натоварване за няколко сървъра, които стоят зад него. В Nginx, тази функция се поддържа от ngx_http_proxy_module модул. proxy_set_header домакин $ домакин; proxy_set_header X-реално IP $ REMOTE_ADDR; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; Тези опции определят допълнителни заглавия, които ще бъдат прехвърлени към вторичен сървър, и да се свързват конфигурация сайт по делото. Конфигурация на сайта може да бъде, както следва: error_log /var/log/nginx/zope3.example.ru/error.log информация; error_page 502503504 /maintenance.html; fastcgi_param SCRIPT_FILENAME /home/www/php.example.ru/data$fastcgi_script_name; Освен вече добре познати варианти, има раздел, който определя действията за всички пътища, завършващи на .php: п fastcgi_index опция се задава името на файла с индекс за FastCGI. п вариант включва файлът се свързваме с параметрите, които ще бъдат прехвърлени към FastCGI-заявки. За съжаление, ние не може да се свърже след като тези параметри на високо ниво, тъй като Следващата опция fastcgi_param, което от своя страна посочи друг допълнителен параметър отменя всички параметри, определящи по-високо ниво. Персонализиране с Python WSGI wsgi_var REQUEST_METHOD $ REQUEST_METHOD; wsgi_var QUERY_STRING $ QUERY_STRING; wsgi_var CONTENT_TYPE $ CONTENT_TYPE; wsgi_var CONTENT_LENGTH $ CONTENT_LENGTH; wsgi_var SERVER_NAME $ server_name; wsgi_var SERVER_PORT $ server_port; wsgi_var SERVER_PROTOCOL $ server_protocol; wsgi_var REQUEST_URI $ REQUEST_URI; wsgi_var DOCUMENT_URI $ document_uri; wsgi_var DOCUMENT_ROOT $ DOCUMENT_ROOT; wsgi_var SERVER_SOFTWARE $ nginx_version; wsgi_var REMOTE_ADDR $ REMOTE_ADDR; wsgi_var REMOTE_PORT $ remote_port; wsgi_var SERVER_ADDR $ server_addr; wsgi_var REMOTE_USER $ REMOTE_USER; След това трябва да добавите към /etc/nginx/nginx.conf опции раздел HTTP: Сега направи WSGI-Trac скрипт, за да се свържете и да го настроите като /home/www/wsgi.example.ru/wsgi.py, като не се забравя, за да изпълним: И последната точка - конфигурацията на сайт: error_log /var/log/nginx/wsgi.example.ru/error.log информация; Тук wsgi_pass опция се задава името на скрипта, за да бъде изпълнена в рамките на работния процес. Съответно, тъй като скриптове работят синхронно с работния процес, за да се оптимизира ефективността на сайта с WSGI, може да се наложи да се увеличи стойността на опциите в worker_processes nginx.conf. прилагане дефиниция (среда, start_response): завърне [ "Здравей, свят!"] По този начин, от протокола позволява, например, да започне да се трасира уеб приложението използва стандартния пакет wsgiref (появява в Python 2.5), а след това отидете на mod_wsgi (с п ginx или Apache) или HTTP сървър в асинхронен рамка изопачена.