Rumah > Operasi dan penyelenggaraan > Nginx > Apakah konsep asas Nginx

Apakah konsep asas Nginx

WBOY
Lepaskan: 2023-05-16 17:02:48
ke hadapan
4536 orang telah melayarinya

Apakah konsep asas Nginx

Apakah Nginx?

Nginx pada asalnya dicipta sebagai pelayan web untuk menyelesaikan masalah C10k. Sebagai pelayan web, ia boleh menyampaikan data anda pada kelajuan yang sangat pantas. Tetapi Nginx adalah lebih daripada sekadar pelayan web, anda juga boleh menggunakannya sebagai proksi terbalik untuk disepadukan dengan mudah dengan pelayan huluan yang lebih perlahan seperti Unicorn atau Puma. Anda boleh mengedarkan trafik dengan sewajarnya (pengimbang beban), media strim, mengubah saiz imej secara dinamik, kandungan cache dan banyak lagi. Seni bina nginx asas terdiri daripada proses induk dan proses pekerjanya. Tuan membaca fail konfigurasi dan mengekalkan proses pekerja, dan pekerja sebenarnya memproses permintaan itu.

Arahan Asas

Untuk memulakan nginx, masukkan sahaja:

[sudo] nginx
Salin selepas log masuk

Apabila instance nginx anda sedang berjalan, anda boleh menghantar isyarat yang sesuai dengan Untuk mengurus ia:

[sudo] nginx -s signal
Salin selepas log masuk

Isyarat tersedia:

  • berhenti – penutupan pantas

  • berhenti – thread pekerja untuk menyelesaikan pemprosesan)

  • muat semula –

  • Perintah dan konteks

  • fail konfigurasi nginx, lokasi lalai termasuk:

,

fail konfigurasi terdiri daripada bahagian berikut:

  • Arahan&ndash, mengandungi nama dan parameter, berakhir dengan koma bertitik/etc/nginx/nginx.conf

  • gzip on;
    Salin selepas log masuk
  • <🎜; >Konteks– blok mata, anda boleh mengisytiharkan arahan &ndash serupa dengan skop dalam bahasa pengaturcaraan /usr/local/etc/nginx/nginx.conf

  • worker_processes 2; # 全局上下文指令http {              # http 上下文   gzip on;        # http 上下文中的指令 server {          # server 上下文   listen 80;      # server 上下文中的指令 }
    }
    Salin selepas log masuk
  • jenis arahan /usr/local/nginx/conf/nginx.conf

  • apabila menggunakan arahan yang sama dalam berbeza Penjagaan mesti diambil apabila bekerja dengan model warisan. Terdapat tiga jenis arahan, setiap satu dengan model pewarisannya sendiri.

Arahan biasa
  • mempunyai nilai unik setiap konteks. Selain itu, ia hanya boleh ditakrifkan sekali dalam konteks semasa. Mengatasi nilai ibu bapa dalam konteks kanak-kanak hanya sah dalam konteks anak semasa.

    gzip on;
    gzip off; # 非法,不能在同一个上下文中指定同一普通指令2次server {
     location /downloads {
       gzip off;
     }
    
     location /assets {
       # gzip is on here }
    }
    Salin selepas log masuk
Arahan tatasusunan
  • Menambah berbilang arahan dalam konteks yang sama akan menambah berbilang nilai bukannya liputan penuh. Menentukan arahan dalam konteks kanak-kanak akan mengatasi nilai dalam konteks induk.

    error_log /var/log/nginx/error.log;
    error_log /var/log/nginx/error_notive.log notice;
    error_log /var/log/nginx/error_debug.log debug;
    
    server {
     location /downloads {
       # 下面的配置会覆盖父级上下文中的指令   error_log /var/log/nginx/error_downloads.log;
     }
    }
    Salin selepas log masuk
Arahan Tindakan

Tindakan ialah arahan untuk mengubah sesuatu. Bergantung pada keperluan modul, tingkah laku yang diwarisi mungkin berbeza-beza. Sebagai contoh, arahan tulis semula akan dilaksanakan selagi ia sepadan:

server {
 rewrite ^ /foobar;

 location /foobar {
   rewrite ^ /foo;
   rewrite ^ /bar;
 }
}
Salin selepas log masuk

Jika pengguna ingin cuba mendapatkan /sample:

Tulisan semula pelayan akan dilaksanakan, daripada /sample tulis semula ke /foobar

lokasi /foobar akan dilaksanakan oleh padanan tulis semula pertama

lokasi, menulis semula dari /foobar to /foo

Pelaksanaan penulisan semula kedua

lokasi, menulis semula dari /foo ke /bar

arahan pemulangan menyediakan gelagat yang berbeza:

server {
 location / {
   return 200;
   return 404;
 }
}
Salin selepas log masuk
    Dalam kes di atas, pulangkan 200 segera.
  • Memproses permintaan
  • Di dalam Nginx, anda boleh menentukan berbilang pelayan maya, setiap pelayan maya diterangkan dengan konteks pelayan{}.

    server {
     listen      *:80 default_server;
     server_name netguru.co;
    
     return 200 "Hello from netguru.co";
    }
    
    server {
     listen      *:80;
     server_name foo.co;
    
     return 200 "Hello from foo.co";
    }
    
    server {
     listen      *:81;
     server_name bar.co;
    
     return 200 "Hello from bar.co";
    }
    Salin selepas log masuk
  • Ini akan memberitahu Nginx cara mengendalikan permintaan masuk. Apabila menyemak gabungan port IP yang diberikan, Nginx akan menguji hos maya mana yang mempunyai set arahan dengar.
  • Kemudian, nilai arahan nama_server akan mengesan pengepala Hos (yang menyimpan nama domain hos).

  • Nginx akan memilih hos maya dalam susunan berikut:
  • Hos port IP yang sepadan dengan arahan sever_name

mempunyai default_server Ditandai Hos IP-Port

Hos IP-Port yang ditakrifkan pertama

Jika tiada padanan, tolak sambungan.

Contohnya:

Request to foo.co:80     => "Hello from foo.co"Request to www.foo.co:80 => "Hello from netguru.co"Request to bar.co:80     => "Hello from netguru.co"Request to bar.co:81     => "Hello from bar.co"Request to foo.co:81     => "Hello from bar.co"
Salin selepas log masuk
  1. Arahan

  2. Arahan server_name menerima berbilang nilai. Ia juga mengendalikan padanan kad bebas dan ungkapan biasa.

    server_name netguru.co www.netguru.co; # exact matchserver_name *.netguru.co;              # wildcard matchingserver_name netguru.*;                 # wildcard matchingserver_name  ~^[0-9]*\.netguru\.co$;   # regexp matching
    Salin selepas log masuk

    Apabila terdapat kekaburan, nginx akan menggunakan yang berikut:
  3. Nama tepat
  4. Kad bebas terpanjang Nama bermula dengan asterisk, seperti "*.example.org".

Nama kad bebas terpanjang berakhir dengan asterisk, cth. "mel.**"

server_name Memadankan ungkapan biasa dahulu (mengikut konfigurasi failkan Pesanan dalam)

Nginx akan menyimpan tiga jadual cincang untuk menyimpan nama tertentu, kad bebas bermula dengan asterisk dan kad bebas yang berakhir dengan asterisk. Jika keputusan tiada dalam mana-mana jadual, ujian ungkapan biasa akan dilakukan secara berurutan.

    Perlu diingat bahawa
  1. server_name .netguru.co;
    Salin selepas log masuk

    ialah singkatan daripada

    server_name  netguru.co  www.netguru.co  *.netguru.co;
    Salin selepas log masuk
  2. tetapi berbeza sedikit,
  3. disimpan dalam jadual kedua, yang bermaksud ia lebih kecil daripada Pengisytiharan eksplisit adalah lebih perlahan.

  4. Perintah

    在很多情况下,能够找到 listen 指令,接受IP:端口值

    listen 127.0.0.1:80;
    listen 127.0.0.1;    # by default port :80 is usedlisten *:81;
    listen 81;           # by default all ips are usedlisten [::]:80;      # IPv6 addresseslisten [::1];        # IPv6 addresses
    Salin selepas log masuk

    然而,还可以指定 UNIX-domain 套接字。

    listen unix:/var/run/nginx.sock;
    Salin selepas log masuk

    你甚至可以使用主机名

    listen localhost:80;
    listen netguru.co:80;
    Salin selepas log masuk

    但请慎用,由于主机可能无法启动 nginx,导致无法绑定在特定的 TCP Socket。

    最后,如果指令不存在,则使用 *:80

    最小化配置

    有了这些知识 – 我们应该能够创建并理解运行 nginx 所需的最低配置。

    # /etc/nginx/nginx.confevents {}                   # events context needs to be defined to consider config validhttp {
    server {
       listen 80;
       server_name  netguru.co  www.netguru.co  *.netguru.co;
    
       return 200 "Hello";
     }
    }
    Salin selepas log masuk

    root, location, 和 try_files 指令

    root 指令

    root 指令设置请求的根目录,允许 nginx 将传入请求映射到文件系统。

    server {
     listen 80;
     server_name netguru.co;
     root /var/www/netguru.co;
    }
    Salin selepas log masuk

    根据给定的请求,指定 nginx 服务器允许的内容

    netguru.co:80/index.html     # returns /var/www/netguru.co/index.htmlnetguru.co:80/foo/index.html # returns /var/www/netguru.co/foo/index.html
    Salin selepas log masuk

    location 指令

    location指令根据请求的 URI 来设置配置。location [modifier] path

    location /foo/ {
     # ...}
    Salin selepas log masuk

    如果没有指定修饰符,则路径被视为前缀,其后可以跟随任何东西。

    以上例子将匹配

    /foo
    /fooo
    /foo123
    /foo/bar/index.html
    ...
    Salin selepas log masuk

    此外,在给定的上下文中可以使用多个 location 指令。

    server {
     listen 80;
     server_name netguru.co;
     root /var/www/netguru.co;
    
     location / {
       return 200 "root";
     }
    
     location /foo/ {
       return 200 "foo";
     }
    }
    netguru.co:80   /       # => "root"netguru.co:80   /foo    # => "foo"netguru.co:80   /foo123 # => "foo"netguru.co:80   /bar    # => "root"
    Salin selepas log masuk

    Nginx还有一些修饰符可以用于连接location。因为每个修饰符都有自己的优先级,所以它们会影响 location 模块在使用时的行为。

    =           - Exact match
    ^~          - Preferential match
    ~ && ~*     - Regex match
    no modifier - Prefix match
    Salin selepas log masuk

    Nginx 会先检查精确匹配。如果找不到,我们会找优先级最高的。如果之前的匹配尝试失败,正则表达式会按照出现的顺序逐个进行测试。至少,最后一个前缀匹配将被使用。

    location /match {
     return 200 &#39;Prefix match: matches everything that starting with /match&#39;;
    }
    
    location ~* /match[0-9] {
     return 200 &#39;Case insensitive regex match&#39;;
    }
    
    location ~ /MATCH[0-9] {
     return 200 &#39;Case sensitive regex match&#39;;
    }
    
    location ^~ /match0 {
     return 200 &#39;Preferential match&#39;;
    }
    
    location = /match {
     return 200 &#39;Exact match&#39;;
    }
    /match/    # => &#39;Exact match&#39;/match0    # => &#39;Preferential match&#39;/match2    # => &#39;Case insensitive regex match&#39;/MATCH1    # => &#39;Case sensitive regex match&#39;/match-abc # => &#39;Prefix match: matches everything that starting with /match&#39;
    Salin selepas log masuk

    try_files 指令

    尝试不同的路径,找到一个路径就返回。

    try_files $uri index.html =404;
    Salin selepas log masuk

    所以对于 /foo.html 请求,它将尝试按以下顺序返回文件:

    1. $uri ( /foo.html )

    2. index.html

    3. 如果什么都没找到则返回 404

    有趣的是,如果我们在服务器上下文中定义 try_files,然后定义匹配的所有请求的 location —— try_files 将不会执行。

    这是因为在服务器上下文中定义的 try_files 是它的 pseudo-location,这是最不可能的位置。因此,location/的定义将比pseudo-location更为明确。

    server {
     try_files $uri /index.html =404;
    
     location / {
     }
    }
    Salin selepas log masuk

    因此,你应该避免在 server 上下文中出现 try_files:

    server {
     location / {
       try_files $uri /index.html =404;
     }
    }
    Salin selepas log masuk

    Atas ialah kandungan terperinci Apakah konsep asas Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan