Technologieaustausch

Einführung und Installation von n1.Nginx

2024-07-12

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

1. Einführung in Nginx

Offizielle Nginx-Website: http://nginx.org

Nginx ist ein kostenloser, Open-Source-Hochleistungs-HTTP- und Reverse-Proxy-Server, E-Mail-Proxy-Server und TCP/UDP-Proxy-Server

Andere sekundäre Versionen von Nginx:

  • Tengine

    Ein von Taobao initiiertes Webserverprojekt. Basierend auf Nginx fügt es viele erweiterte Funktionen und Features hinzu, um den Anforderungen stark frequentierter Websites gerecht zu werden. Die Leistung und Stabilität von Tengine wurden auf großen Websites wie Taobao, Tmall Mall usw. gut getestet. Das oberste Ziel besteht darin, eine effiziente, stabile, sichere und benutzerfreundliche Webplattform zu schaffen.Ab Dezember 2011 wurde Tengine ein Open-Source-Projekt

    Offizielle Website: http://tengine.taobao.org/

  • OpenResty

    Hochleistungs-Webplattform basierend auf der Nginx- und Lua-Sprache

    Offizielle Website: http://openresty.org/cn/

Einführung in die Nginx-Funktion

  • Statischer Webressourcenserver HTML, Bilder, JS, CSS, TXT und andere statische Ressourcen

  • Reverse-Proxy für das http/https-Protokoll

  • Kombiniert mit FastCGI/uWSGI/SCGI und anderen Protokollen, um dynamische Proxy-Ressourcenanforderungen umzukehren

  • Anforderungsweiterleitung des TCP/UDP-Protokolls (Reverse-Proxy)

  • Reverse-Proxy für das imap4/pop3-Protokoll

Grundfunktionen

  • Modularer Aufbau, gute Skalierbarkeit

  • Hohe Zuverlässigkeit

  • Unterstützen Sie die Hot-Bereitstellung: Aktualisieren Sie Konfigurationsdateien, aktualisieren Sie Versionen und ersetzen Sie Protokolldateien ohne Ausfallzeiten

  • Geringer Speicherverbrauch: 10.000 inaktive Verbindungen im Keep-Alive-Verbindungsmodus erfordern nur 2,5 MB Speicher

  • ereignisgesteuert, aio, mmap, sendfile

Webdienstbezogene Funktionen

  • Virtueller Host (Server)

  • Unterstützt Keep-Alive- und Pipeline-Verbindungen (Verwendung einer Verbindung, um mehrere Anfragen zu stellen)

  • Zugriffsprotokoll (unterstützt Protokollpufferung zur Verbesserung der Leistung)

  • URL umschreiben

  • Pfad-Alias

  • IP- und benutzerbasierte Zugriffskontrolle

  • Unterstützungsratenlimit und Parallelitätslimit

  • Neukonfiguration und Online-Upgrades ohne Unterbrechung der Kundenabläufe

Nginx-Prozessstruktur

Nginx ist ein Multiprozess-Organisationsmodell und besteht aus einem Master-Prozess und einem Worker-Prozess.

  • Funktionen des Masterprozesses:

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

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

Einführung in das Nginx-Modul

  • Kernmodul: Es ist ein wesentliches Modul für den normalen Betrieb des Nginx-Servers. Es bietet Kernfunktionen wie Fehlerprotokollierung, Analyse von Konfigurationsdateien, ereignisgesteuerte Mechanismen und Prozessverwaltung.

  • Standard-HTTP-Modul: Bietet Funktionen im Zusammenhang mit der Analyse des HTTP-Protokolls, z. B. Portkonfiguration, Einstellungen für die Webseitenkodierung, Einstellungen für HTTP-Antwortheader usw.

  • Optionales HTTP-Modul: Wird hauptsächlich zur Erweiterung der Standard-HTTP-Funktionen verwendet, sodass Nginx einige spezielle Dienste verarbeiten kann, z. B. Flash-Multimedia-Übertragung, Analyse von GeoIP-Anforderungen, Komprimierung der Netzwerkübertragung, Unterstützung des Sicherheitsprotokolls SSL usw.

  • Mail-Service-Modul: Wird hauptsächlich zur Unterstützung des Nginx-Mail-Dienstes verwendet, einschließlich der Unterstützung des POP3-Protokolls, des IMAP-Protokolls und des SMTP-Protokolls

  • Stream-Service-Modul: Implementiert die Reverse-Proxy-Funktion, einschließlich TCP-Protokoll-Proxy

  • Modul von Drittanbietern: dient der Erweiterung der Nginx-Serveranwendung und der Vervollständigung entwicklerdefinierter Funktionen, z. B. Json-Unterstützung, Lua-Unterstützung usw.

2. Nginx-Installation

Nginx-Version

  • Die Hauptversion ist die Hauptentwicklungsversion, normalerweise eine ungerade Versionsnummer, z. B. 1.19

  • Die stabile Version ist die neueste stabile Version, normalerweise eine Version mit gerader Nummer, wie zum Beispiel: 1.20

  • Legacy-Versionen alte stabile Versionen, normalerweise Versionen mit gerader Nummer, wie zum Beispiel: 1.18

Nginx kann mit yum oder Quellcode installiert werden, es wird jedoch empfohlen, zum Kompilieren und Installieren den Quellcode zu verwenden.

  • Die Version von yum ist älter

  • Durch das Kompilieren und Installieren können verwandte Pfade einfacher angepasst werden. Mithilfe der Quellcodekompilierung können verwandte Funktionen angepasst werden, was die Geschäftsnutzung erleichtert.

  • Der Docker-Container wird direkt ausgeführt

2.1 Installieren Sie Nginx basierend auf 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 Nginx-Kompilierung und Installation

Nginx ist in der Sprache C geschrieben, daher erfordert die Installation des Nginx-Quellcodes im Voraus die Vorbereitung eines Standard-Compilers. Der vollständige Name von GCC ist (GNU Compiler Collection). Es ist ein kostenloses UNIX -like, Apple Der Standard-Compiler für den Computer Mac OS Für andere Sprachen wird auch das Automake-Tool benötigt, um die automatische Erstellung von Makefile abzuschließen. Einige Module von Nginx müssen auf Bibliotheken von Drittanbietern angewiesen sein, wie zum Beispiel: pcre (unterstützt das Umschreiben ), zlib (unterstützt das gzip-Modul) und openssl (unterstützt das SSL-Modul) usw.

Offizielle Download-Adresse des Quellcodepakets: 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