Maison >Opération et maintenance >Nginx >Méthode de structure du fichier de configuration Nginx

Méthode de structure du fichier de configuration Nginx

王林
王林avant
2023-05-13 08:34:161515parcourir

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

nginx est riche en fonctions et peut être utilisé comme serveur http, serveur proxy inverse et serveur de messagerie. Prend en charge fastcgi, SSL, hôte virtuel, réécriture d'URL, gzip et d'autres fonctions. Et prend en charge de nombreuses extensions de modules tiers. La stabilité de

nginx, son ensemble de fonctionnalités, ses exemples de fichiers de configuration et sa faible consommation de ressources système le placent en tête du peloton, avec un taux d'utilisation de 12,18 % des sites Web actifs dans le monde, soit environ 22,2 millions de sites Web.

Fonctions communes de Nginx
1. proxy http, proxy inverse : comme l'une des fonctions les plus couramment utilisées des serveurs Web, en particulier le proxy inverse.

Ici, je vais vous donner deux photos pour expliquer l'agent positif et l'agent réactif. Vous pouvez lire les informations pour les détails spécifiques.

Méthode de structure du fichier de configuration Nginx

nginx offre des performances stables lorsqu'il est utilisé comme proxy inverse et peut fournir des fonctions de transfert avec une configuration flexible. nginx peut adopter différentes stratégies de transfert basées sur différentes correspondances régulières. Par exemple, le serveur de fichiers à la fin du fichier image et le serveur Web pour les pages dynamiques, tant que vos règles habituelles sont écrites correctement et qu'il existe une solution de serveur correspondante. vous pouvez faire ce que vous voulez du jeu. Et nginx effectue un saut de page d'erreur, un jugement d'exception, etc. sur les résultats renvoyés. Si le serveur distribué est anormal, il peut retransmettre la requête vers un autre serveur puis supprimer automatiquement le serveur anormal.

2. Équilibrage de charge

nginx propose deux types de stratégies d'équilibrage de charge : les stratégies intégrées et les stratégies étendues. Les stratégies intégrées sont l'interrogation, l'interrogation pondérée et le hachage IP. La stratégie d'expansion est aussi imaginative qu'inimaginable. Il n'y a rien auquel vous ne puissiez penser qu'elle ne puisse faire. Vous pouvez vous référer à tous les algorithmes d'équilibrage de charge pour les trouver un par un et les implémenter.

Les trois images ci-dessus, comprennent la mise en œuvre de ces trois algorithmes d'équilibrage de charge

Méthode de structure du fichier de configuration Nginx

algorithme de hachage IP, effectue une opération de hachage sur l'IP demandée par le client, puis distribue la demande pour la même IP client au même client basé sur le résultat du hachage. Le traitement sur un serveur peut résoudre le problème de la session non partagée.

Méthode de structure du fichier de configuration Nginx

3. La mise en cache Web

nginx peut effectuer différents traitements de cache sur différents fichiers, avec une configuration flexible, et prend en charge fastcgi_cache, qui est principalement utilisé pour mettre en cache les programmes dynamiques fastcgi. En coopération avec le tiers ngx_cache_purge, le contenu du cache d'URL spécifié peut être ajouté et supprimé pour être géré.

4. Adresses liées à nginx

2. Structure du fichier de configuration nginx
Si vous avez téléchargé votre fichier d'installation, vous souhaiterez peut-être ouvrir le fichier nginx.conf dans le dossier conf, la configuration de base de nginx. serveur, la valeur par défaut La configuration est également stockée ici.

Dans le bit de symbole de commentaire de nginx.conf#

La structure du fichier nginx, les étudiants qui débutent peuvent y jeter un deuxième regard.

Configuration par défaut

Structure de fichier nginx

...    #全局块

events {   #events块
 ...
}

http  #http块
{
 ... #http全局块
 server  #server块
 { 
  ...  #server全局块
  location [pattern] #location块
  {
   ...
  }
  location [pattern] 
  {
   ...
  }
 }
 server
 {
  ...
 }
 ...  #http全局块
}

1 Bloc global : configurez les instructions qui affectent nginx globalement. Généralement, il existe un groupe d'utilisateurs pour exécuter le serveur nginx, le chemin de stockage du pid du processus nginx, le chemin de stockage des journaux, l'introduction du fichier de configuration, le nombre de processus de travail autorisés à être générés, etc.

2. Bloc Événements : La configuration affecte le serveur nginx ou la connexion réseau avec l'utilisateur. Il existe un nombre maximum de connexions par processus, quel modèle basé sur les événements choisir pour gérer les demandes de connexion, s'il faut autoriser l'acceptation simultanée de plusieurs connexions réseau, activer la sérialisation de plusieurs connexions réseau, etc.

3. Bloc http : Vous pouvez imbriquer plusieurs serveurs, configurer des proxys, des caches, des définitions de journaux et d'autres fonctions et configurations de modules tiers. Tels que l'introduction du fichier, la définition du type MIME, la personnalisation du journal, l'utilisation ou non de sendfile pour transférer des fichiers, le délai d'expiration de la connexion, le nombre de demandes de connexion uniques, etc.

4. Bloc serveur : configurez les paramètres pertinents de l'hôte virtuel. Il peut y avoir plusieurs serveurs dans un seul http.

5. Bloc localisation : Configurez le routage des demandes et le traitement des différentes pages.

Ce qui suit est un fichier de configuration pour tout le monde, pour comprendre, et il est également installé sur une machine de test que j'ai construite pour vous donner un exemple.

########### 每个指令必须有分号结束。#################
#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 Vous devez faire attention aux points suivants :

1.$remote_addr et $http_x_forwarded_for sont utilisés pour enregistrer l'adresse IP du client ; 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 demande ; le succès est de 200, 6.$body_bytes_s ent : enregistre la taille du contenu principal du fichier envoyé au client ; 7. $http_referer : utilisé pour enregistrer le lien vers la page accessible à partir de ; 8. $http_user_agent : enregistre les informations pertinentes du client ; navigateur ;

2. Phénomène de troupeau tonitruant : lorsqu'une connexion réseau arrive, plusieurs processus en veille sont réveillés par des collègues, mais un seul processus peut obtenir la connexion, ce qui affectera les performances du système.

3、每个指令必须有分号结束。

下面看下其他网友的补充:

在此记录下nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络.

#运行用户
user www-data;  
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;

#全局错误日志及pid文件
error_log /var/log/nginx/error.log;
pid    /var/run/nginx.pid;

#工作模式及连接数上限
events {
  use  epoll;       #epoll是多路复用io(i/o multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
  worker_connections 1024;#单个后台worker process进程的最大并发链接数
  # multi_accept on; 
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
   #设定mime类型,类型由mime.type文件定义
  include    /etc/nginx/mime.types;
  default_type application/octet-stream;
  #设定日志格式
  access_log  /var/log/nginx/access.log;

  #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
  #必须设为 on,如果用来进行下载等应用磁盘io重负载应用,可设置为 off,以平衡磁盘与网络i/o处理速度,降低系统的uptime.
  sendfile    on;
  #tcp_nopush   on;

  #连接超时时间
  #keepalive_timeout 0;
  keepalive_timeout 65;
  tcp_nodelay    on;
  
  #开启gzip压缩
  gzip on;
  gzip_disable "msie [1-6]\.(?!.*sv1)";

  #设定请求缓冲
  client_header_buffer_size  1k;
  large_client_header_buffers 4 4k;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;

  #设定负载均衡的服务器列表
   upstream mysvr {
  #weigth参数表示权值,权值越高被分配到的几率越大
  #本机上的squid开启3128端口
  server 192.168.8.1:3128 weight=5;
  server 192.168.8.2:80 weight=1;
  server 192.168.8.3:80 weight=6;
  }


  server {
  #侦听80端口
    listen    80;
    #定义使用www.xx.com访问
    server_name www.xx.com;

    #设定本虚拟主机的访问日志
    access_log logs/www.xx.com.access.log main;

  #默认请求
  location / {
     root  /root;   #定义服务器的默认网站根目录位置
     index index.php index.html index.htm;  #定义首页索引文件的名称

     fastcgi_pass www.xx.com;
     fastcgi_param script_filename $document_root/$fastcgi_script_name; 
     include /etc/nginx/fastcgi_params;
    }

  # 定义错误提示页面
  error_page  500 502 503 504 /50x.html; 
    location = /50x.html {
    root  /root;
  }

  #静态文件,nginx自己处理
  location ~ ^/(images|javascript|js|css|flash|media|static)/ {
    root /var/www/virtual/htdocs;
    #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
    expires 30d;
  }
  #php 脚本请求全部转发到 fastcgi处理. 使用fastcgi默认配置.
  location ~ \.php$ {
    root /root;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param script_filename /home/www/www$fastcgi_script_name;
    include fastcgi_params;
  }
  #设定查看nginx状态的地址
  location /nginxstatus {
    stub_status      on;
    access_log       on;
    auth_basic       "nginxstatus";
    auth_basic_user_file conf/htpasswd;
  }
  #禁止访问 .htxxx 文件
  location ~ /\.ht {
    deny all;
  }
   
   }
}

以上是一些基本的配置,使用nginx最大的好处就是负载均衡

如果要使用负载均衡的话,可以修改配置http节点如下:

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
   #设定mime类型,类型由mime.type文件定义
  include    /etc/nginx/mime.types;
  default_type application/octet-stream;
  #设定日志格式
  access_log  /var/log/nginx/access.log;

  #省略上文有的一些配置节点

  #。。。。。。。。。。

  #设定负载均衡的服务器列表
   upstream mysvr {
  #weigth参数表示权值,权值越高被分配到的几率越大
  server 192.168.8.1x:3128 weight=5;#本机上的squid开启3128端口
  server 192.168.8.2x:80 weight=1;
  server 192.168.8.3x:80 weight=6;
  }

  upstream mysvr2 {
  #weigth参数表示权值,权值越高被分配到的几率越大

  server 192.168.8.x:80 weight=1;
  server 192.168.8.x:80 weight=6;
  }

  #第一个虚拟服务器
  server {
  #侦听192.168.8.x的80端口
    listen    80;
    server_name 192.168.8.x;

   #对aspx后缀的进行负载均衡请求
  location ~ .*\.aspx$ {

     root  /root;   #定义服务器的默认网站根目录位置
     index index.php index.html index.htm;  #定义首页索引文件的名称

     proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表

     #以下是一些反向代理的配置可删除.

     proxy_redirect off;

     #后端的web服务器可以通过x-forwarded-for获取用户真实ip
     proxy_set_header host $host;
     proxy_set_header x-real-ip $remote_addr;
     proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
     client_max_body_size 10m;  #允许客户端请求的最大单文件字节数
     client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
     proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
     proxy_send_timeout 90;    #后端服务器数据回传时间(代理发送超时)
     proxy_read_timeout 90;     #连接成功后,后端服务器响应时间(代理接收超时)
     proxy_buffer_size 4k;       #设置代理服务器(nginx)保存用户头信息的缓冲区大小
     proxy_buffers 4 32k;        #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
     proxy_busy_buffers_size 64k;  #高负荷下缓冲大小(proxy_buffers*2)
     proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

    }

   }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer