nginx

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Nginx and the translation is 100% complete.


Az nginx egy robusztus, kis méretű, nagy teljesítményű webszerver és fordított proxy szerver. Jó alternatívát jelent a népszerű webszerverek, például az Apache és a lighttpd számára.

Telepítés

Mielőtt azonnal telepítené a www-servers/nginx szoftvercsomagot, először alaposan nézze át az Nginx USE jelölőzászlóit.

Kibővített USE jelölőzászlók

Az nginx modulokat használ a funkcióinak a bővítésére. Ennek a moduláris megközelítésnek a karbantartásának egyszerűsítése érdekében az nginx ebuild kibővített USE jelölőzászlókat (USE_EXPAND) alkalmaz, amelyek meghatározzák, hogy mely modulokat kell telepíteni.

  • HTTP protokollal kapcsolatos modulok az NGINX_MODULES_HTTP változón keresztül engedélyezhetők.
  • Levelezéssel kapcsolatos modulok az NGINX_MODULES_MAIL változón keresztül engedélyezhetők.
  • Harmadik felektől származó modulok az NGINX_ADD_MODULES változón keresztül engedélyezhetők.

Ezeket a változókat a /etc/portage/make.conf fájlban kell beállítani. Leírásuk megtalálható a következő helyeken: /var/db/repos/gentoo/profiles/desc/nginx_modules_http.desc és /var/db/repos/gentoo/profiles/desc/nginx_modules_mail.desc.

Például a fastcgi modul engedélyezéséhez:

FILE /etc/portage/make.conf
NGINX_MODULES_HTTP="fastcgi"

A fentiek felülírják az NGINX_MODULES_HTTP alapértelmezett értékét, és fastcgi értékre állítják. Ha a fastcgi modult úgy szeretné engedélyezni, hogy ne írja felül az alapértelmezett NGINX_MODULES_HTTP értéket, akkor a következő USE jelölőzászló jelölést lehet megadni a /etc/portage/package.use fájlban:

FILE /etc/portage/package.use
www-servers/nginx NGINX_MODULES_HTTP: fastcgi

USE jelölőzászlók

USE flags for www-servers/nginx Robust, small and high performance http and reverse proxy server

+http Enable HTTP core support
+http-cache Enable HTTP cache support
+http2 Enable HTTP2 module support
+pcre2 Enable support for pcre2
aio Enables file AIO support
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
http3 Enable HTTP3 module support
ktls Enable Kernel TLS offload (kTLS)
libatomic Use libatomic instead of builtin atomic operations
pcre Add support for Perl Compatible Regular Expressions
pcre-jit Enable JIT for pcre
rtmp NGINX-based Media Streaming Server
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
ssl Enable HTTPS module for http. Enable SSL/TLS support for POP3/IMAP/SMTP for mail.
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
threads Add threads support for various packages. Usually pthreads
vim-syntax Pulls in related vim syntax scripts

Emerge

A USE jelölőzászlók beállítása után telepítse a www-servers/nginx szoftvercsomagot:

root #emerge --ask www-servers/nginx

Telepítés ellenőrzése

Az alapértelmezett Nginx beállítás egy virtuális szervert határoz meg, amelynek gyökérkönyvtára a /var/www/localhost/htdocs. Azonban a bug #449136 miatt az Nginx ebuild csak a /var/www/localhost könyvtárat hozza létre, indexfájl nélkül. Az alapértelmezett beállítás működőképessétételéhez hozza létre a /var/www/localhost/htdocs könyvtárat és egy egyszerű indexfájlt.

root #mkdir /var/www/localhost/htdocs
root #echo 'Helló, világ!' > /var/www/localhost/htdocs/index.html

Az nginx szoftvercsomag egy init szolgáltatási szkriptet telepít, amely lehetővé teszi a rendszergazdák számára a szolgáltatás leállítását, elindítását vagy újraindítását. Futtassa a következő parancsot az nginx szolgáltatás elindításához:

root #/etc/init.d/nginx start

Az nginx megfelelő működésének ellenőrzéséhez nyissa meg a webböngészőt, és navigáljon a http://localhost címre, vagy használjon egy parancssoros webes eszközt, például a curl szoftvert.

user $curl http://localhost

Beállítás

Az nginx beállítását a /etc/nginx/nginx.conf fájl kezeli.

Egyetlen webhely elérése

A következő példa egyetlen webhely elérését mutatja, dinamikus képességek nélkül (például PHP nélkül).

FILE /etc/nginx/nginx.confGentoo operációs rendszer alapbeállítása
user nginx nginx;
worker_processes 1;

error_log /var/log/nginx/error_log info;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';

    client_header_timeout 10m;
    client_body_timeout 10m;
    send_timeout 10m;

    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 2k;
    request_pool_size 4k;

    gzip off;

    output_buffers 1 32k;
    postpone_output 1460;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 75 20;

    ignore_invalid_headers on;

    index index.html;

    server {
        listen 127.0.0.1;
        server_name localhost;

        access_log /var/log/nginx/localhost.access_log main;
        error_log /var/log/nginx/localhost.error_log info;

        root /var/www/localhost/htdocs;
    }
}

Több webhely elérése

Lehetséges az include direktíva használata a beállítás több fájlra való felosztásához.

FILE /etc/nginx/nginx.confTöbb webhelyes beállítás
user nginx nginx;
worker_processes 1;

error_log /var/log/nginx/error_log info;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';

    client_header_timeout 10m;
    client_body_timeout 10m;
    send_timeout 10m;

    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 2k;
    request_pool_size 4k;

    gzip off;

    output_buffers 1 32k;
    postpone_output 1460;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 75 20;

    ignore_invalid_headers on;

    index index.html;

    include /etc/nginx/conf.d/*.conf;
}
FILE /etc/nginx/conf.d/local.confEgyszerű host
server {
    listen 127.0.0.1;
    server_name localhost;

    access_log /var/log/nginx/localhost.access_log main;
    error_log /var/log/nginx/localhost.error_log info;

    root /var/www/localhost/htdocs;
}
FILE /etc/nginx/conf.d/local-ssl.confEgyszerű SSL host
server {
    listen 443 ssl;
    server_name host.tld;
    ssl_certificate /etc/ssl/nginx/host.tld.pem;
    ssl_certificate_key /etc/ssl/nginx/host.tld.key;
}

PHP támogatás

Adja hozzá a következő sorokat az nginx beállításhoz a PHP támogatás engedélyezéséhez. Ebben a példában az nginx egy UNIX socket-en keresztül kommunikál a PHP folyamattal.

FILE /etc/nginx/nginx.confPHP támogatás engedélyezése
...
http {
...
    server {
    ...
        location ~ \.php$ {
            # Tesztelje a nem létező szkripteket, vagy adjon 404-es hibát.
            # Ha ez a sor nincs, akkor az nginx vakon továbbad minden .php végződésű kérést a php-fpm folyamatkezelőhöz.
            try_files $uri =404;
            include /etc/nginx/fastcgi.conf;
            fastcgi_pass unix:/run/php-fpm.socket;
        }
    }
}

Ennek a beállításnak a támogatásához a PHP szoftvercsomagot a FastCGI Process Manager támogatással kell felépíteni a forráskódból (dev-lang/php), amelyet az fpm USE jelölőzászló kezel.

root #echo "dev-lang/php fpm" >> /etc/portage/package.use

Forráskódból hozza újból létre a PHP futtatható szoftvert az fpm USE jelölőzászló engedélyezésével.

root #emerge --ask dev-lang/php
Note
A UNIX socket beállításnak a használata az előnyben részesített és ajánlott beállítás.

PHP 7.0 és újabb PHP verziók esetén használja a következő beállítást:

FILE /etc/php/fpm-php7.1/fpm.d/www.confPHP futtatása UNIX socket támogatással
listen = /run/php-fpm.socket
listen.owner = nginx

Állítsa be az időzónát a php-fpm php.ini fájlban. Cserélje ki a <RAKJA_IDE_AZ_IDŐZÓNÁT> szöveget az alábbi FileBoxban a megfelelő időzóna információval.

FILE /etc/php/fpm-php5.5/php.iniIdőzóna beállítása az php.ini beállításfájlban
date.timezone = <RAKJA_IDE_AZ_IDŐZÓNÁT>

Indítsa el a php-fpm szolgáltatást:

root #/etc/init.d/php-fpm start

Adja hozzá a php-fpm szolgáltatást az alapértelmezett futási szinthez:

root #rc-update add php-fpm default

Töltse be újra a nginx szolgáltatást a módosított beállítással:

root #/etc/init.d/nginx reload

Amennyiben Ön a systemd init rendszert használja, akkor a következőket kell elvégeznie:

root #systemctl enable php-fpm@7.1
root #systemctl start php-fpm@7.1

IP-cím hozzáférési lista

A következő példa bemutatja, hogy miként lehet egy adott URL-hez (ebben az esetben /nginx_status) való hozzáférést csak bizonyos IP-címekhez korlátozni.

  • bizonyos számítógépek (például 192.0.2.1 127.0.0.1)
  • és IP-hálózatok (például 198.51.100.0/24)
FILE /etc/nginx/nginx.confIP-hozzáférési listák engedélyezése és beállítása a /nginx_status oldalhoz
http {
    server {
        location /nginx_status {
            stub_status on;
            allow 127.0.0.1/32;
            allow 192.0.2.1/32;
            allow 198.51.100.0/24;
            deny all;
        }
    }
}

Alapvető hitelesítés

Az nginx lehetővé teszi az erőforrásokhoz való hozzáférés korlátozását a felhasználónév és jelszó ellenőrzésével.

FILE /etc/nginx/nginx.confFelhasználói hitelesítés engedélyezése és beállítása a / helyhez
http {
    server {
        location / {
            auth_basic "Authentication failed";
            auth_basic_user_file conf/htpasswd;
        }
    }
}

A htpasswd fájl létrehozható az alábbi módon:

user $openssl passwd

Földrajzi helymeghatározás (geolokáció) az GeoIP2 segítségével

A GeoIP2 modul a GeoIP2 adatbázisokat használja, például a Maxmind vagy hasonló szolgáltatásokat. A Maxmind már támogatva van a Gentoo operációs rendszeren a net-misc/geoipupdate szoftvercsomagon keresztül. Azonban egy felhasználói fiók regisztrációja szükséges ahhoz, hogy egy ingyenes licenckulcsot lehessen igényelni és le lehessen tölteni az ingyenes adatbázist.

Maxmind GeoIP2 adatbázisok letöltése

Miután a fiók létrejött, telepítse és állítsa be a geoipupdate nevű szoftvert.

root #emerge --ask net-misc/geoipupdate

Adja meg a felhasználói fiókhoz tartozó felhasználói adatokat és a licenckulcsot.

FILE /etc/GeoIP.confAdd your account info
AccountID YOURID
LicenseKey YOURKEY
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

Ezt követően le kell töltenie az adatbázisokat:

root #geoipupdate

Annak érdekében, hogy a frissítéseket automatikusan megkapja a jövőben, adja hozzá ezt a parancsot egy heti cron feladathoz vagy egy systemd időzítőhöz.

GeoIP2 támogatás hozzáadása a nginx szoftverhez

A modulok engedélyezéséhez és az nginx forráskódból történő újbóli létrehozásához:

FILE /etc/portage/package.use/nginxModulok hozzáadása az nginx szoftverhez
www-servers/nginx NGINX_MODULES_HTTP: geo geoip2
Note
A geoip modul csak a GeoIP régi adatbázist támogatja.

A forráskódból hozza létre újból az nginx szoftvert a harmadik fél által biztosított modulok engedélyezésével:

root #emerge --ask www-servers/nginx

Miután a futtatható nginx újból felépült a forráskódból, irányítsa az nginx szoftvert az adatbázisokra és a GeoIP2 változókra.

FILE /etc/nginx/nginx.confAz nginx beállítása a GeoIP2 adatbázisokra és azok értékeire
http {
...
    geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
        auto_reload 5m;
        $geoip2_metadata_city_build metadata build_epoch;
        $geoip2_data_city_name city names en;
        $geoip2_data_city_geonameid city geoname_id;
        $geoip2_data_continent_code continent code;
        $geoip2_data_continent_geonameid continent geoname_id;
        $geoip2_data_continent_name continent names en;
        $geoip2_data_country_geonameid country geoname_id;
        $geoip2_data_country_code iso_code;
        $geoip2_data_country_name names en;
        $geoip2_data_country_is_eu is_in_european_union;
        $geoip2_data_location_accuracyradius location accuracy_radius;
        $geoip2_data_location_latitude location latitude;
        $geoip2_data_location_longitude location longitude;
        $geoip2_data_location_metrocode location metro_code;
        $geoip2_data_location_timezone location time_zone;
        $geoip2_data_postal_code postal code;
        $geoip2_data_rcountry_geonameid registered_country geoname_id;
        $geoip2_data_rcountry_iso registered_country iso_code;
        $geoip2_data_rcountry_name registered_country names en;
        $geoip2_data_rcountry_is_eu registered_country is_in_european_union;
        $geoip2_data_region_geonameid subdivisions 0 geoname_id;
        $geoip2_data_region_iso subdivisions 0 iso_code;
        $geoip2_data_region_name subdivisions 0 names en;
    }

    geoip2 /usr/share/GeoIP/GeoLite2-ASN.mmdb {
        auto_reload 5m;
        $geoip2_data_autonomous_system_number autonomous_system_number;
        $geoip2_data_autonomous_system_organization autonomous_system_organization;
    }
...
}

Az auto_reload opció lehetővé teszi az adatbázis frissítését az nginx újraindítása nélkül.

Ahhoz, hogy a GeoIP2 értékek megjelenjenek egy PHP alkalmazásban, rendelje hozzájuk a fastcgi_param értékeket.

FILE /etc/nginx/fastcgi.confGeoIP2 támogatás hozzáadása a PHP szoftverhez
...
fastcgi_param GEOIP2_CITY_BUILD_DATE $geoip2_metadata_city_build;
fastcgi_param GEOIP2_CITY $geoip2_data_city_name;
fastcgi_param GEOIP2_CITY_GEONAMEID $geoip2_data_city_geonameid;
fastcgi_param GEOIP2_CONTINENT_CODE $geoip2_data_continent_code;
fastcgi_param GEOIP2_CONTINENT_GEONAMEID $geoip2_data_continent_geonameid;
fastcgi_param GEOIP2_CONTINENT_NAME $geoip2_data_continent_name;
fastcgi_param GEOIP2_COUNTRY_GEONAMEID $geoip2_data_country_geonameid;
fastcgi_param GEOIP2_COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param GEOIP2_COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param GEOIP2_COUNTRY_IN_EU $geoip2_data_country_is_eu;
fastcgi_param GEOIP2_LOCATION_ACCURACY_RADIUS $geoip2_data_location_accuracyradius;
fastcgi_param GEOIP2_LATITUDE $geoip2_data_location_latitude;
fastcgi_param GEOIP2_LONGITUDE $geoip2_data_location_longitude;
fastcgi_param GEOIP2_LOCATION_METROCODE $geoip2_data_location_metrocode;
fastcgi_param GEOIP2_LOCATION_TIMEZONE $geoip2_data_location_timezone;
fastcgi_param GEOIP2_POSTAL_CODE $geoip2_data_postal_code;
fastcgi_param GEOIP2_REGISTERED_COUNTRY_GEONAMEID $geoip2_data_rcountry_geonameid;
fastcgi_param GEOIP2_REGISTERED_COUNTRY_ISO $geoip2_data_rcountry_iso;
fastcgi_param GEOIP2_REGISTERED_COUNTRY_NAME $geoip2_data_rcountry_name;
fastcgi_param GEOIP2_REGISTERED_COUNTRY_IN_EU $geoip2_data_rcountry_is_eu;
fastcgi_param GEOIP2_REGION_GEONAMEID $geoip2_data_region_geonameid;
fastcgi_param GEOIP2_REGION $geoip2_data_region_iso;
fastcgi_param GEOIP2_REGION_NAME $geoip2_data_region_name;

fastcgi_param GEOIP2_ASN $geoip2_data_autonomous_system_number;
fastcgi_param GEOIP2_ASN_ORG $geoip2_data_autonomous_system_organization;

Harmadik féltől származó modulok

Töltse le a harmadik fél által készített modul forráskódját, és helyezze át a /usr/src könyvtárba. A forráskódból kézzel fordítsa le a kiválasztott nginx modult, majd adja hozzá a következő sort a /etc/portage/make.conf fájlban.

FILE /etc/portage/make.confHarmadik féltől származó modul hozzáadása
NGINX_ADD_MODULES="/usr/src/nginxmodule"

A forráskód lefordítása által újból hozza létre az nginx szoftvert úgy, hogy a harmadik fél által készített modul engedélyezve legyen.

root #emerge --ask www-servers/nginx

Használat

Szolgáltatás vezérlése

OpenRC

Indítsa el az nginx webszervert:

root #rc-service nginx start

Állítsa le az Nginx webszervert:

root #rc-service nginx stop

Adja hozzá az nginx szoftvert az alapértelmezett futási szinthez, hogy a szolgáltatás automatikusan elinduljon az operációs rendszer újraindításakor.

root #rc-update add nginx default

Töltse be újra az nginx beállítását anélkül, hogy a kapcsolatok megszakadnának.

root #rc-service nginx reload

Indítsa újra az nginx szolgáltatást:

root #rc-service nginx restart

systemd

Indítsa el az nginx webszervert:

root #systemctl start nginx

Állítsa le az nginx webszervert:

root #systemctl stop nginx

Ellenőrizze a szolgáltatás állapotát:

root #systemctl status nginx

Engedélyezze a szolgáltatás automatikus elindítását az operációs rendszer újraindításakor.

root #systemctl enable nginx

Töltse be újra az nginx beállítását anélkül, hogy a kapcsolatok megszakadnának.

root #systemctl reload nginx

Az nginx szolgáltatás újraindítása:

root #systemctl restart nginx

Hibaelhárítás

Probléma esetén a következő parancsok segíthetnek a hibaelhárításban.

Beállítás érvényesítése

Ellenőrizze, hogy a futó nginx beállításban nincsenek-e hibák.

root #/usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ha nginx parancsot futtatja a -t opcióval, akkor az ellenőrzi a beállításfájlt anélkül, hogy ténylegesen elindítaná a nginx szolgáltatást. Használja a -c opciót a fájl teljes elérési útjával, hogy a beállításfájlokat nem az alapértelmezett helyeken tesztelje.

Ellenőrizze, hogy a folyamatok futnak-e

Ellenőrizze, hogy a nginx folyamatok futnak-e.

user $ps aux | egrep 'nginx|PID'
  PID TTY      STAT   TIME COMMAND
26092 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
26093 ?        S      0:00 nginx: worker proces

Ellenőrizze a kötött címeket és portokat

Ellenőrizze, hogy az nginx szolgáltatás a megfelelő TCP porton figyel-e (például 80 a HTTP protokollhoz vagy 443 a HTTPS protokollhoz).

root #ss -tulpn | grep :80
tcp   LISTEN 0      0          0.0.0.0:80         0.0.0.0:*    users:(("nginx",pid=6253,fd=52),("nginx",pid=6252,fd=52))

További olvasnivaló a témában

  • Apache — egy hatékony, bővíthető web server. Ez az egyik legnépszerűbb internetes webszerver.
  • Lighttpd — egy gyors, könnyűsúlyú, kevés erőforrást igénylő webszerver.

Külső források