Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Persediaan pelayan Nginx dan analisis contoh konfigurasi asas

Persediaan pelayan Nginx dan analisis contoh konfigurasi asas

王林
王林ke hadapan
2023-05-23 11:22:061561semak imbas

nginx (enjin x) ialah pelayan http berprestasi tinggi dan pelayan proksi terbalik Perisian ini dibangunkan untuk menyelesaikan masalah c10k.

seni bina nginx mengambil kesempatan daripada banyak ciri sistem pengendalian moden untuk melaksanakan pelayan http berprestasi tinggi. Sebagai contoh, pada sistem Linux, nginx menggunakan epoll, sendfile, file aio, directio dan mekanisme lain, yang menjadikan nginx bukan sahaja sangat cekap, tetapi juga mempunyai penggunaan sumber yang sangat rendah. Pegawai mendakwa bahawa nginx hanya memerlukan 2.5 untuk mengekalkan 10,000 http tidak aktif sambungan kekal hidup.
Persediaan pelayan Nginx dan analisis contoh konfigurasi asas
nginx akan menjalankan berbilang proses pada masa yang sama seperti yang diperlukan: proses induk (master) dan beberapa proses pekerja (pekerja Apabila cache dikonfigurasikan, terdapat juga proses pemuat cache (). pemuat cache) dan proses pengurus Cache (pengurus cache), dsb. Semua proses mengandungi hanya satu utas, dan komunikasi antara proses terutamanya direalisasikan melalui mekanisme "memori bersama". Proses utama berjalan sebagai pengguna akar, manakala pekerja, pemuat cache dan pengurus cache semuanya harus dijalankan sebagai pengguna yang tidak mempunyai hak istimewa.

1. Pasang nginx
Dalam versi centos6 sumber epel, pakej rpm nginx telah ditambah, tetapi versi pakej rpm ini lebih rendah. Jika anda perlu mengemas kini versi, anda boleh menggunakan pakej rpm yang dikeluarkan secara rasmi, atau gunakan pakej kod sumber untuk menyusun dan memasang.

Anda juga boleh menggunakan beberapa versi nginx dengan fungsi pembangunan sekunder yang dipertingkatkan. Contohnya, tengine dan openresty Taobao adalah pilihan yang baik.

1.1 Parameter kompilasi biasa

--prefix=path: Tentukan direktori pemasangan nginx
--conf-path=path: Tentukan konfigurasi nginx.conf Laluan fail
--user=name: Pengguna proses pekerja nginx
--dengan-pcre: Dayakan sokongan ungkapan biasa pcre
--dengan-http_ssl_module: Dayakan sokongan SSL
--dengan -http_stub_status_module : digunakan untuk memantau status nginx
--dengan-http-realip_module: membenarkan menukar alamat ip pelanggan dalam pengepala permintaan klien
--dengan-fail-aio: dayakan fail aio
-- tambah -module=path: Tambah modul luaran pihak ketiga
Penyelesaian kompilasi lengkap disediakan di sini:

--prefix=/usr/local/nginx
--conf-path=/etc/ nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/tmp/nginx/client_body
--http-proxy-temp-path=/var/tmp/nginx/proxy
--http-fastcgi- temp-path=/var/tmp/nginx/fastcgi
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
--pid-path=/var/run/nginx.pid
--lock-path=/var/lock/nginx
--user=nginx
--group=nginx
--with-file-aio
--with-http_ssl_module
--dengan-http_realip_module
--dengan-http_sub_module
--dengan-http_gzip_static_module
--dengan-http_stub_status_module
--dengan-pcre
1.>1

Mulakan nginx:

# nginx -c /etc/nginx/nginx.conf

Tutup nginx

# nginx -s stop

Baca semula fail konfigurasi

# nginx -s reload
# pkill -hup nginx

Buka semula Log fail

# nginx -s reopen
# pkill -usr1 nginx

Anda juga boleh memuat turun fail /etc/init.d/nginx dalam pakej rpm nginx dan mengubah suai laluan untuk digunakan:

# service nginx {start|stop|status|restart|reload|configtest|}


2. fail konfigurasi nginx.conf

fail konfigurasi nginx terbahagi terutamanya kepada empat bahagian: utama (tetapan global), http (tetapan http umum), pelayan (tetapan hos maya), lokasi (url sepadan laluan)). Terdapat juga beberapa bahagian konfigurasi lain, seperti acara, huluan, dsb.

2.1 Tetapan umum

pengguna nginx

Nyatakan pengguna dan kumpulan yang menjalankan proses nginx workre

worker_rlimit_nofile #

Nyatakan semua pekerja proses Bilangan maksimum fail yang boleh dibuka

worker_cpu_affinity

Tetapkan kelekatan cpu proses pekerja untuk mengelakkan penggunaan prestasi yang disebabkan oleh pertukaran antara CPU. Contohnya, worker_cpu_affinity 0001 0010 0100 1000; (quad-core)

worker_processes 4

Bilangan pekerja pekerja proses ini boleh ditetapkan kepada bilangan cpu jika ssl dihidupkan, ia boleh ditingkatkan dengan sewajarnya. Nilai ini

worker_connections 1000

Bilangan maksimum sambungan serentak yang boleh diterima oleh satu proses pekerja, diletakkan dalam segmen acara

log_error_log /error.log info

Laluan storan log ralat dan tahap rekod

gunakan epoll

Gunakan model acara epoll dan letakkannya dalam segmen acara

2.2 Pelayan http

pelayan {}:

Tentukan hos maya

dengar 80;

Tentukan alamat dan port pendengaran Secara lalai, mendengar adalah pada semua alamat mesin ini

nama_pelayan [...];

Tentukan nama hos maya, anda boleh menggunakan berbilang nama, anda juga boleh menggunakan ungkapan biasa atau kad bebas.

hantar fail dihidupkan

Dayakan panggilan fail hantar untuk membalas dengan pantas kepada pelanggan

keepalive_timeout 65

Tamat masa sambungan yang lama, dalam beberapa saat.

send_timeout

Nyatakan tamat masa untuk membalas pelanggan

client_max_body_size 10m

Saiz maksimum entiti yang dibenarkan untuk diminta oleh klien

laluan akar

Tetapkan url permintaan Direktori akar
pada sistem fail di mana sumber yang sepadan terletak

location [ = | ~ | ~* | ^~ ] uri { ... }
设置一个 uri 匹配路径
=:精确匹配
~:正则表达式匹配,区分字符大小写
~*:正则表达式匹配,不区分字符大小写
^~:uri 的前半部分匹配,且不实用正则表达式
优先级:
= > location 完整路径 > ^~ > ~ > ~* > location 起始路径 > location /

allow 和 deny
基于 ip 访问控制,如:

仅允许 192.168.0.0/24 网段客户端访问

allow 192.168.0.0/24;
deny all;
stub_status on
开启状态显式,仅能用于 location 中:
开启状态显式页面

location /status {
stub_status on;
allow 172.16.0.0/16;
deny all;
}


rewrite
url 重写,可以使用多种标记
例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
可用的 flag:
- last:重写完成后,继续匹配其他 rewrite 规则
- break:重写完成后不再继续匹配
- redirect:返回 302 重定向(临时重定向),客户端对重定向的 url 发起新的请求
- permanent:返回 301 重定向(永久重定向),客户端对重定向的 url 发起新的请求

一个 server 配置示例:

server {
 listen  80;
 server_name www.example.com;
 root /web/htdocs;

 location / {
  index index.html index.htm;
 }

 location /status {
  stub_status on;
  allow 10.0.0.0/8;
  deny all;
  access_log off;
}

2.3 ssl 的配置

启用一个 ssl 虚拟主机

server {
  listen 443;
  server_name example.com;

  root /apps/www;
  index index.html index.htm;

  ssl on;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

#  ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2;
#  ssl_ciphers all:!adh:!export56:rc4+rsa:+high:+medium:+low:+sslv2:+exp;
#  ssl_prefer_server_ciphers on;

}

其中 ssl_certificate 表示 ca 文件,ssl_certificate_key 表示密钥文件。

如果想把 http 请求强制转到 https,可以这样:

server {
listen  80;
server_name example.me;

return 301 https://$server_name$request_uri;
}


2.4 nginx 做负载均衡反向代理

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字。在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数。

例如:

upstream backend {
 server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10;
 server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;
}


默认请求下,使用 round-robin 调度算法,并有健康状态检查和恢复主机的能力。

ningx 还可以使用这些算法:

ip_hash:基于源地址哈希,主要目的是会话保持
least_conn:基于最少活动连接进行调度
sticky:基于 cookie 进行会话绑定,nginx 会在客户端第一次访问时插入路由信息到 cookie 中,或者选择 cookie 中的某个字段的值作为键,以后每次请求将基于此信息进行调度
基于 cookie 的会话绑定共有 cookie,route 和 learn 三种。

例如,基于 cookie name 的调度:

upstream backend {
 server backend1.example.com;
 server backend2.example.com;

 sticky cookie srv_id expires=1h domain=.example.com path=/;
}


使用此主机组进行反向代理:

location / {
 proxy_pass http://backend;
 proxy_set_header host $host;
 proxy_set_haeder x-forwared-for $proxy_add_x_forwarded_for;
}


proxy_pass url 指定代理的后端主机,可以指定 "http" 或 "https" 协议,域名可以是 ip 地址,也可以是 upstream 池名字

如果代理指定的是一个 uri 地址,如 http://127.0.0.1/remote,那么将直接被代理至指定 uri,无论请求的 uri 是什么
如果代理指定的一个主机而没有 uri,如 http://127.0.0.1,客户端请求的uri将被传递至指定域名
如果 location 中使用模式匹配 url,那么 url 也会被传递至代理 url 的末端
如果 location 中使用了 uri 重写,那么 proxy_pass 会使用重写后的结果进行处理
proxy_set_header header value 对转发的报文首部进行修改

2.5 反向代理时的缓存相关设定

proxy_cache_path path [levels=levels] keys_zone=name:size

定义磁盘缓存路径,nignx 的缓存是以键值方式存放的,keys_zone 用于指定键存放的内存空间名字和大小,对应的值则存放在 path 指定的路径中。levels 可以指定缓存存放路径的级数和名称字符数。此设置只能在 http 段中定义。

如:

proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;


proxy_cache_valid [code ...] time 指定不同响应码的内容的缓存时间

如:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404  1m;
proxy_cache_valid any  1m;


proxy_cache_method method 定义哪些方法的请求结果可以被缓存,如:

proxy_cache_method get;
proxy_cache_method head;


proxy_cache name 指定使用预先定义的缓存空间用于缓存

2.6 fastcgi 代理的设置

使用 fastcgi 时,设置代理的方法同 porxy_pass 类似,同时还可以使用 fastcgi 缓存,设置的方法也和 proxy_cache 类似。

location ~ \.php$ {
 root   /web/htdocs;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param script_filename $document_root$fastcgi_script_name;
 include  fastcgi_params;
}


3. 一些常用内置变量

$arg_name: Parameter nama dalam uri permintaan kepada
$args: Semua parameter uri permintaan, sama seperti $query_string
$uri: Uri yang diminta semasa, tanpa parameter
$request_uri : Minta uri, dengan parameter lengkap
$host: pengepala hos dalam mesej permintaan http Jika tiada pengepala hos, ia akan digantikan dengan nama hos hos maya yang mengendalikan permintaan ini nama hos: hos tempat perkhidmatan nginx dijalankan
$remote_addr: klien ip
$remote_port: port klien
$remote_user: nama pengguna yang dimasukkan oleh pengguna klien semasa menggunakan pengesahan pengguna
$request_filename : uri dalam permintaan pengguna melalui akar tempatan Atau laluan fail setempat yang dipetakan selepas penukaran alias
$request_method: kaedah permintaan
$server_addr: alamat pelayan
$server_name: nama pelayan
$server_port: server port
$server_protocol: pelayan ke Protokol apabila klien menghantar respons, seperti http/1.1, http/1.0
$scheme: skema yang digunakan dalam permintaan, seperti https
$http_name dalam https:/ /www.magedu.com/: padan Pengepala yang ditentukan dalam mesej permintaan, seperti $http_host sepadan dengan pengepala hos dalam mesej permintaan
$sent_http_name: sepadan dengan pengepala yang ditentukan dalam mesej respons, seperti $sent_content_type sepadan dengan pengepala jenis kandungan dalam mesej respons
$status: status respons

Atas ialah kandungan terperinci Persediaan pelayan Nginx dan analisis contoh konfigurasi asas. 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