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

Apakah konsep asas Nginx

WBOY
WBOYke hadapan
2023-05-16 17:02:484508semak imbas

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

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

[sudo] nginx -s signal

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;
  • 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 上下文中的指令 }
    }
  • 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 }
    }
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;
     }
    }
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;
 }
}

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;
 }
}
    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";
    }
  • 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"
  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

    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;

    ialah singkatan daripada

    server_name  netguru.co  www.netguru.co  *.netguru.co;
  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

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

    listen unix:/var/run/nginx.sock;

    你甚至可以使用主机名

    listen localhost:80;
    listen netguru.co:80;

    但请慎用,由于主机可能无法启动 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";
     }
    }

    root, location, 和 try_files 指令

    root 指令

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

    server {
     listen 80;
     server_name netguru.co;
     root /var/www/netguru.co;
    }

    根据给定的请求,指定 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

    location 指令

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

    location /foo/ {
     # ...}

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

    以上例子将匹配

    /foo
    /fooo
    /foo123
    /foo/bar/index.html
    ...

    此外,在给定的上下文中可以使用多个 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"

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

    =           - Exact match
    ^~          - Preferential match
    ~ && ~*     - Regex match
    no modifier - Prefix match

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

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

    try_files 指令

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

    try_files $uri index.html =404;

    所以对于 /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 / {
     }
    }

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

    server {
     location / {
       try_files $uri /index.html =404;
     }
    }

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

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam