nginx
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:
/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:
/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).
/etc/nginx/nginx.conf
Gentoo operációs rendszer alapbeállításauser 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.
/etc/nginx/nginx.conf
Több webhelyes beállításuser 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;
}
/etc/nginx/conf.d/local.conf
Egyszerű hostserver {
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;
}
/etc/nginx/conf.d/local-ssl.conf
Egyszerű SSL hostserver {
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.
/etc/nginx/nginx.conf
PHP 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
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:
/etc/php/fpm-php7.1/fpm.d/www.conf
PHP futtatása UNIX socket támogatássallisten = /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.
/etc/php/fpm-php5.5/php.ini
Időzóna beállítása az php.ini beállításfájlbandate.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)
/etc/nginx/nginx.conf
IP-hozzáférési listák engedélyezése és beállítása a /nginx_status oldalhozhttp {
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.
/etc/nginx/nginx.conf
Felhasználói hitelesítés engedélyezése és beállítása a / helyhezhttp {
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.
/etc/GeoIP.conf
Add your account infoAccountID 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:
/etc/portage/package.use/nginx
Modulok hozzáadása az nginx szoftverhezwww-servers/nginx NGINX_MODULES_HTTP: geo geoip2
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.
/etc/nginx/nginx.conf
Az nginx beállítása a GeoIP2 adatbázisokra és azok értékeirehttp {
...
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.
/etc/nginx/fastcgi.conf
GeoIP2 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.
/etc/portage/make.conf
Harmadik féltől származó modul hozzáadásaNGINX_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
- https://nginx.org/en/docs/beginners_guide.html - Egy nginx kezdőknek szánt útmutató. Hasznos azok számára, akik nem ismerik jól a nginx szoftvert.
- https://nginx.com/resources/admin-guide/ - A nginx adminisztrációs útmutató. Hasznos azoknak a webadminisztrátoroknak, akik már dolgoznak a területen.
- https://wiki.nginx.org/Main - Az nginx Wikipédiája.
- https://github.com/h5bp/server-configs-nginx - H5BP nginx beállítás.