Berbagi teknologi

n1.Nginx pengenalan dan instalasi

2024-07-12

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

1. Pengantar Nginx

Situs web resmi Nginx: http://nginx.org

Nginx adalah server proxy terbalik dan HTTP gratis, sumber terbuka, berkinerja tinggi, server proxy email, dan server proxy TCP/UDP

Rilis sekunder nginx lainnya:

  • Tengin

    Sebuah proyek server web yang diprakarsai oleh Taobao. Berdasarkan Nginx, ia menambahkan banyak fungsi dan fitur canggih untuk memenuhi kebutuhan situs web dengan lalu lintas besar. Kinerja dan stabilitas Tengine telah diuji dengan baik di situs besar seperti Taobao, Tmall Mall, dll. Tujuan utamanya adalah menciptakan platform Web yang efisien, stabil, aman, dan mudah digunakan.Mulai bulan Desember 2011, Tengine menjadi proyek open source

    Situs web resmi: http://tengine.taobao.org/

  • BukaResty

    Platform web berkinerja tinggi berdasarkan bahasa Nginx dan Lua

    Situs web resmi: http://openresty.org/cn/

Pengenalan fungsi Nginx

  • Server sumber daya web statis html, gambar, js, css, txt, dan sumber daya statis lainnya

  • Proksi terbalik untuk protokol http/https

  • Dikombinasikan dengan FastCGI/uWSGI/SCGI dan protokol lain untuk membalikkan permintaan sumber daya dinamis proxy

  • Permintaan penerusan protokol tcp/udp (proxy terbalik)

  • Membalikkan proksi untuk protokol imap4/pop3

Fitur dasar

  • Desain modular, skalabilitas yang baik

  • Keandalan tinggi

  • Mendukung penerapan panas: perbarui file konfigurasi, tingkatkan versi, dan ganti file log tanpa waktu henti

  • Konsumsi memori rendah: 10.000 koneksi tidak aktif dalam mode koneksi tetap hidup hanya memerlukan memori 2,5 juta

  • berbasis peristiwa,aio,mmap,kirimfile

Fungsi terkait layanan web

  • Tuan rumah maya (server)

  • Mendukung koneksi keep-alive dan pipeline (menggunakan satu koneksi untuk membuat banyak permintaan)

  • Akses log (mendukung buffering log untuk meningkatkan kinerjanya)

  • url ditulis ulang

  • alias jalur

  • IP dan kontrol akses berbasis pengguna

  • Batas laju dukungan dan batas konkurensi

  • Konfigurasi ulang dan peningkatan online tanpa mengganggu alur kerja pelanggan

Struktur proses Nginx

Nginx adalah model organisasi multi-proses, dan terdiri dari proses Master dan proses Pekerja.

  • Fungsi dari proses master:

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

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

Pengenalan modul Nginx

  • Modul inti: Ini adalah modul penting untuk pengoperasian normal server Nginx. Modul ini menyediakan fungsi inti seperti pencatatan kesalahan, penguraian file konfigurasi, mekanisme berbasis peristiwa, dan manajemen proses.

  • Modul HTTP standar: Menyediakan fungsi yang terkait dengan penguraian protokol HTTP, seperti: konfigurasi port, pengaturan pengkodean halaman web, pengaturan header respons HTTP, dll.

  • Modul HTTP opsional: Terutama digunakan untuk memperluas fungsi HTTP standar sehingga Nginx dapat menangani beberapa layanan khusus, seperti: transmisi multimedia Flash, penguraian permintaan GeoIP, kompresi transmisi jaringan, dukungan protokol keamanan SSL, dll.

  • Modul layanan email: Terutama digunakan untuk mendukung layanan email Nginx, termasuk dukungan untuk protokol POP3, protokol IMAP, dan protokol SMTP

  • Modul layanan streaming: mengimplementasikan fungsi proksi terbalik, termasuk proksi protokol TCP

  • Modul pihak ketiga: adalah untuk memperluas aplikasi server Nginx dan menyelesaikan fungsi yang ditentukan pengembang, seperti: dukungan Json, dukungan Lua, dll.

2. Instalasi Nginx

Versi Nginx

  • Versi arus utama adalah versi pengembangan utama, biasanya nomor versi ganjil, seperti 1.19

  • Versi stabil adalah versi stabil terbaru, biasanya versi bernomor genap, seperti: 1.20

  • Versi lama, versi stabil lama, biasanya versi bernomor genap, seperti: 1.18

Nginx dapat diinstal menggunakan yum atau kode sumber, namun disarankan untuk menggunakan kode sumber untuk mengkompilasi dan menginstal.

  • Versi yum lebih lama

  • Kompilasi dan instalasi dapat mempermudah penyesuaian jalur terkait. Menggunakan kompilasi kode sumber dapat menyesuaikan fungsi terkait, sehingga lebih nyaman untuk penggunaan bisnis.

  • Kontainer Docker berjalan secara langsung

2.1 Instal Nginx berdasarkan 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 Kompilasi dan instalasi Nginx

Nginx ditulis dalam bahasa C, jadi instalasi kode sumber Nginx memerlukan persiapan kompiler standar terlebih dahulu. Nama lengkap GCC adalah (kumpulan GNU Compiler). Ini dikembangkan oleh GNU dan dilisensikan oleh GPL, atau LGPL. Ini adalah UNIX gratis -seperti, Apple Kompiler standar untuk komputer Mac OS Untuk bahasa lain, alat Automake juga diperlukan untuk menyelesaikan pembuatan Makefile secara otomatis. Beberapa modul Nginx perlu bergantung pada perpustakaan pihak ketiga, seperti: pcre (mendukung penulisan ulang ), zlib (mendukung modul gzip) dan openssl (mendukung modul ssl), dll.

Alamat pengunduhan paket kode sumber resmi: 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