Κοινή χρήση τεχνολογίας

n1. Nginx εισαγωγή και εγκατάσταση

2024-07-12

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

1. Εισαγωγή στο Nginx

Επίσημος ιστότοπος Nginx: http://nginx.org

Το Nginx είναι ένας δωρεάν, ανοιχτού κώδικα, υψηλής απόδοσης HTTP και αντίστροφος διακομιστής μεσολάβησης, διακομιστής μεσολάβησης email και διακομιστής μεσολάβησης TCP/UDP

Άλλες δευτερεύουσες εκδόσεις του nginx:

  • Tengine

    Ένα έργο διακομιστή ιστού που ξεκίνησε από την Taobao. Βασισμένο στο Nginx, προσθέτει πολλές προηγμένες λειτουργίες και δυνατότητες για να καλύψει τις ανάγκες ιστότοπων μεγάλης επισκεψιμότητας. Η απόδοση και η σταθερότητα του Tengine έχουν δοκιμαστεί καλά σε μεγάλους ιστότοπους όπως το Taobao, το Tmall Mall κ.λπ. Ο απώτερος στόχος του είναι να δημιουργήσει μια αποτελεσματική, σταθερή, ασφαλή και εύχρηστη πλατφόρμα Web.Ξεκινώντας τον Δεκέμβριο του 2011, το Tengine έγινε έργο ανοιχτού κώδικα

    Επίσημος ιστότοπος: http://tengine.taobao.org/

  • OpenResty

    Πλατφόρμα Ιστού υψηλής απόδοσης που βασίζεται στη γλώσσα Nginx και Lua

    Επίσημος ιστότοπος: http://openresty.org/cn/

Εισαγωγή της λειτουργίας Nginx

  • Διακομιστής στατικών πόρων ιστού html, εικόνες, js, css, txt και άλλοι στατικοί πόροι

  • Αντίστροφος διακομιστής μεσολάβησης για το πρωτόκολλο http/https

  • Συνδυάζεται με FastCGI/uWSGI/SCGI και άλλα πρωτόκολλα για την αντιστροφή αιτημάτων δυναμικών πόρων διακομιστή μεσολάβησης

  • Αίτημα προώθησης πρωτοκόλλου tcp/udp (αντίστροφος διακομιστής μεσολάβησης)

  • Αντίστροφος διακομιστής μεσολάβησης για το πρωτόκολλο imap4/pop3

Βασικά χαρακτηριστικά

  • Αρθρωτός σχεδιασμός, καλή επεκτασιμότητα

  • Υψηλή αξιοπιστία

  • Υποστήριξη άμεσης ανάπτυξης: ενημέρωση αρχείων διαμόρφωσης, αναβάθμιση εκδόσεων και αντικατάσταση αρχείων καταγραφής χωρίς διακοπές λειτουργίας

  • Χαμηλή κατανάλωση μνήμης: 10.000 ανενεργές συνδέσεις σε λειτουργία διατήρησης ζωντανής σύνδεσης απαιτούν μόνο 2,5 εκατομμύρια μνήμης

  • συμβάντων, aio, mmap, αρχείο αποστολής

Λειτουργίες που σχετίζονται με την υπηρεσία Ιστού

  • Εικονικός κεντρικός υπολογιστής (διακομιστής)

  • Υποστηρίζει τις συνδέσεις διατήρησης και αγωγών (χρησιμοποιώντας μία σύνδεση για την υποβολή πολλαπλών αιτημάτων)

  • Αρχείο καταγραφής πρόσβασης (υποστηρίζει την αποθήκευση στο buffer για τη βελτίωση της απόδοσής του)

  • url rewirte

  • μονοπάτι ψευδώνυμο

  • IP και έλεγχος πρόσβασης βάσει χρήστη

  • Όριο ποσοστού υποστήριξης και όριο συγχρονισμού

  • Αναδιαμόρφωση και αναβαθμίσεις στο διαδίκτυο χωρίς διακοπή των ροών εργασίας των πελατών

Δομή διαδικασίας Nginx

Το Nginx είναι ένα μοντέλο οργάνωσης πολλαπλών διαδικασιών και αποτελείται από μια διαδικασία Master και μια διαδικασία Worker.

  • Λειτουργίες της κύριας διαδικασίας:

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

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

Εισαγωγή της ενότητας Nginx

  • Βασική ενότητα: Είναι μια βασική ενότητα για την κανονική λειτουργία του διακομιστή Nginx Παρέχει βασικές λειτουργίες όπως καταγραφή σφαλμάτων, ανάλυση αρχείων διαμόρφωσης, μηχανισμό βάσει συμβάντων και διαχείριση διεργασιών.

  • Τυπική μονάδα HTTP: Παρέχει λειτουργίες που σχετίζονται με την ανάλυση πρωτοκόλλου HTTP, όπως: διαμόρφωση θύρας, ρυθμίσεις κωδικοποίησης ιστοσελίδας, ρυθμίσεις κεφαλίδας απόκρισης HTTP κ.λπ.

  • Προαιρετική μονάδα HTTP: Χρησιμοποιείται κυρίως για την επέκταση τυπικών λειτουργιών HTTP, έτσι ώστε το Nginx να μπορεί να χειριστεί ορισμένες ειδικές υπηρεσίες, όπως: μετάδοση πολυμέσων Flash, ανάλυση αιτημάτων GeoIP, συμπίεση μετάδοσης δικτύου, υποστήριξη πρωτοκόλλου ασφαλείας SSL κ.λπ.

  • Μονάδα υπηρεσίας αλληλογραφίας: Χρησιμοποιείται κυρίως για την υποστήριξη της υπηρεσίας αλληλογραφίας Nginx, συμπεριλαμβανομένης της υποστήριξης για πρωτόκολλο POP3, πρωτόκολλο IMAP και πρωτόκολλο SMTP

  • Μονάδα υπηρεσίας ροής: υλοποιεί τη λειτουργία αντίστροφου διακομιστή μεσολάβησης, συμπεριλαμβανομένου του διακομιστή μεσολάβησης πρωτοκόλλου TCP

  • Ενότητα τρίτου μέρους: είναι η επέκταση της εφαρμογής διακομιστή Nginx και η ολοκλήρωση των λειτουργιών που καθορίζονται από τον προγραμματιστή, όπως: υποστήριξη Json, υποστήριξη Lua κ.λπ.

2. Εγκατάσταση Nginx

Έκδοση Nginx

  • Η κύρια έκδοση είναι η κύρια έκδοση ανάπτυξης, συνήθως ένας μονός αριθμός έκδοσης, όπως η 1.19

  • Η σταθερή έκδοση είναι η πιο πρόσφατη σταθερή έκδοση, συνήθως μια έκδοση με ζυγό αριθμό, όπως: 1.20

  • Εκδόσεις παλαιού τύπου παλιές σταθερές εκδόσεις, συνήθως ζυγές εκδόσεις, όπως: 1.18

Το Nginx μπορεί να εγκατασταθεί χρησιμοποιώντας yum ή πηγαίο κώδικα, αλλά συνιστάται η χρήση πηγαίου κώδικα για μεταγλώττιση και εγκατάσταση.

  • Η έκδοση του yum είναι παλαιότερη

  • Η μεταγλώττιση και η εγκατάσταση μπορεί να διευκολύνει την προσαρμογή των σχετικών διαδρομών Η χρήση της μεταγλώττισης πηγαίου κώδικα μπορεί να προσαρμόσει τις σχετικές λειτουργίες, καθιστώντας την πιο βολική για επαγγελματική χρήση.

  • Το δοχείο Docker λειτουργεί απευθείας

2.1 Εγκαταστήστε το Nginx με βάση το 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

Το Nginx είναι γραμμένο σε γλώσσα C, επομένως η εγκατάσταση του πηγαίου κώδικα απαιτεί εκ των προτέρων προετοιμασία ενός τυπικού μεταγλωττιστή -όπως, Apple Ο τυπικός μεταγλωττιστής για τον υπολογιστή Mac OS Για άλλες γλώσσες, το εργαλείο Automake είναι επίσης απαραίτητο για την ολοκλήρωση της αυτόματης δημιουργίας του Makefile Ορισμένες μονάδες του Nginx πρέπει να βασίζονται σε βιβλιοθήκες τρίτων, όπως: pcre (υποστηρίζει επανεγγραφή. ), zlib (υποστηρίζει μονάδα gzip) και openssl (υποστηρίζει μονάδα ssl) κ.λπ.

Επίσημη διεύθυνση λήψης πακέτου πηγαίου κώδικα: 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