Teknologian jakaminen

n1.Nginx käyttöönotto ja asennus

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Nginxin esittely

Nginxin virallinen verkkosivusto: http://nginx.org

Nginx on ilmainen, avoimen lähdekoodin, korkean suorituskyvyn HTTP- ja käänteinen välityspalvelin, sähköpostin välityspalvelin ja TCP/UDP-välityspalvelin

Muut nginxin toissijaiset julkaisut:

  • Tengine

    Taobaon käynnistämä verkkopalvelinprojekti. Nginxiin perustuen se lisää monia edistyneitä toimintoja ja ominaisuuksia vastaamaan suuren liikenteen verkkosivustojen tarpeisiin. Tenginen suorituskyky ja vakaus on testattu hyvin suurilla verkkosivustoilla, kuten Taobao, Tmall Mall jne. Sen perimmäisenä tavoitteena on luoda tehokas, vakaa, turvallinen ja helppokäyttöinen verkkoalusta.Joulukuusta 2011 alkaen Tenginestä tuli avoimen lähdekoodin projekti

    Virallinen verkkosivusto: http://tengine.taobao.org/

  • OpenResty

    Tehokas verkkoalusta, joka perustuu Nginx- ja Lua-kieleen

    Virallinen verkkosivusto: http://openresty.org/cn/

Nginx-toiminnon esittely

  • Staattinen verkkoresurssipalvelin html, kuvat, js, css, txt ja muut staattiset resurssit

  • Käänteinen välityspalvelin http/https-protokollalle

  • Yhdistetty FastCGI/uWSGI/SCGI ja muihin protokolliin dynaamisten välityspalvelinpyyntöjen kääntämiseksi

  • Pyydä tcp/udp-protokollan edelleenlähetystä (käänteinen välityspalvelin)

  • Käänteinen välityspalvelin imap4/pop3-protokollalle

Perusominaisuudet

  • Modulaarinen rakenne, hyvä skaalautuvuus

  • Korkea luotettavuus

  • Tuki kuumakäyttöönottoa: päivitä määritystiedostoja, päivitä versioita ja vaihda lokitiedostot ilman seisokkeja

  • Alhainen muistinkulutus: 10 000 ei-aktiivista yhteyttä säilytysyhteystilassa vaatii vain 2,5 M muistia

  • tapahtumapohjainen, aio, mmap, lähetä tiedosto

Verkkopalveluun liittyvät toiminnot

  • Virtuaalinen isäntä (palvelin)

  • Tukee hengissäpito- ja putkiyhteyksiä (yhdellä yhteydellä useiden pyyntöjen tekemiseen)

  • Käyttöloki (tukee lokin puskurointia suorituskyvyn parantamiseksi)

  • URL-osoitteen uudelleenkirjoitus

  • polun alias

  • IP- ja käyttäjäpohjainen kulunvalvonta

  • Tukinopeusraja ja samanaikaisuusraja

  • Uudelleenkonfigurointi ja online-päivitykset keskeyttämättä asiakkaan työnkulkua

Nginx-prosessin rakenne

Nginx on monen prosessin organisaatiomalli, ja se koostuu Master-prosessista ja Worker-prosessista.

  • Pääprosessin toiminnot:

    对外接口:接收外部的操作(信号)
    对内转发:根据外部的操作的不同,通过信号管理 Worker
    监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
    读取Nginx 配置文件并验证其有效性和正确性
    建立、绑定和关闭socket连接
    按照配置生成、管理和结束工作进程
    接受外界指令,比如重启、升级及退出服务器等指令
    不中断服务,实现平滑升级,重启服务并应用新的配置
    开启日志文件,获取文件描述符
    不中断服务,实现平滑升级,升级失败进行回滚处理
    编译和处理perl脚本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • Työntekijäprosessin toiminnot:

    所有 Worker 进程都是平等的
    实际处理:网络请求,由 Worker 进程处理
    Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,
    增加上下文切换的损耗
    接受处理客户的请求
    将请求依次送入各个功能模块进行处理
    I/O调用,获取响应数据
    与后端服务器通信,接收后端服务器的处理结果
    缓存数据,访问缓存索引,查询和调用缓存数据
    发送请求结果,响应客户的请求
    接收主程序指令,比如重启、升级和退出等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

Nginx-moduulin esittely

  • Ydinmoduuli: Se on olennainen moduuli Nginx-palvelimen normaalille toiminnalle. Se tarjoaa ydintoimintoja, kuten virheiden kirjaamisen, määritystiedostojen jäsentämisen, tapahtumapohjaisen mekanismin ja prosessinhallinnan.

  • Normaali HTTP-moduuli: Tarjoaa HTTP-protokollan jäsentämiseen liittyviä toimintoja, kuten: portin määritys, verkkosivun koodausasetukset, HTTP-vastauksen otsikkoasetukset jne.

  • Valinnainen HTTP-moduuli: Käytetään pääasiassa tavallisten HTTP-toimintojen laajentamiseen, jotta Nginx pystyy käsittelemään joitain erikoispalveluita, kuten: Flash-multimedian lähetys, GeoIP-pyyntöjen jäsentäminen, verkkolähetyksen pakkaus, suojausprotokollan SSL-tuki jne.

  • Postipalvelumoduuli: Käytetään pääasiassa Nginx-sähköpostipalvelun tukemiseen, mukaan lukien tuki POP3-protokollalle, IMAP-protokollalle ja SMTP-protokollalle

  • Stream-palvelumoduuli: toteuttaa käänteisen välityspalvelimen, mukaan lukien TCP-protokollan välityspalvelimen

  • Kolmannen osapuolen moduuli: laajentaa Nginx-palvelinsovellusta ja täydentää kehittäjän määrittämiä toimintoja, kuten: Json-tuki, Lua-tuki jne.

2. Nginx-asennus

Nginx versio

  • Pääversio on tärkein kehitysversio, yleensä pariton versionumero, kuten 1.19

  • Vakaa versio on viimeisin vakaa versio, yleensä parillinen versio, kuten: 1.20

  • Vanhat versiot vanhat vakaat versiot, yleensä parilliset versiot, kuten: 1.18

Nginx voidaan asentaa käyttämällä yumia tai lähdekoodia, mutta on suositeltavaa käyttää lähdekoodia kääntämiseen ja asentamiseen.

  • Yumin versio on vanhempi

  • Kääntäminen ja asentaminen voi helpottaa liittyvien polkujen mukauttamista Lähdekoodin käännöksen avulla voidaan mukauttaa liittyviä toimintoja, mikä tekee siitä mukavampaa yrityskäyttöön.

  • Docker-kontti kulkee suoraan

2.1 Asenna Nginx yumiin perustuen
[root@Rocky8 ~]#vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[root@Rocky8 ~]#yum -y install nginx
[root@Rocky8 ~]#rpm -q nginx
nginx-1.26.1-2.el8.ngx.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
2.2 Nginx-kääntäminen ja asennus

Nginx on kirjoitettu C-kielellä, joten Nginxin lähdekoodin asennus vaatii etukäteen valmistelevan kääntäjän -kuten Apple Tavallinen kääntäjä tietokoneelle Mac OS Muilla kielillä Automake-työkalua tarvitaan myös Makefilen automaattiseen luomiseen. Jotkut Nginxin moduulit tarvitsevat kolmannen osapuolen kirjastoja, kuten: pcre (tukee uudelleenkirjoitusta. ), zlib (tukee gzip-moduulia) ja openssl (tukee ssl-moduulia) jne.

Virallinen lähdekoodipaketin latausosoite: https://nginx.org/en/download.html

# 安装依赖包
[root@Ubuntu2204 ~]#apt update
[root@Ubuntu2204 ~]#apt -y install gcc make libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev

[root@Ubuntu2204 ~]#useradd -r -s /sbin/nologin nginx
[root@Ubuntu2204 ~]#cd /usr/local/src/
[root@Ubuntu2204 src]#wget https://nginx.org/download/nginx-1.22.1.tar.gz
[root@Ubuntu2204 src]#tar xf nginx-1.22.1.tar.gz
[root@Ubuntu2204 src]#cd nginx-1.22.1/
[root@Ubuntu2204 nginx-1.22.1]#./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
[root@Ubuntu2204 nginx-1.22.1]#make && make install
[root@Ubuntu2204 nginx-1.22.1]#chown -R nginx.nginx /apps/nginx
[root@Ubuntu2204 nginx-1.22.1]#ln -s /apps/nginx/sbin/nginx /usr/sbin/

# 启动nginx
[root@Ubuntu2204 nginx-1.22.1]#cd
[root@Ubuntu2204 ~]#nginx 
[root@Ubuntu2204 ~]#ss -nlt

# 关闭nginx
[root@Ubuntu2204 ~]#nginx -s stop
[root@Ubuntu2204 ~]#ss -nlt

# 创建 Nginx 自启动文件
复制同一版本的nginx的yum安装生成的service文件
[root@Ubuntu2204 ~]#vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

# 创建pid文件存放的目录
[root@Ubuntu2204 ~]#mkdir /apps/nginx/run/

# 修改配置文件
[root@Ubuntu2204 ~]#vim /apps/nginx/conf/nginx.conf
pid         /apps/nginx/run/nginx.pid;

# 验证 Nginx 自启动文件
[root@Ubuntu2204 ~]#systemctl daemon-reload
[root@Ubuntu2204 ~]#systemctl enable --now nginx.service 
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
[root@Ubuntu2204 ~]#ll /apps/nginx/run/
-rw-r--r--  1 root  root     6 Jul 11 09:45 nginx.pid
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         511                0.0.0.0:80               0.0.0.0:*                 
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*                 
LISTEN    0         128                   [::]:22                  [::]:*                 
[root@Ubuntu2204 ~]#systemctl stop nginx.service 
[root@Ubuntu2204 ~]#systemctl status nginx.service
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*                 
LISTEN    0         128                   [::]:22                  [::]:*                 

# 验证 Nginx 自启动
[root@Ubuntu2204 ~]#reboot
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         511                0.0.0.0:80               0.0.0.0:*                 
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*  
[root@Ubuntu2204 ~]#systemctl status nginx.service 
● nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-07-11 09:48:58 CST; 1min 5s ago
       Docs: https://nginx.org/en/docs/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83