Tamang pagsasaayos ng nginx php fpm ubuntu. Pagsubok sa web server. Kontrolin ang bilang ng mga sabay-sabay na koneksyon

  • Pangangasiwa ng domain name,
  • setup ng Linux,
  • Pangangasiwa ng server,
  • Pangangasiwa ng sistema
  • hello, mahal na gumagamit Habrakhabra. Ang aking kwento ay tungkol sa kung paano ihanda ang lupa para sa mga lokal na proyekto sa pagbuo ng web sa operating system Ubuntu 16.04.1 LTS.

    Sa artikulong ito nais kong iwaksi at linawin posibleng kahirapan nauugnay sa pag-install at pagsasaayos ng software na kinakailangan para sa modernong web development, na maaaring makaharap ng mga baguhang developer at hindi lamang.

    Mga teknolohiyang gagamitin sa artikulo: nginx, php-fpm.

    Bago simulan ang kuwento, nais kong tandaan na ginawa ko ang lahat ng mga pagkilos na ito sa isang "hubad" na sistema.
    Makikipagtulungan ako sa aptitude package manager. Inirerekomenda ko rin na i-update ang package index at ang mga package mismo bago i-install ang software. Sa artikulong ito, sabay nating gagawin ang mga hakbang na ito.

    Tara na!

    Pag-install ng manager ng package kakayahan, index at mga update sa package

    I-install:

    Sudo apt install aptitude
    Ina-update namin ang index.

    Sudo aptitude update
    Nag-a-update kami ng mga pakete (ang utos ay mag-a-update ng lahat ng mga pakete kung saan mayroong mga bagong bersyon; kung ang mga pakete ay kailangang alisin, ito ay gagawin).

    Sudo aptitude full-upgrade

    Pag-install at pagsasaayos nginx(bersyon >= 1.10.0)

    Nag-i-install kami.

    Sudo aptitude install nginx
    Ilunsad natin.

    Sudo service nginx start
    Sinusuri namin ang bersyon upang matiyak na hindi kami nag-install ng luma, iyon ay, mas mababa sa 1.10.0.

    Nakumpleto na ang pag-install at paglunsad, ngayon ay pumunta tayo sa direktoryo kung saan naka-install ang aming nginx at tingnan ang istraktura nito. Ang direktoryo ng nginx ay matatagpuan sa landas na ito:

    Cd /etc/nginx/
    Maaari mong tingnan ang mga nilalaman ng direktoryo gamit ang mga utos na ls na may mga -la na mga flag magiging mas maginhawa upang tingnan ang mga nilalaman ng direktoryo (sa katunayan, ang utos na ito na may mga partikular na flag ay maaaring ilarawan nang mas detalyado at mas tumpak, ngunit iba ang topic natin ngayon).

    Ls-la
    Interesado kami sa sa ngayon ang dalawang direktoryo na nakikita mo sa screenshot. Ito ang mga site-available at sites-enabled na mga direktoryo.

    Pumunta tayo sa site-available na direktoryo at simulan ang pag-configure ng aming virtual host (site).

    Cd /etc/nginx/sites-available
    Bago natin simulan ang paggawa ng configuration file, tingnan natin kung ano ang mayroon tayo ang katalogo na ito. Sa aking kaso, ang direktoryo ay hindi walang laman, naglalaman na ito ng mga file ng pagsasaayos, tinanggal ko ang mga ito upang hindi ka mailigaw.

    Mahalagang paglihis

    Sa kaso ng pag-install ng nginx "mula sa simula", tiyak na "mula sa simula", dahil kapag na-uninstall mo ang nginx gamit ang utos
    sudo apt-get remove nginx o sudo apt remove nginx configuration file ay nananatili at kung bigla mong hindi naiintindihan kung bakit hindi gumagana ang nginx at gusto mong i-install muli ito (kadalasan ay ginagamit ito ng mga nagsisimula. Mga gumagamit ng Linux), pagkatapos kahit na pagkatapos ng muling pag-install ay hindi ito gagana nang tama, dahil sa ang katunayan na ang mga lumang mga file ng pagsasaayos (hindi sila tinanggal pagkatapos ng pag-alis gamit ang utos ng pag-alis) ay naglalaman ng mga hindi tamang setting, kakailanganin nilang tanggalin o i-configure nang tama, pagkatapos lamang nginx gagana.

    Inirerekomenda kong tanggalin gamit ang utos sudo apt-get purge nginx o sudo apt purge nginx. Kung ikaw ay gumagamit manager ng package kakayahan, kung gayon utos ng sudo Ang aptitude purge nginx ay nag-aalis ng buong package kasama ang lahat ng dependencies at configuration file.


    Magkakaroon ng isang file sa direktoryong ito bilang default, na tinatawag na default. Maglalaman ito ng configuration file na may halimbawa, na may mga komento, maaari mo itong pag-aralan sa iyong paglilibang, o maaari mo itong ganap na tanggalin (maaari mong palaging makipag-ugnayan opisyal na dokumentasyon).

    Ls-la

    Gumawa tayo ng sarili nating configuration file, na tumutugma sa domain name ng ating lokal na site (o tunay, kung alam mo na ang pangalan nito). Ito ay maginhawa, sa hinaharap, kapag mayroong maraming mga file ng pagsasaayos, ito ay magliligtas sa iyo mula sa pagkalito sa kanila. Para sa akin ang file na ito ay tatawaging project.local.

    Sudo touch project.local
    Tingnan natin kung ano ang nangyari.

    Ngayon buksan natin ito sa editor, bubuksan ko ito sa nano.

    Sudo nano project.local
    Nakita namin na ito ay walang laman. Ngayon ay magpatuloy tayo sa paglikha ng aming file. Kailangan mong dalhin ang configuration sa form tulad ng nakasulat sa ibaba. Ilalarawan ko lamang ang mahahalagang direktiba ng file na ito, hindi ko ilalarawan ang natitira, dahil hindi ito mahalaga sa ngayon, pagkatapos ng lahat, mayroon tayong paksa pangunahing mga setting. Ang mga setting ng "slide" na ito ay sapat na upang bumuo ng mga proyekto sa lokal, hindi lamang mga maliliit, kundi pati na rin ang mga medyo malaki. Sa mga sumusunod na artikulo ay hiwalay kong ilalarawan ang bawat isa sa mga direktiba na ginamit (iyan ang tawag sa mga linya, halimbawa server_name) ng file na ito.

    Direktang tingnan ang mga komento sa configuration file.

    Server ( makinig 80; # port na nakikinig sa nginx server_name project.local; # domain name nauugnay sa kasalukuyang virtual host ugat /home/stavanger/code/project.local; # ang direktoryo kung saan matatagpuan ang proyekto, ang landas patungo sa entry point index index.php;
    # add_header Access-Control-Allow-Origin *;

    # maghatid ng mga static na file nang direkta lokasyon ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ ( access_log off; mag-e-expire ang max; log_not_found off; ) lokasyon / ( # add_header Access-Control-Allow- Pinagmulan *; try_files $uri $uri/ /index.php?$query_string; ) lokasyon ~* \.php$ ( try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix :/var/run/php/php7.0-fpm.sock; # ikonekta ang php-fpm socket fastcgi_index index.php;
    I-save ang file. Ngayon kailangan nating suriin kung mayroong anumang mga error dito. Magagawa natin ito bilang isang pangkat.

    Sudo nginx -t Kung makakita kami ng impormasyon tulad ng sa screenshot, kung gayon ang lahat ay tama at maaari naming ipagpatuloy ang pag-set up. Kung nakakakuha ka ng anumang mga error, sulit na suriing muli ang iyong configuration file. Ngayon kailangan nating i-activate ang configuration file, sa /etc/nginx/sites-enabled/ directory kailangan nating lumikha ng symlink (

    simbolikong link
    ). Kung nag-install ka ng nginx mula sa simula, pagkatapos ay sa direktoryo na ito mayroong isang symlink sa default na file, na tinalakay sa itaas kung hindi mo ito kailangan; Pumunta sa nais na direktoryo. Cd /etc/nginx/sites-enabled/ Ngayon ay nasa loob na kami

    ang nais na direktoryo
    . Gumawa tayo ng ating symlink. Upang lumikha, gamitin ang ln command na may -s flag, pagkatapos ay ipahiwatig namin ang path sa aming project.local config.

    Sudo ln -s /etc/nginx/sites-available/project.local

    Tingnan natin ang aming ginawang symlink. Upang matiyak na ginagawa pa rin natin ang lahat nang tama, patakbuhin natin muli ang command.

    file mga host Ang file na ito ay matatagpuan sa /etc/hosts. Ang pagkakaroon ng mga entry dito ay nagpapahintulot sa iyo na magpatakbo ng nginx gamit ang localhost bilang domain. Sa file na ito maaari kang magtalaga

    mga alternatibong alias

    , halimbawa para sa aming project project.local, itatalaga namin ang domain na project.local.
    Buksan ang file sa nano editor.

    Sudo nano /etc/hosts Magkakaroon ka ng iba pang impormasyon sa file na ito, huwag pansinin ito. Kailangan mo lamang magdagdag ng isang linya tulad ng sa aking screenshot. (>=7.0)

    Pag-install
    php-fpm sudo aptitude install php-fpm Sinusuri

    naka-install na bersyon

    , kung sakali, bagama't sa Ubuntu 16.04.1 ang 7.0 na bersyon ay nasa mga repositoryo.

    Php-fpm7.0 -v
    Kung i-edit mo ang mga config, huwag kalimutang i-restart ang daemon. Ginagawa ito. Ngunit hindi natin ito kakailanganin.

    Sudo service php7.0-fpm restart
    Kinukumpleto nito ang pag-install at pagsasaayos ng php-fpm. Talaga, iyon lang. Ito ay hindi magic; ang path sa php-fpm socket ay tinukoy na sa configuration file. Siyempre, maaaring kailanganin mo php extension para sa pagbuo ng mga personal na proyekto, ngunit maaari mong ibigay ang mga ito kung kinakailangan.

    Ngayon pumunta tayo sa direktoryo kasama ang aming proyekto, mayroon akong kasama sa landas na ito.

    Cd /home/stavanger/code/project.local
    Umakyat tayo sa direktoryo sa itaas at gawin ang mga pahintulot na 777 (iyon ay, gagawin natin buong karapatan direktoryo kasama ang aming proyektong proyekto.local). Ito ay magliligtas sa atin mula sa mga hindi kinakailangang problema sa hinaharap.

    Cd .. sudo chmod -R 777 project.local
    Kinukumpleto nito ang pag-setup ng software, gumawa tayo ng test file sa aming working directory project.local at tiyaking gumagana ang lahat. Gagawa ako ng index.php file na may ganitong nilalaman.

    Pumunta kami sa browser at makita na lahat ay gumagana nang mahusay para sa amin! PHP interpreter kasama.

    Sa paggalang sa mga mambabasa, Stavanger.

    Magandang hapon po

    Oo, sa aking opinyon, ang Nginx ay ilang beses na mas mabilis kaysa sa Apache server. Ang ilan ay tututol - pagkatapos ng lahat, ang Apache ay maaaring ma-optimize at ito ay magiging mabilis din. Ito ay totoo, ngunit hindi natin dapat kalimutan na ang Nginx ay maaaring ma-overclocked nang husto. Talagang magsusulat ako ng isang hiwalay na artikulo tungkol sa pag-optimize nang detalyado.

    Isang maliit na teorya tungkol sa Nginx + php-fpm

    Sa Apache web server, ang php ay isang plug-in na module; Dahil sa kapus-palad na arkitektura na ito, karaniwang hindi kayang pangasiwaan ng Apache ang higit sa 200-300 mga kahilingan sa bawat segundo kahit na sa isang napakalakas na server. Gumagamit ang Nginx ng ibang arkitektura - ang Nginx web server mismo ay nagpoproseso lamang ng mga static na kahilingan (mga imahe, css, atbp.), at inililipat ang pagpapatupad ng php sa ibang software server - php-fpm. Ang Php-fpm (FastCGI Process Manager) ay isang ganap na independiyenteng software; Ang mga malalaking proyekto ay karaniwang nagpapanatili ng ilang mga server na may Nginx, php-fpm at mga database.

    Sa pamamagitan ng pagpapalit ng Apache server ng Nginx + php-fpm, maaari mong pabilisin ang pagproseso ng mga kahilingan ng user at makatipid ng malaki sa hardware. Ang isang web project na may hanggang 10,000 natatanging bisita bawat araw ay madaling mabuhay sa pinakamurang virtual server mula sa DigitalOcean sa halagang $5 bawat buwan. Siyanga pala, kung susundin mo ang link na ito - DigitalOcean, makakatanggap ka ng $10 sa pagpaparehistro, na 2 buwan ng paggamit ng virtual server. Walang karagdagang kundisyon doon.

    Ngunit bumaba tayo sa negosyo. Ilalarawan ko ang proseso ng pag-install at pagsasaayos gamit ang CentOS 6.x bilang isang halimbawa, ngunit hindi ito magiging magkaiba para sa iba pang mga distribusyon ng Linux.

    Pag-install ng Nginx:

  • Dapat bang naroroon na ang /var/run/php5-fpm.sock sa server? sa ubuntu 16.04 wala akong nakitang ganoong file sa /var/run
  • 1. Pag-install ng Nginx repository: Ang mga karaniwang pamamahagi ng Linux ay walang pamamahagi ng Nginx bilang default, kaya idagdag natin ito sa system.

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


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

    Susunod, pindutin ang ":wq" at Enter para i-save at lumabas. Iyon lang, magagamit na ngayon ang Nginx para sa awtomatikong pag-install sa pamamagitan ng yum package manager. Kung gumagamit ka ng isa pang pamamahagi ng Linux, pumunta sa pahinang ito para sa mga tagubiling partikular sa iyong system.

    2. Pag-install ng Nginx mula sa repositoryo: ngayon patakbuhin lang ang install command.

    Pag-install ng php-fpm:

    Available ang Php-fpm sa lahat ng modernong distribusyon bilang default, kaya i-install lang:

    I-install nito ang server mismo at lahat ng sumusuporta sa mga pakete. Kung ang mga bagay ay hindi gumana, maaari kang bumuo ng php-fpm mula sa iyong sarili para sa mga detalyadong tagubilin, pumunta dito.

    Pag-set up at pagpapatakbo ng Nginx + php-fpm:

    1. Magsimula tayo sa php-fpm: buksan ang configuration file

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

    at isulat doon ang trabaho sa pamamagitan ng socket (ito ay gagana nang mas mabilis):

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

    baguhin ang umiiral na linyang "listen =" o magdagdag ng bago at alisin ang luma.

    2. Ngayon lumipat tayo sa Nginx: lumikha ng configuration file para sa iyong unang site (palitan ang site1 ng pangalan ng site, bagama't gagana ito kung ano ang dati)

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

    Nasa ibaba ang pinakamababang configuration, maaari mo lamang itong kopyahin. Lahat ng kailangang palitan ay naka-highlight sa pula. Kino-configure ng configuration na ito ang paghahatid ng mga static na file at access sa isang php file - index.php. Ang lahat ng modernong CMS ay inilunsad sa isang file, kaya ang pagsasaayos na ito ay angkop para sa karamihan ng mga gawain. Kung kailangan mong magpatakbo ng iba pang mga php file, isulat ang mga ito nang hiwalay. Sa pagsasaayos na ito, ang mga file ng site ay dapat ilagay sa /home/mysite/public_html/ folder

    server(
    makinig [server ip address]:80;
    site ng server_name ;
    solver 8.8.8.8;
    error_log /var/log/nginx/site _error.log babala;
    ugat /home/site/public_html;
    access_log /var/log/nginx/site -access.log;
    charset utf-8;
    index index.php;
    lokasyon ~ .*(gif|jpg|jpeg|png|ico|swf|txt|pdf|doc|docx|exe|xls|xlsx|strings|zip|rar|7z)$ (
    mag-e-expire 1y;
    }

    Lokasyon ~ .*(html|htm|js|css)$ (
    mag-e-expire 1y;
    }

    lokasyon ~ ^/index.php (
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /home/site/public_html/index.php;
    isama ang /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_NAME /index.php;
    }

    Ngayon ilagay ang iyong unang mga file ng site sa /home/site1 /public_html/ folder at handa na kaming umalis.

    3. Pagpapatakbo ng nginx + php-fpm:

    pagsisimula ng serbisyo nginx

    pagsisimula ng serbisyo ng php-fpm

    Kung ginawa mo ang lahat ng tama at hindi nagkamali kahit saan, ang resulta ay magiging ganito:

    Kung mayroon kang anumang mga katanungan o kailangan ng paglilinaw, mangyaring magtanong o mag-iwan ng komento.

    Lagi akong masaya na tumulong!

    Ang isang nakatuong Nginx-based na Web server ay isang mahusay na paraan upang mapabuti ang pagganap ng mga Web site. Wala lang itong katumbas sa bilis ng pagproseso ng static na content: madali itong makatiis ng ilang libong sabay-sabay na koneksyon at madaling ma-optimize at maiangkop sa anumang configuration. Gayunpaman? Nagsisilbing front end para sa Apache, ang nginx ay lumalabas na ang pinaka-mahina na punto ng buong imprastraktura ng Web, kaya dapat bigyan ng espesyal na pansin ang seguridad ng nginx.

    Ang artikulong ito ay isang uri ng programang pang-edukasyon, o, kung gusto mo, isang buod ng lahat ng mga diskarte para sa pagpapabuti ng seguridad ng nginx. Hindi ito maglalaman ng teorya, isang paglalarawan ng mga pangunahing kaalaman sa pag-set up ng isang Web server at iba pang fluff. Sa halip, makakatanggap ka ng komprehensibo, praktikal na materyal na naglalarawan sa lahat ng mga pangunahing hakbang na kailangan mong gawin upang magkaroon ng tunay na secure na Web server.

    Pag-install

    Ang nginx package ay magagamit sa precompiled form para sa anumang pamamahagi. Gayunpaman, sa pamamagitan ng pagbuo ng server sa iyong sarili, maaari mong gawin itong mas compact at maaasahan, at magkakaroon ka rin ng pagkakataon na baguhin ang linya ng pagbati ng Web server upang pigilan ang mga hangal na script ng mga bata.

    Baguhin ang linya ng pagbati sa Web server

    I-download ang nginx sources, buksan ang file src/http/ngx_http_header_filter_module.c at hanapin ang sumusunod na dalawang linya:

    static char ngx_http_server_string = "Server: nginx" CRLF;
    static char ngx_http_server_full_string = "Server: " NGINX_VER CRLF;

    Palitan ang mga ito ng isang bagay na tulad nito:

    static char ngx_http_server_string = "Server: ][ Web Server" CRLF;
    static char ngx_http_server_full_string = "Server: ][ Web Server" CRLF;

    Alisin ang lahat ng nginx module na hindi mo ginagamit

    Ang ilang mga module ng nginx ay direktang kumokonekta sa Web server sa panahon ng compilation, at alinman sa mga ito ay puno ng potensyal na panganib. Marahil sa hinaharap ay makikita ang isang kahinaan sa isa sa mga ito, at ang iyong server ay nasa panganib. Sa pamamagitan ng hindi pagpapagana ng mga hindi kinakailangang module, maaari mong makabuluhang bawasan ang panganib na mangyari ang ganoong sitwasyon.

    Bumuo gamit ang sumusunod na mga utos:

    # ./configure --without-http_autoindex_module --without-http_ssi_module
    # gumawa
    # gumawa ng pag-install

    Sa ganitong paraan makakakuha ka ng nginx na may SSI (Server Side Includes) at Autoindex na mga module na hindi pinagana nang maaga (at sa karamihan ng mga kaso ay walang silbi). Upang malaman kung aling mga module ang maaaring ligtas na maalis mula sa Web server, patakbuhin ang script ng pag-configure gamit ang flag na '-help'.

    Hatiin natin ang nginx.conf

    Pagkatapos ng pag-install, dapat na i-configure ang nginx. Mayroon nang materyal na naglalarawan sa prosesong ito sa mga pahina ng magazine, ngunit mananatili kami sa paksa ng artikulo at pag-uusapan ang mga paraan upang mapataas ang seguridad ng server.

    Huwag paganahin ang pagpapakita ng bersyon ng server sa lahat ng mga pahina ng error

    Idagdag ang linyang "server_tokens off" sa nginx.conf file. Pipilitin nitong itago ang nginx ng impormasyon tungkol sa uri at bersyon ng Web server sa mga page na nabuo bilang tugon sa isang maling kahilingan ng kliyente.

    I-set up ang proteksyon laban sa pagkagambala sa stack

    Idagdag ang mga sumusunod na linya sa seksyon ng server:

    # vi /etc/nginx/nginx.conf

    # Pinakamataas na laki ng buffer para sa pag-iimbak ng katawan ng kahilingan ng kliyente
    client_body_buffer_size 1K;
    # Pinakamataas na laki ng buffer para sa pag-iimbak ng mga header ng kahilingan ng kliyente
    client_header_buffer_size 1k;
    # Ang maximum na laki ng katawan ng kahilingan ng kliyente, na tinukoy sa field ng header na Haba ng Nilalaman. Kung dapat suportahan ng server ang mga pag-upload ng file, dapat tumaas ang halagang ito
    client_max_body_size 1k;
    # Bilang at laki ng mga buffer para sa pagbabasa ng malaking header ng kahilingan ng kliyente
    large_client_header_buffers 2 1k;

    Bigyang-pansin ang large_client_header_buffers na direktiba. Bilang default, ang nginx ay naglalaan ng apat na buffer upang iimbak ang string ng URI, ang laki ng bawat isa ay katumbas ng laki ng isang pahina ng memorya (para sa x86 ito ay 4 KB). Ang mga buffer ay inilalabas sa tuwing papasok ang koneksyon sa keep-alive na estado pagkatapos magproseso ng isang kahilingan. Dalawang 1 KB buffer ang makakapag-imbak ng mga URI na 2 KB lang ang haba, na tumutulong na labanan ang mga bot at pag-atake ng DoS.

    Upang mapabuti ang pagganap, idagdag ang mga sumusunod na linya:

    # vi /etc/nginx/nginx.conf

    # Timeout habang nagbabasa ng nilalaman ng kahilingan ng kliyente
    client_body_timeout 10;
    # Timeout habang binabasa ang header ng kahilingan ng kliyente
    client_header_timeout 10;
    # Timeout pagkatapos kung saan ang keep-alive na koneksyon sa client ay hindi isasara mula sa server side
    keepalive_timeout 5 5;
    # Timeout kapag nagpapadala ng tugon sa kliyente
    send_timeout 10;

    Kontrolin ang bilang ng mga sabay-sabay na koneksyon

    Upang protektahan ang Web server mula sa labis na karga at pagtatangka na magsagawa ng pag-atake ng DoS, idagdag ang mga sumusunod na linya sa config:

    # vi /etc/nginx/nginx.conf

    # Inilalarawan namin ang zone (slimits) kung saan maiimbak ang mga estado ng session. Ang isang 1 MB zone ay maaaring mag-imbak ng humigit-kumulang 32000 estado, itinakda namin ang laki nito sa 5 MB
    limit_zone slimits $binary_remote_addr 5m;
    # Itakda ang maximum na bilang ng mga sabay-sabay na koneksyon para sa isang session. Sa esensya, ang numerong ito ay tumutukoy sa maximum na bilang ng mga koneksyon mula sa isang IP
    limit_conn slimits 5;

    Ang unang direktiba ay dapat nasa seksyong HTTP, ang pangalawa sa seksyon ng lokasyon. Kapag ang bilang ng mga koneksyon ay lumampas sa mga limitasyon, ang kliyente ay makakatanggap ng mensaheng "Hindi available ang serbisyo" na may code 503.

    Payagan ang mga koneksyon lamang sa iyong domain

    Ang mga hacker ay maaaring gumamit ng mga bot upang mag-scan ng mga subnet at maghanap ng mga mahihinang Web server. Karaniwan, binabagtas lang ng mga bot ang mga hanay ng IP address na naghahanap ng bukas na 80 port at nagpapadala ng kahilingan sa HEAD upang makakuha ng impormasyon tungkol sa web server (o home page). Madali mong mapipigilan ang naturang pag-scan sa pamamagitan ng pagbabawal sa pag-access sa server sa pamamagitan ng IP address (idagdag sa subsection ng lokasyon):

    # vi /etc/nginx/nginx.conf

    kung ($host !~ ^(host.com|www.host.com)$) (
    ibalik ang 444;
    }

    Limitahan ang bilang ng mga magagamit na pamamaraan para sa pag-access sa Web server

    Gumagamit ang ilang bot ng iba't ibang paraan upang makipag-ugnayan sa server upang subukan ang pagtuklas ng uri at/o paglusot, ngunit malinaw na isinasaad ng RFC 2616 na ang Web server ay hindi kinakailangan na ipatupad ang lahat ng mga ito, at ang mga hindi suportadong pamamaraan ay maaaring hindi maproseso. Ngayon, tanging ang GET (kahilingan ng dokumento), HEAD (kahilingan ng header ng server) at POST (kahilingan ng paglalathala ng dokumento) ang mananatiling ginagamit, kaya ang lahat ng iba ay maaaring walang sakit na hindi paganahin sa pamamagitan ng paglalagay ng mga sumusunod na linya sa seksyon ng server ng file ng pagsasaayos:

    # vi /etc/nginx/nginx.conf

    kung ($request_method !~ ^(GET|HEAD|POST)$) (
    ibalik ang 444;
    }

    Isara ang mga bot

    Ang isa pang paraan upang harangan ang mga bot, scanner at iba pang masasamang espiritu ay batay sa pagtukoy sa uri ng kliyente (user-agent). Ito ay hindi masyadong epektibo, dahil karamihan sa mga bot ay nagta-target ng ganap na mga lehitimong browser, ngunit sa ilang mga kaso ito ay nananatiling kapaki-pakinabang:

    # vi /etc/nginx/nginx.conf

    # I-block ang mga download manager
    kung ($http_user_agent ~* LWP::Simple|BBBike|wget) (
    ibalik ang 403;
    }
    # I-block ang ilang uri ng mga bot
    kung ($http_user_agent ~* msnbot|scrapbot) (
    ibalik ang 403;
    }

    I-block ang referrer spam

    Kung ang iyong site ay nag-publish ng mga Web log sa isang pampublikong paraan na naa-access, madali kang maging biktima ng Referrer spam (kapag ang mga spam bot ay nakikipag-ugnayan sa iyong server, na nagpapahiwatig ng referrer sa header - ang address ng na-advertise na site). Ang ganitong uri ng spam ay madaling masira ang mga rating ng SEO ng isang website, kaya dapat itong mai-block nang walang pagkabigo. Ang isang paraan upang gawin ito ay ang blacklist ang mga pinakakaraniwang salita na makikita sa mga address ng mga na-advertise na site.

    # vi /etc/nginx/nginx.conf

    # Seksyon ng server
    kung ($http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen))
    {
    ibalik ang 403;
    }

    I-block ang hotlink

    Ang hotlink ay ang pagsasama ng isang imahe (o iba pang nilalaman) mula sa ibang site sa isang pahina. Mahalaga, ito ay pagnanakaw, dahil ang imahe kung saan ginugol mo ang higit sa isang oras ng iyong libreng oras ay hindi lamang malayang ginagamit ng iba, ngunit lumilikha din ng pagkarga sa iyong Web server nang hindi nagdadala ng mga bisita dito. Upang labanan ang mga hotlink, sapat na upang matiyak na ang mga larawan ay ipinadala lamang sa kliyente kung hiniling niya ang mga ito habang nasa site na (sa madaling salita, ang header ng kahilingan ng referrer ay dapat maglaman ng pangalan ng iyong site). Idagdag ang mga sumusunod na linya sa seksyon ng server ng nginx.conf configuration file (host.com ang address ng iyong website):

    # vi /etc/nginx/nginx.conf

    lokasyon /mga larawan/ (
    valid_referers walang naka-block sa www.host.com host.com;
    kung ($invalid_referer) (
    ibalik ang 403;
    }
    }

    Bilang kahalili, maaari mong i-configure ang server na magbalik ng espesyal na banner na may mensahe tungkol sa pagnanakaw sa halip na ang hiniling na larawan. Upang gawin ito, palitan ang linyang "return 403" ng linya:

    isulat muli ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg huling

    Protektahan ang mahahalagang direktoryo mula sa mga estranghero

    Tulad ng ibang Web server, pinapayagan ka ng nginx na i-regulate ang pag-access sa mga direktoryo batay sa mga IP address at password. Ang tampok na ito ay maaaring gamitin upang isara ang ilang bahagi ng site mula sa prying eyes. Halimbawa, upang putulin ang URI mula sa labas ng mundo:

    # vi /etc/nginx/nginx.conf

    lokasyon /uploads/ (
    # Pahintulutan ang pag-access lamang sa mga makina sa lokal na network
    payagan ang 192.168.1.0/24;
    # Patayin natin ang iba
    tanggihan ang lahat;
    }

    Ngayon ang mga lokal na gumagamit ng network lamang ang magkakaroon ng access sa mga dokumento sa direktoryo ng mga pag-upload. Upang magtakda ng password, kailangan mong dumaan sa mas kumplikadong mga hakbang. Una, kailangan mong lumikha ng isang password file na pribado para sa nginx at idagdag ang mga kinakailangang user dito (bilang halimbawa, idagdag natin ang admin user):

    # mkdir /etc/nginx/.htpasswd
    # htpasswd -c /etc/nginx/.htpasswd/passwd admin

    # vi /etc/nginx/nginx.conf

    lokasyon /admin/ (
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd/passwd;
    }

    Maaaring magdagdag ng mga bagong user gamit ang sumusunod na command:

    # htpasswd -s /etc/nginx/.htpasswd/passwd user

    Gumamit ng SSL

    Kung gumagana ang iyong site sa pribadong data ng user, tulad ng mga numero ng credit card, mga password mula sa iba pang mga serbisyo, o nagbibigay ng access sa iba pang mahalagang impormasyon na maaaring maging masarap na subo para sa mga third party, alagaan ang pag-encrypt. Ang Nginx ay gumagana nang maayos sa SSL, at ang tampok na ito ay hindi dapat pabayaan.

    Para i-set up ang SSL encryption gamit ang nginx, sundin lang ang ilang simpleng hakbang. Una kailangan mong lumikha ng isang sertipiko gamit ang sumusunod na pagkakasunud-sunod ng mga utos:

    # cd /etc/nginx
    # openssl genrsa -des3 -out server.key 1024
    # openssl req -new -key server.key -out server.csr
    # cp server.key server.key.org
    # openssl rsa -in server.key.org -out server.key
    # openssl x509 -req -mga araw 365 -sa server.csr -signkey server.key -out server.crt

    Pagkatapos ay ilarawan ang sertipiko sa nginx configuration file:

    # vi /etc/nginx/nginx.conf

    server(
    server_name host.com;
    makinig 443;
    ssl sa;
    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;
    access_log /etc/nginx/logs/ssl.access.log;
    error_log /etc/nginx/logs/ssl.error.log;
    }

    Pagkatapos nito, maaari mong i-restart ang Web server:

    # /etc/init.d/nginx reload

    Naturally, nang walang suporta mula sa Web site mismo, walang kabuluhan na gawin ito.

    Iba pang paraan

    Itakda ang mga tamang halaga para sa mga variable ng system

    Buksan ang /etc/sysctl.conf file at ilagay ang mga sumusunod na linya dito:

    # vi /etc/sysctl.conf

    # Proteksyon laban sa pag-atake ng smurf
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    # Proteksyon laban sa mga di-wastong mensahe ng ICMP
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    # Proteksyon laban sa SYN baha
    net.ipv4.tcp_syncookies = 1
    # I-disable ang source routing
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
    # Proteksyon ng anti-spoofing
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1
    # Hindi kami router
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    # Paganahin ang ExecShield
    kernel.exec-shield = 1
    kernel.randomize_va_space = 1
    # Pagpapalawak ng hanay ng mga magagamit na port
    net.ipv4.ip_local_port_range = 2000 65000
    # Palakihin ang maximum na laki ng mga buffer ng TCP
    net.ipv4.tcp_rmem = 4096 87380 8388608
    net.ipv4.tcp_wmem = 4096 87380 8388608
    net.core.rmem_max = 8388608
    net.core.wmem_max = 8388608
    net.core.netdev_max_backlog = 5000
    net.ipv4.tcp_window_scaling = 1

    Ilagay ang root directory ng web server sa isang dedikadong partition

    Sa pamamagitan ng paglalagay ng root directory ng Web server sa isang dedikadong partition at hindi pagpayag na mailagay doon ang anumang executable file o device file, poprotektahan mo ang natitirang bahagi ng system mula sa sinumang makaka-access sa root ng Web server. Sa kasong ito, ang entry sa /etc/fstab file ay dapat magmukhang ganito:

    /dev/sda5 /nginx ext4 default,nosuid,noexec,nodev 1 2

    Ilagay ang nginx sa isang chroot/kulungan na kapaligiran

    Pinapayagan ka ng anumang modernong *nix system na i-lock ang application sa isang nakahiwalay na kapaligiran sa pagpapatupad. Sa Linux, maaari mong gamitin ang mga teknolohiyang KVM, Xen, OpenVZ at VServer para dito, sa FreeBSD - Jail, sa Solaris - Zones. Kung wala sa mga teknolohiyang ito ang magagamit, maaari mong ilagay ang nginx sa isang klasikong chroot, na, kahit na mas marupok, ay maaaring huminto sa karamihan ng mga hacker.

    I-install ang mga panuntunan ng SELinux upang maprotektahan ang nginx

    Ang isang magandang alternatibo sa mga nakahiwalay na kapaligiran ng pagpapatupad ay ang mga lokal na intrusion detection at prevention system gaya ng SELinux o AppArmor. Kung na-configure nang tama, mapipigilan nila ang mga pagtatangka na i-hack ang Web server. Bilang default, wala sa mga ito ang naka-configure upang gumana kasabay ng nginx, gayunpaman, sa loob ng balangkas ng proyekto SELinuxNginx(http://sf.net/projects/selinuxnginx/) ang mga panuntunan para sa SELinux ay nilikha na magagamit ng sinuman. Ang natitira na lang ay i-download at i-install:

    # tar -zxvf se-ngix_1_0_10.tar.gz
    # cd se-ngix_1_0_10/nginx
    # gumawa
    # /usr/sbin/semodule -i nginx.pp

    Pag-setup ng firewall

    Karaniwan, ang nginx ay naka-install sa mga dedikadong makina na handa para sa mataas na pagkarga, kaya madalas na ito lamang ang serbisyo ng network na tumatakbo sa server. Upang ma-secure ang server, sapat na upang lumikha ng isang napakaliit na hanay ng mga panuntunan na magbubukas ng mga port 80, 110 at 143 (kung, siyempre, ang nginx ay dapat ding gumana bilang isang IMAP/POP3 proxy) at isara ang lahat ng iba pa mula sa labas ng mundo .

    Limitahan ang bilang ng mga koneksyon gamit ang isang firewall

    Para sa isang medyo na-load na Web site, magandang ideya na limitahan ang bilang ng mga pagtatangka sa koneksyon mula sa isang IP address kada minuto. Mapoprotektahan ka nito mula sa ilang uri ng pag-atake ng DoS at brute force. Sa Linux, ito ay maaaring gawin gamit ang karaniwang iptables/netfilter state module:

    # iptables -A INPUT -p tcp --dport 80 -i eth0 \
    -m state --state NEW -m recent --set
    # iptables -A INPUT -p tcp --dport 80 -i eth0 \
    -m state --state NEW -m recent --update \
    --segundo 60 --hitcount 15 -j DROP

    Binabawasan ng mga panuntunan ang limitasyon sa bilang ng mga koneksyon mula sa isang IP bawat minuto hanggang 15. Ang parehong ay maaaring gawin gamit ang pf:

    # vi /etc/pf.conf

    webserver_ip="1.1.1.1"
    mesa magpumilit
    harangan ng mabilis mula sa
    ipasa ang $ext_if proto tcp sa $webserver_ip \
    port www mga flag S/SA panatilihin ang estado \
    (max-src-conn 100, max-src-conn-rate 15/60,\
    labis na karga flush)

    Bilang karagdagan sa limitasyon sa bilang ng mga sunud-sunod na koneksyon (15 bawat minuto), ang panuntunang ito ay nagtatakda ng karagdagang limitasyon sa bilang ng mga sabay-sabay na koneksyon na katumbas ng 100.

    Pag-setup ng PHP

    Kung gumagamit ka ng nginx kasabay ng PHP, huwag kalimutang i-configure din ito. Ito ang dapat na hitsura ng configuration file /etc/php/php.ini ng secure na server:

    # vi /etc/php/php.ini

    # Huwag paganahin ang mga mapanganib na function
    disable_functions = phpinfo, system, mail, exec
    # Pinakamataas na oras ng pagpapatupad ng script
    max_execution_time = 30
    # Pinakamataas na oras na maaaring gugulin ng script sa pagproseso ng data ng kahilingan
    max_input_time = 60
    # Pinakamataas na halaga ng memorya na inilalaan sa bawat script
    memory_limit = 8M
    # Pinakamataas na laki ng data na ipinadala sa script gamit ang POST method
    post_max_size = 8M
    # Pinakamataas na laki ng mga na-upload na file
    upload_max_filesize = 2M
    # Huwag magpakita ng mga error sa script ng PHP sa mga user
    display_errors = Naka-off
    # Paganahin ang Safe Mode
    safe_mode = Naka-on
    # Paganahin ang SQL Safe Mode
    sql.safe_mode = Naka-on
    # Payagan ang mga panlabas na utos na isagawa lamang sa direktoryong ito
    safe_mode_exec_dir = /path/to/protected/directory
    # Protektahan laban sa pagtagas ng impormasyon tungkol sa PHP
    expose_php = Naka-off
    # Nag-iingat kami ng mga tala
    log_errors = Naka-on
    # Pigilan ang pagbubukas ng mga malayuang file
    allow_url_fopen = Naka-off

    Mga konklusyon

    Sa pamamagitan ng paglalapat ng mga rekomendasyong inilarawan sa artikulong ito, makakakuha ka ng mas secure na Web server. Ngunit tandaan na hindi lahat ng mga diskarte ay angkop sa iyong pagsasaayos. Halimbawa, ang brute force na proteksyon batay sa pagbawas sa laki ng mga buffer na inilalaan ng nginx para sa pagproseso ng mga kahilingan ng kliyente ay maaaring humantong sa pagbaba sa pagganap, at sa ilang mga kaso, sa mga pagkabigo sa pagproseso ng mga kahilingan. Ang paglilimita sa bilang ng mga koneksyon ay lubhang makakaapekto sa pagganap ng kahit isang katamtamang load na Web site, ngunit magiging kapaki-pakinabang kung ang pahina ay may mababang trapiko. Palaging suriin kung paano nakakaapekto ang mga pagbabagong gagawin mo sa pagganap at pangkalahatang kalusugan ng Web page.

    Tungkol sa bayani ng araw

    Ang Nginx ay isa sa pinakamakapangyarihan at tanyag na Web server sa mundo. Ayon sa Netcraft, ginagamit ito upang suportahan ang higit sa 12 milyong mga Web site sa buong mundo, kabilang ang mga mastodon tulad ng Rambler, Yandex, Begun, WordPress.com, Wrike, vkontakte.ru, megashara.com, Librusec at Taba.ru. Ang isang karampatang arkitektura batay sa mga multiplexing na koneksyon gamit ang mga piling, epoll (Linux), kqueue (FreeBSD) na mga tawag sa system at isang mekanismo ng pamamahala ng memorya batay sa mga pool (maliit na buffer mula 1 hanggang 16 KB) ay nagbibigay-daan sa nginx na hindi lumubog kahit na sa ilalim ng napakataas na pag-load, makatiis. higit sa 10,000 sabay-sabay na koneksyon (ang tinatawag na problema sa C10K). Orihinal na isinulat ni Igor Sysoev para sa Rambler at binuksan noong 2004 sa ilalim ng lisensyang tulad ng BSD.

    Sa ngayon, dalawang web server ang nakakuha ng pinakasikat. Ito ay ang Apache at Ngnix. Ang bawat isa sa kanila ay may sariling kalamangan at kahinaan. Ang Apache ay binuo noong 1995 at ang pag-unlad nito ay hindi isinasaalang-alang ang lahat ng posibleng mga pangangailangan ng gumagamit ay gumagamit ng maraming memorya at mga mapagkukunan ng system, ngunit ito ay madaling i-configure. Ang Nginx ay binuo ng ilang sandali noong 2002, isinasaalang-alang ang mga error ng Apache at nakatuon sa maximum na pagganap.

    Hindi na kami magdedetalye tungkol sa mga kalamangan at kahinaan ng parehong mga web server na ito. Ang bawat isa sa kanila ay may sariling lugar ng aplikasyon. Saklaw ng gabay na ito ang pag-install ng Nginx Ubuntu 16.04. Bagama't magsasalita ako tungkol sa Ubuntu 16.04, ang lahat ng mga hakbang ay malalapat din sa iba pang mga distribusyon. Ang pag-set up ng Nginx ay pareho sa lahat ng dako, tanging ang utos ng pag-install ang naiiba.

    Ang unang hakbang ay i-install ang web server mismo sa system. Ang programa ay nasa mga opisyal na repositoryo, ngunit ang bersyon nito ay medyo luma na, kaya kung gusto mo ang pinakabagong bersyon, kailangan mong magdagdag ng PPA:

    sudo apt-add-repository ppa:nginx/stable

    Kasalukuyang available ang bersyon 1.10.0 sa mga opisyal na repository, at available na ang 1.10.1 sa stable na PPA. Kung hindi mo kailangan ang bersyon, magagawa mo nang wala ang PPA. Susunod, i-update ang mga listahan ng mga pakete mula sa mga repositoryo:

    At i-install ang ngnix:

    sudo apt install nginx

    Matapos makumpleto ang pag-install ng Nginx server, idagdag ang program sa startup upang awtomatiko itong magsimula:

    sudo systemctl paganahin ang nginx

    Kung bubuksan mo ang iyong browser ngayon, makikita mo ang nginx na tumatakbo, ngunit kailangan pa rin namin itong i-configure.

    Pag-set up ng Nginx Ubuntu

    Ang pag-set up ng Nginx Ubuntu ay mas kumplikado kaysa sa Apache. Dito hindi namin isasaalang-alang ang lahat ng mga opsyon at kakayahan ng programa, ngunit magsasalita lamang tungkol sa mga pangunahing. Mayroong iba't ibang mga pagsasaayos kung saan ang Nginx ay ginagamit bilang isang proxy server, at ang pangunahing server ay Apache, ngunit hindi kami magiging interesado dito. Kailangan nating i-install ang Nginx bilang isang standalone na web server.

    Ang mga setting ng Nginx ay ibang-iba - mayroon lamang isang pangunahing configuration file at mga file para sa mga virtual host. Ang pagsasaayos mula sa bawat direktoryo, tulad ng sa Apache, ay hindi suportado.

    • /etc/nginx/nginx.conf- pangunahing configuration file
    • /etc/nginx/sites-available/*- configuration file para sa mga virtual host, sa madaling salita, para sa bawat site.
    • /etc/nginx/sites-enabled/*- mga file ng pagsasaayos ng mga aktibong site.

    Sa katunayan, ang mga file ng pagsasaayos para sa mga virtual na host ay binabasa lamang mula sa direktoryo na pinagana ng mga site, ngunit naglalaman ito ng mga link sa mga available na site. Ang system na ito ay naimbento upang gawing posible na pansamantalang huwag paganahin ang ilang mga site nang hindi binubura ang kanilang pagsasaayos. Ang lahat ng iba pang mga file ay naglalaman lamang ng mga variable na deklarasyon at karaniwang mga setting na hindi kailangang baguhin. Tulad ng para sa nginx.conf, ang lahat ng mga file mula sa mga site-enable ay kasama dito, at samakatuwid maaari silang maglaman ng lahat ng eksaktong parehong mga tagubilin. Ngayon tingnan natin ang pangunahing configuration file:

    sudo vi /etc/nginx/nginx.conf

    Tulad ng nakikita mo, ang file ay nahahati sa mga seksyon. Ang pangkalahatang istraktura ay:

    pandaigdigang mga opsyon
    mga kaganapan()
    http(
    server(
    lokasyon()
    }
    server()
    }
    mail()

    • pandaigdigang mga opsyon ay responsable para sa pagpapatakbo ng buong programa.
    • mga pangyayari- ang seksyong ito ay naglalaman ng mga setting para sa pagtatrabaho sa network.
    • http- naglalaman ng mga setting ng web server. Dapat maglaman ng servier na seksyon para sa fine-tuning sa bawat site.
    • server- ang seksyong ito ay naglalaman ng mga setting para sa bawat site na naka-host sa web server.
    • lokasyon- ang seksyon ng lokasyon ay maaari lamang matatagpuan sa loob ng seksyon ng server at naglalaman lamang ng mga setting para sa isang partikular na kahilingan.
    • mail- naglalaman ng mga setting ng mail proxy.

    Bago lumipat sa mga opsyon, kailangan nating magsabi ng ilang salita tungkol sa line syntax sa configuration file. Mukhang ganito:

    halaga ng parameter karagdagang_halaga...;

    Ang linya ay dapat magtapos sa isang ";" at lahat ng bukas na panaklong ( ay dapat na sarado.

    Ngayon na napag-aralan mo nang kaunti ang pandaigdigang istraktura, maaari kang magpatuloy sa pagtingin sa mga parameter mismo. Walang maraming pandaigdigang opsyon:

    • gumagamit- ang user kung kanino tatakbo ang program.
    • mga proseso ng manggagawa- nagtatakda kung gaano karaming mga proseso ang kailangang ilunsad upang maiparallelize ang program na kailangan mong ilunsad ang hindi hihigit sa mga proseso na mayroon ka. Maaari mong itakda ang parameter sasakyan at pagkatapos ay tutukoy ng programa ang numerong ito mismo.
    • pid= program pid file.
    • worker_rlimit_nofile- nagpapahiwatig ng maximum na bilang ng mga file na maaaring buksan ng program. Kinakalkula bilang mga proseso ng manggagawa * mga koneksyon sa manggagawa* 2.

    Tapos na kami sa mga pandaigdigang opsyon; Higit na mas kawili-wili sa mga tuntunin ng pag-optimize ay ang mga opsyon mula sa seksyon ng mga kaganapan:

    • worker_connections- ang bilang ng mga koneksyon na maaaring iproseso ng programa nang sabay-sabay sa isang proseso. Kung i-multiply natin ang worker_process sa parameter na ito, makukuha natin ang maximum na bilang ng mga user na makakakonekta sa server nang sabay-sabay. Inirerekomenda na itakda ang halaga mula 1024 hanggang 4048.
    • multi_accept- payagan ang pagtanggap ng maraming koneksyon sa parehong oras, i-set ang parameter sa on o off.
    • gamitin- isang paraan upang gumana sa network stack. Ang default ay poll, ngunit sa Linux ay mas mahusay na gumamit ng epoll.
    • sendfile- gamitin ang paraan ng pagpapadala ng data ng sendfile. Naka-on ang halaga.
    • tcp_nodelay, tcp_nopush- magpadala ng mga header at simula ng file sa isang pakete. Naka-on ang halaga.
    • keepalive_timeout- waiting timeout bago isara ang keepalive na koneksyon, ang default ay 65, ngunit maaaring bawasan sa 10 segundo.
    • keepalive_requests- maximum na bilang ng keepalive na koneksyon mula sa isang kliyente, inirerekomenda ang 100.
    • reset_timedout_connection- masira ang mga koneksyon pagkatapos ng timeout. Naka-on ang value.
    • open_file_cache- impormasyon sa cache tungkol sa mga bukas na file. Ang linya ng setting ay ganito ang hitsura: open_file_cache max=200000 inactive=20s; max - maximum na bilang ng mga file sa cache, oras ng pag-cache.
    • open_file_cache_valid- nagsasaad pagkatapos kung anong oras dapat tanggalin ang impormasyon mula sa cache. Halimbawa: open_file_cache_valid 30s;
    • open_file_cache_min_uses- impormasyon sa cache tungkol sa mga file na nabuksan nang hindi bababa sa isang tinukoy na bilang ng beses.
    • open_file_cache_errors- cache ng impormasyon tungkol sa nawawalang mga file, halaga sa.

    Ang mga pangunahing parameter ay nasuri. Tutulungan ka ng mga setting na ito na makakuha ng mas mahusay na performance mula sa nginx. Titingnan namin ang mga seksyon ng server at lokasyon sa pag-set up ng mga virtual host.

    Pagse-set up ng Gzip compression

    Kinakailangan ang pag-compress ng nilalaman upang bawasan ang laki ng data na na-download ng browser. Pinapabilis nito ang pag-load ng site, ngunit nagdaragdag ng karagdagang pag-load sa processor ng server. Upang paganahin ang compression sa seksyong http kailangan mong idagdag ang sumusunod na parameter:

    Ang direktiba na ito ay maaari ding gamitin sa seksyon ng server, pagkatapos ay gagana lamang ito para sa tinukoy na virtual na domain. Susunod, i-configure namin ang mga parameter ng compression gamit ang mga sumusunod na opsyon:

    • gzip_min_length- pinakamababang haba ng pahina sa mga byte kung saan dapat gamitin ang compression, halimbawa, 1000 (1 kb)
    • gzip_proxied- kung ito ay kinakailangan upang i-compress ang mga proxied na kahilingan, ang anumang nagsasabing ang lahat ay kailangang i-compress.
    • gzip_types- mga uri ng mga file na kailangang i-compress, halimbawa: text/plain application/xml application/x-javascript text/javascript text/css text/json;
    • gzip_disable "msie6"- Hindi sinusuportahan ang compression sa IE 6, kaya hindi namin ito pinagana.
    • gzip_comp_level- antas ng compression, magagamit ang mga opsyon mula 1 hanggang 10. 1 - minimum, 10 - maximum na compression.

    Pagse-set up ng mga virtual host

    Tulad ng alam mo, ang isang server ay maaaring mag-host ng maraming mga website. Dumating ang lahat ng kahilingan sa IP ng server, at tinutukoy na ng nginx, batay sa domain, kung anong nilalaman ang kailangang ihatid. Upang malaman ng nginx kung saang domain ito nabibilang, kailangan mong i-configure ang mga virtual host. Ang bawat host ay karaniwang inilalagay sa isang hiwalay na file. Ang configuration ng host ay matatagpuan sa seksyon ng server, ngunit dahil ang lahat ng mga file mula sa mga site-enabled ay na-import sa seksyon ng http, ang logic ng istraktura ng configuration file ay hindi nasira.

    Tingnan natin ang isang halimbawang setup:

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

    • makinig 80- tumutukoy na ang isang koneksyon ay dapat pakinggan sa port 80, maaari ring maglaman ng isang opsyon default-server, na nangangahulugan na ang domain na ito ay mabubuksan kung ang domain ay hindi tinukoy sa kahilingan.
    • ugat /var/www/html- ang direktoryo kung saan matatagpuan ang mga file ng site.
    • index index.html- ang pahinang magbubukas bilang default.
    • server_name- domain name ng site.
    • access_log- isang file para sa pagtatala ng isang log ng mga kahilingan sa server, ay maaaring magamit sa buong mundo sa seksyong http at para sa isang partikular na uri ng file sa lokasyon.
    • error_log- log ng error sa web server, maaaring tumanggap ng karagdagang parameter na nagpapahiwatig ng detalye ng log. babala - maximum, crit - mga kritikal na error lamang.

    Ito ang lahat ng mga pangunahing setting para sa virtual host, pagkatapos nito ay gagana na ito. Ngunit mayroon ding seksyon ng lokasyon, na nagpapahintulot sa iyo na i-configure ang pag-uugali ng server para sa ilang mga direktoryo at file. Ang lokasyon syntax ay:

    address ng lokasyon()

    Ang parehong direktang query tungkol sa root ng server at mga regular na expression ay maaaring gamitin bilang isang address. Upang gumamit ng mga regular na expression, ito ay pinangungunahan ng isang "~" na character. Tingnan natin ang mga halimbawa sa ibaba, ngunit sa ngayon tingnan natin ang mga posibleng direktiba:

    • payagan- payagan ang pag-access sa lokasyon para sa mga gumagamit, lahat - lahat, maaari mo ring tukuyin ang isang ip o subnet.
    • tanggihan- tanggihan ang access sa lokasyon, lahat - para sa lahat.
    • try-files- sinusubukang buksan ang mga file sa isang tiyak na pagkakasunud-sunod, binubuksan ang unang file na natagpuan. Halimbawa, ang konstruksiyon na ito: $uri $uri/index.html $uri.html =404; una nitong sinubukang buksan ang $uri, pagkatapos ay ang index.html, kung hindi natagpuan ang $uri.html, at pagkatapos, kung wala sa mga prepositional na file ang umiiral, nagbibigay ito ng 404 na error.
    • mag-e-expire- nagtatakda ng oras ng pag-cache ng browser para sa ibinigay na elemento, halimbawa, 1d - isang araw, 2h - dalawang oras, 30s - 30 segundo.

    Bilang karagdagan sa mga pangunahing direktiba na ito, ang iba ay maaaring gamitin dito. Para sa higit pang mga detalye, tingnan ang opisyal na dokumentasyon. Tingnan natin ang ilang halimbawa:

    Huwag mag-log favicon:

    lokasyon = /favicon.ico (
    log_not_found off;
    access_log off;
    }

    Tanggihan ang pag-access sa mga file na nagsisimula sa isang tuldok:

    lokasyon ~ /\. (
    tanggihan ang lahat;
    }

    I-cache ang mga regular na file sa loob ng 90 araw:

    lokasyon ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2 |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ (
    access_log off; log_not_found off; mag-e-expire 90d;