Préface

Nginx a été conçu et développé par Igor Sysoev pour rambler.ru, le deuxième site le plus visité de Russie. Depuis sa sortie en 2004, grâce à la puissance de l'open source, il est devenu mature et complet.

Nginx est riche en fonctionnalités ; il peut être utilisé comme serveur HTTP, serveur proxy inverse ou serveur de messagerie. Il prend en charge FastCGI, SSL, Virtual Host, URL Rewrite, Gzip et d'autres fonctionnalités. Il prend également en charge de nombreuses extensions de modules tierces.

La stabilité de Nginx, son ensemble de fonctionnalités, ses exemples de fichiers de configuration et sa faible consommation de ressources système lui ont permis de rattraper son retard. Il affiche un taux d'utilisation de 12.18% parmi les sites web actifs dans le monde, soit environ 22.2 millions de sites web.

Nous avons assez fanfaronné. Si vous n'êtes toujours pas satisfait, vous pouvez trouver de tels éloges partout sur Baidu Baike ou dans certains livres.


Fonctionnalités courantes de Nginx

1. Proxy HTTP, proxy inverse : l'une des fonctions les plus couramment utilisées d'un serveur web, en particulier le proxy inverse.

Je fournis ici deux schémas pour illustrer le proxy direct et le proxy inverse. Pour des détails précis, vous pouvez consulter des documents de référence.

Lorsque Nginx agit comme proxy inverse, il offre des performances stables et une configuration de transfert flexible. Nginx peut adopter différentes stratégies de transfert en fonction de différentes correspondances d'expressions régulières — par exemple, les requêtes se terminant par des fichiers image sont dirigées vers un serveur de fichiers, les pages dynamiques vers un serveur web. Tant que votre regex est correcte et que vous disposez des solutions serveur correspondantes, vous pouvez faire ce que vous voulez. Nginx effectue également des redirections de pages d'erreur et un jugement des exceptions sur les résultats renvoyés. Si un serveur distribué présente une exception, il peut transférer la requête vers un autre serveur et supprimer automatiquement le serveur anormal.


2. Répartition de charge

Nginx propose deux types de stratégies de répartition de charge : les stratégies intégrées et les stratégies étendues. Les stratégies intégrées sont le round robin, le round robin pondéré et le hachage IP. Les stratégies étendues sont d'une imagination débordante — il n'y a rien que vous puissiez imaginer qu'elles ne puissent faire. Vous pouvez vous référer à tous les algorithmes de répartition de charge et les implémenter un par un.

Voici trois schémas pour comprendre l'implémentation de ces trois algorithmes de répartition de charge.

L'algorithme de hachage IP effectue une opération de hachage sur l'IP des requêtes client, puis, en fonction du résultat du hachage, dirige les requêtes provenant de la même IP client vers le même serveur pour traitement, ce qui peut résoudre le problème des sessions non partagées.


3. Mise en cache Web

Nginx peut appliquer différentes politiques de mise en cache à différents fichiers, avec une configuration flexible, et prend en charge FastCGI_Cache, principalement utilisé pour mettre en cache les programmes dynamiques FastCGI. Avec le module tiers ngx_cache_purge, il peut gérer l'ajout et la suppression du contenu mis en cache pour une URL spécifiée.


4. Adresses liées à Nginx

Code source :https://trac.nginx.org/nginx/browser

Site officiel :http://www.nginx.org/


Structure du fichier de configuration Nginx

Si vous avez téléchargé vos fichiers d'installation, vous pouvez tout aussi bien ouvrir le fichier nginx.conf dans le dossier conf. La configuration de base du serveur Nginx, y compris la configuration par défaut, y est stockée.

Le symbole de commentaire dans nginx.conf est :#

Le fichier de configuration Nginx par défaut nginx.conf est le suivant :

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

Structure des fichiers Nginx

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  • 1, Bloc global: Configure des directives qui affectent Nginx globalement. Comprend généralement le groupe d'utilisateurs exécutant le serveur Nginx, le chemin de stockage du PID des processus Nginx, le chemin de stockage des journaux, les inclusions de fichiers de configuration, le nombre de processus worker autorisés, etc.
  • 2, Bloc events: Configure des directives qui affectent le serveur Nginx ou ses connexions réseau avec les utilisateurs. Comprend le nombre maximal de connexions par processus, le modèle piloté par les événements à choisir pour traiter les requêtes de connexion, s'il faut autoriser l'acceptation de plusieurs connexions réseau simultanément, l'activation de la sérialisation de plusieurs connexions réseau, etc.
  • 3, Bloc http: Peut imbriquer plusieurs blocs server et configure la plupart des fonctions telles que le proxy, le cache, les définitions de journaux, ainsi que les configurations de modules tiers. Par exemple, les inclusions de fichiers, les définitions de types MIME, les journaux personnalisés, l'utilisation ou non de sendfile pour transférer des fichiers, le délai d'expiration de connexion, le nombre de requêtes par connexion, etc.
  • 4, Bloc server: Configure les paramètres liés aux hôtes virtuels. Il peut y avoir plusieurs blocs server dans un bloc http.
  • 5, Bloc location: Configure le routage des requêtes et le traitement des différentes pages.

Ci-dessous se trouve un fichier de configuration pour votre compréhension.

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody.
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

Ce qui précède est la configuration de base de Nginx. Les points à noter sont les suivants :

1. Quelques éléments de configuration courants :

  • 1. $remote_addr et $http_x_forwarded_for sont utilisés pour enregistrer l'adresse IP du client ;
  • 2. $remote_user : utilisé pour enregistrer le nom d'utilisateur du client ;
  • 3. $time_local : utilisé pour enregistrer l'heure d'accès et le fuseau horaire ;
  • 4. $request : utilisé pour enregistrer l'URL demandée et le protocole HTTP ;
  • 5. $status : utilisé pour enregistrer l'état de la requête ; le succès est 200 ;
  • 6. $body_bytes_sent : enregistre la taille du contenu du corps du fichier envoyé au client ;
  • 7. $http_referer : utilisé pour enregistrer le lien de la page d'où provient la visite ;
  • 8. $http_user_agent : enregistre les informations pertinentes sur le navigateur du client ;

2. Phénomène du troupeau tonnant : lorsqu'une connexion réseau arrive, plusieurs processus endormis sont réveillés en même temps, mais un seul processus peut obtenir la connexion, ce qui affecte les performances du système.

3. Chaque directive doit se terminer par un point-virgule.

Adresse de l'article original : https://www.cnblogs.com/knowledgesea/p/5175711.html