Condivisione della tecnologia

Introduzione e installazione di n1.Nginx

2024-07-12

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

1. Introduzione a Nginx

Sito ufficiale di Nginx: http://nginx.org

Nginx è un server proxy inverso e HTTP gratuito, open source e ad alte prestazioni, un server proxy di posta elettronica e un server proxy TCP/UDP

Altre versioni secondarie di nginx:

  • Motore elettrico

    Un progetto di server web avviato da Taobao. Basato su Nginx, aggiunge molte funzioni e caratteristiche avanzate per soddisfare le esigenze dei siti Web ad alto traffico. Le prestazioni e la stabilità di Tengine sono state ben testate su siti Web di grandi dimensioni come Taobao, Tmall Mall, ecc. Il suo obiettivo finale è creare una piattaforma Web efficiente, stabile, sicura e facile da usare.A partire dal dicembre 2011, Tengine è diventato un progetto open source

    Sito ufficiale: http://tengine.taobao.org/

  • ApriResty

    Piattaforma web ad alte prestazioni basata sul linguaggio Nginx e Lua

    Sito ufficiale: http://openresty.org/cn/

Introduzione alla funzione Nginx

  • Server di risorse Web statico HTML, immagini, js, css, txt e altre risorse statiche

  • Proxy inverso per il protocollo http/https

  • Combinato con FastCGI/uWSGI/SCGI e altri protocolli per invertire le richieste di risorse dinamiche proxy

  • Richiesta di inoltro del protocollo tcp/udp (reverse proxy)

  • Proxy inverso per il protocollo imap4/pop3

Caratteristiche di base

  • Design modulare, buona scalabilità

  • Alta affidabilità

  • Supporta la distribuzione a caldo: aggiorna i file di configurazione, aggiorna le versioni e sostituisci i file di registro senza tempi di inattività

  • Basso consumo di memoria: 10.000 connessioni inattive in modalità di connessione keep-alive richiedono solo 2,5 MB di memoria

  • guidato dagli eventi,aio,mmap,sendfile

Funzioni relative ai servizi Web

  • Host virtuale (server)

  • Supporta connessioni keep-alive e pipeline (utilizzando una connessione per effettuare più richieste)

  • Registro di accesso (supporta il buffering del registro per migliorarne le prestazioni)

  • url riscritto

  • alias del percorso

  • Controllo degli accessi basato su IP e utente

  • Limite di velocità di supporto e limite di concorrenza

  • Riconfigurazione e aggiornamenti online senza interrompere i flussi di lavoro dei clienti

Struttura del processo Nginx

Nginx è un modello organizzativo multiprocesso ed è composto da un processo Master e da un processo Worker.

  • Funzioni del processo principale:

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

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

Introduzione al modulo Nginx

  • Modulo principale: è un modulo essenziale per il normale funzionamento del server Nginx. Fornisce funzioni principali come la registrazione degli errori, l'analisi dei file di configurazione, il meccanismo basato sugli eventi e la gestione dei processi.

  • Modulo HTTP standard: fornisce funzioni relative all'analisi del protocollo HTTP, come: configurazione della porta, impostazioni di codifica della pagina Web, impostazioni dell'intestazione della risposta HTTP, ecc.

  • Modulo HTTP opzionale: utilizzato principalmente per estendere le funzioni HTTP standard in modo che Nginx possa gestire alcuni servizi speciali, come: trasmissione multimediale Flash, analisi delle richieste GeoIP, compressione della trasmissione di rete, supporto del protocollo di sicurezza SSL, ecc.

  • Modulo del servizio di posta: utilizzato principalmente per supportare il servizio di posta Nginx, incluso il supporto per il protocollo POP3, il protocollo IMAP e il protocollo SMTP

  • Modulo del servizio di streaming: implementa la funzione proxy inverso, incluso il proxy del protocollo TCP

  • Modulo di terze parti: serve per estendere l'applicazione server Nginx e completare le funzioni definite dallo sviluppatore, come: supporto Json, supporto Lua, ecc.

2. Installazione di Nginx

Versione Nginx

  • La versione principale è la versione di sviluppo principale, solitamente un numero di versione dispari, come 1.19

  • La versione stabile è l'ultima versione stabile, solitamente una versione con numero pari, come: 1.20

  • Versioni legacy vecchie versioni stabili, solitamente versioni con numeri pari, come: 1.18

Nginx può essere installato utilizzando yum o il codice sorgente, ma si consiglia di utilizzare il codice sorgente per compilare e installare.

  • La versione di yum è più vecchia

  • La compilazione e l'installazione possono semplificare la personalizzazione dei percorsi correlati. L'uso della compilazione del codice sorgente può personalizzare le funzioni correlate, rendendolo più conveniente per l'uso aziendale.

  • Il contenitore Docker viene eseguito direttamente

2.1 Installa Nginx basato su yum
[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 Compilazione e installazione di Nginx

Nginx è scritto in linguaggio C, quindi l'installazione del codice sorgente Nginx richiede la preparazione anticipata di un compilatore standard. Il nome completo di GCC è (GNU Compiler collection). È sviluppato da GNU e concesso in licenza da GPL o LGPL -like, Apple Il compilatore standard per computer Mac OS Per altri linguaggi, è necessario anche lo strumento Automake per completare la creazione automatica di Makefile. Alcuni moduli di Nginx devono fare affidamento su librerie di terze parti, come: pcre (supporta la riscrittura ), zlib (supporta il modulo gzip) e openssl (supporta il modulo ssl), ecc.

Indirizzo di download del pacchetto del codice sorgente ufficiale: 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