la configuration et de l'infrastructure Nginx

propriété

  1. La conception modulaire, une bonne évolutivité, le chargement dynamique.
  2. Disponibilité haute
  3. Il prend en charge le déploiement à chaud, les fichiers de configuration de mise à jour non-stop, mise à niveau de version, remplacer le fichier journal.
  4. Faible consommation de mémoire, 10k connexion toujours en vie d'environ 2,5 M en mode inactif.
  5. modèle événementiel, Aio, mmap, sendfile.

réseau de transmission traditionnel

硬盘 >> >> noyau tampon tampon utilisateur >> >> tampon socket noyau 协议 栈

  1. appel système read () pour générer un changement de contexte: passage du mode utilisateur au mode noyau, et ensuite effectuer le DMA de copie, de lire les données du fichier sur le disque dur dans un tampon de noyau.
  2. Copie des données depuis le tampon de noyau dans la mémoire tampon de l'utilisateur, alors le système retourne à l'appel read (), et le temps pour produire un changement de contexte: passage du mode noyau au mode d'emploi.
  3. écriture d'appels système () génère un changement de contexte: passage du mode utilisateur au mode noyau, les données lues à l'étape 2 est copié à l'utilisateur du tampon noyau tampon (2ème données copiées dans la mémoire tampon du noyau), mais ceci est un autre noyau un tampon, le tampon et la douille associée.
  4. retours écriture d'appels système (), la génération d'un changement de contexte: passage du mode noyau au mode utilisateur, puis DMA noyau en mémoire tampon pour copier les données à partir de la pile de protocoles.

Après ouverture sendfile

Disque dur >> noyau tampon (copie rapide au tampon kernelsocket) >> pile de protocoles

  1. L'appel système sendfile () par DMA pour copier les données dans la mémoire tampon sur le disque dur du noyau, alors les données sont copiées directement au noyau du noyau du tampon associé à la douille une autre. Il n'y a pas de commutation entre le mode utilisateur et le mode noyau, le noyau se fait directement à partir d'une copie d'un tampon à un autre tampon.
  2. données DMA est copiée à partir de la pile à kernelbuffer directement, il n'a pas, n'a pas besoin de copier les données du mode utilisateur au mode noyau, juste parce que les données dans le noyau.
  3. sendfile est une performance supérieure à la lecture et de l'interface système d'écriture, sendfile est d'envoyer in_fd contenu à out_fd, mais in_fd ne peut pas être prise, ce qui est le seul descripteur de fichier.
  4. Lorsque Nginx est un serveur de fichiers statiques, les éléments de configuration SENDFILE ouverts peuvent améliorer considérablement les performances de Nginx.
  5. Lorsque Nginx comme proxy inverse à utiliser lorsque, SENDFILE est inutile, parce que quand Nginx proxy inverse. in_fd mais ce n'est pas une prise de poignée de fichier, ce cas ne répond pas aux exigences des paramètres de la fonction SENDFILE.

En résumé, sendfile ne peut accepter le paramètre de poignée, ne peut pas recevoir la socket, ouvrez le serveur statique peut grandement améliorer les performances, le proxy inverse en raison de la prise de transmission, il n'y a pas besoin d'ouvrir.

Nginx fonctions de base

  1. serveur web statique des ressources ne prend pas en charge le module php chemin, supporte l'installation uniquement php-FPM (Tcp: 9000, communication FastCGI), il y a un support de module Apache interne php.
  2. serveur proxy inverse, configuré plusieurs serveurs Web back-end pour sept prévu par Nginx, plus forte que la fonction LVS, mais faible performance, la théorie de la concurrence LVS 4.000.000, Nginx 3 millions.
  3. l'architecture LNMP, si vous voulez ressource dynamique d'accès, FastCGI comme serveur, Nginx en tant que client, la structure doit être pour le client -> serveur Nginx -> php-fpm-> DB.
  4. uwsgi serveurs basés sur Django, similaire LNMP, PHP en Python: client -> serveur Nginx -> (Django, la communication est uWCGI) Python-> DB.
  5. Dynamique des modules de chargement et de déchargement.

Fonction de serveur Web

  1. Hébergement Web: vhosts, include.d.
  2. Prise en charge keep-alive et des liens de pipelines.
  3. Les protocoles d'accès (support à base de tampon-log pour améliorer leurs performances).
  4. Réécriture d'URL: Après avoir visité redirigé vers une nouvelle adresse.
  5. Alias ​​Path: alias alias sauter dans le dossier.
  6. IP et le contrôle d'accès utilisateur, la vitesse, le nombre de liens simultanés peut être contrôlé.
  7. Reconfiguration et le fonctionnement de chauffage en ligne mise à niveau.
  8. L'interface GET Memcached.

l'architecture nginx

  1. Maître démarrer et gérer un petit nombre de travailleurs (la 1worker de 1C, ou auto directe), travailleur n'est pas ouvert beaucoup de fils, le fil ne peut pas voir, mais seulement les différents processus de multiplexage IO.
  2. Il contenu à l'intérieur de chaque travailleur différents modules, http complet, FastCGI, les fonctions Memcache exemple.
  3. fonction Proxy Cache-cache offre locale retenue pour faciliter l' accès des clients de suivi, d' améliorer l' efficacité de l' accès.
    Structure du programme Nginx
  4. Le processus est sans fil, le multiplexage IO, un travailleur reçoit plus de demandes.
  5. Module Catégorie: base, standard, à trois voies
  6. modules de base: Module de base, modules standard: Module HttP (back-end serveur http), le module Mail, le module flux (base de données peut programmer); Module tripartite
  7. Module trop, car il sont souvent utilisés pour comprendre.

La fonction de Nginx

  1. serveur Web statique, html, jpg, css, js, txt et d'autres ressources statiques sont accessibles.
  2. Reliure FastCGI, uwsgi, SCGI autres demandes de ressources dynamiques vers le proxy de protocole.
  3. Demander le transfert de protocole TCP / UDP.
  4. proxy inverse, serveur back-end Nginx Nginx est vu ip, alors que le serveur back-end LVS voir sont les clients d'accès, l'égalité LVS est transparent.

script shell d'installation source Nginx
<> Après avoir écrit l'Internet plus aller, je suis trop paresseux pour écrire

Installation nginx

  1. la source epel libération a été inclus, après l' installation à l' aide nginx -V peut voir le Red Hat activé par défaut TLS SNI activé support: https un serveur pour supporter plusieurs serveurs virtuels
    dans Apache, un serveur permet un seul hôte virtuel https .
  2. /etc/nginx/conf.d/ .conf supportent plusieurs hôtes virtuels, chaque fichier .conf pour écrire un serveur, dans le fichier de configuration principal qui contient /etc/nginx/nginx.conf.
  3. module global est en http {...} avant, http {} contient de nombreux serveur {...}, chaque serveur sont utilisés pour définir un hôte virtuel.

Nginx Configuration globale

Les fichiers de configuration sont les suivants:

user nginx;                    //安装nginx时候就创建了
worker_processes auto;         //多少个CPU对应多少个work进程,用auto即可
worker_rlimit_nofile 65535;    //这个一定要写,支持多少用户并发

# (worker_cpu_affinity auto) 或者直接根据CPU个数绑定   //CPU绑定,提高命中缓存几率,亲缘性
# 4c: (worker_cpu_affinity 0001 0010 0100 1000)
# 8c: (worker_cpu_affinity 00000001 00000010 ...)
# ps axo pid,cmd,psr |grep nginx    //查看当前worker都是绑定在哪个CPU上的

# worker_priority <num>;     //[-20,19],指定nice值,越小优先级越高

error_log /var/log/nginx/error.log;     //错误日志所在位置,可以发送到远程日志服务器上
                //还可以定义日志级别 debug|info|notice|warn|error|crit|alert|emerg
pid /run/nginx.pid;                     //pid所在文件夹

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;    //使用include可供选择模块放在不同地方
# load_module <file>;                       //具体加载哪个模块
# daemon on|off;                            //nginx是否编程一个后台守护进程,默认就是on,
                                            //如果off后再启动nginx就会卡在界面上,适合调试测试环境
# master process on|off;                    //默认是on的,如果off,重启后只有一个nginx进程,不会出现master_worker多个进程
/* 
这段没什么说的,文件打开最大用户数和最大进程数
vim /etc/security/limit.conf 
#hard limit ,嚴格的設定,必定不能超過這個設定的數值;
#soft limit ,警告的設定,可以超過這個設定值,但是若超過則有警告訊息。 
*   soft noproc   65535  
*   hard noproc   65535  
*   soft nofile   65535  
*   hard nofile   65535 
 */
events {
    worker_connections 1024;  //每个worker支持的最大连接数,总数:worker_processes * worker_connections
    use epoll;                //默认就是epoll,写不写都行
    # accept_mutex on|off;    //默认on就好了,来了连接几个worker轮流处理,off的话则会惊群可能造成性能下降。
}

configuration nginx Http:

La plus part importante: ngx_http_core_module

Une configuration de prise:

   server {                           //这个可以定义在conf.d的文件夹下
       listen [:PORT]PORT;            //监听地址和端口,default为 *:80,IP:PORT也可以,可以绑定具体ip或所有ip。                 
       server_name SERVER_NAME;       //一般都是www.xx.com类似域名
       location {
      		 root /PATH/TO/HTML/LOCATION;   //可以写绝对路径,如果是相对路径要看default root是哪儿,yum安装/usr/share/nginx/html/为根目录
       }                                      
   }	                             //root 对应路径下必须为 index.html,否则403 forbbiden

Ecoutez []

  1. PORT | IP: PORT | unix: <emplacement du socket>, ces types de formats sont pris en charge.
  2. default_server des mots-clés, généralement utilisés dans le dos d'écouter l'adresse, l'accès par défaut sans numéro de port IP, sélectionnez l'hébergement web serveur par défaut.
  3. ssl: connexions ssl est limitée seulement en mesure de fournir des services.
  4. backlog =: la file d'attente de sauvegarde, dépasse la limite maximale après la session, la nouvelle demande de sauvegarde entre la longueur de la file d'attente, par exemple, 20.000 connexions simultanées sur une connexion 5000 = 6000 est réglé, ce que cela signifie.
  5. rcvbuf =: recevoir la taille de la mémoire tampon, le temps d'accès client nginx, sont placés dans la première file d' attente de la mémoire tampon;
    sndbuf =: Envoyer la taille de la mémoire tampon, nginx renvoyer des données vers le client, également en premier dans la file d' attente de mémoire tampon.

nom du serveur []

  1. Supports et wildcards correspondance d'expression régulière: nom_serveur ~ * .a.com, par DNS joker mis en place aussi longtemps que vous pouvez juger, le site xacom seront dirigés vers la finale dans la première www.a.com.
  2. Mode match n'est pas recommandé, consommer les ressources du serveur, précisément le meilleur site.

EMPLACEMENT [] peut être placé serveur {...} et l' emplacement {...}

  1. Doit être compris racine définie dans la distinction et l'emplacement extérieur de l'emplacement .

  2. root: c'est rien à dire, le chemin du site, le répertoire racine pour déterminer un bon emplacement, l' emplacement peut être placé à l' extérieur, peut pointer vers un fichier.

  3. SITUATION / ...
    // emplacement correspondant de l'URL, assurez - vous de comprendre cette phrase, lieu / merde signifie que http: // <URL> / merde / ce chemin.

  4. Comprendre la relation entre la racine et l'emplacement:

    location /shit {        // URL:http://www.xx.com/shit/ 这个是URL拼接
       root /data/damn      // 真实路径 /data/damn/shit/<xx资源>,真实存在的东西
       }
       // 如果访问 http://<网址>/shit/<xx资源> 这个路径,
       // 取得的资源是在 /data/damn/shit/<xx资源>,这时location外部的root定义时不生效的
    
  5. location = index.html {...} // une correspondance exacte dans un fichier, ne peut accéder http: // <URL> /, les choses sont un peu en retard n'est pas une correspondance exacte, http: // <URL> / xx ne va pas a.

  6. emplacement question prioritaire, l' emplacement prioritaire s'il y a une correspondance, la racine est supérieure à celle de la définition externe, à faible priorité élevée ~ ^ = { / / XX}, à savoir la priorité la plus basse sans signe *.

    生产中一般不会弄得这么复杂,消耗CPU计算资源
    Let’s illustrate the above by an example:
    
    location = / {            //匹配优先级最高       
        [ configuration A ]
    }
    
    location / {              //如果上面不匹配才轮到这儿,优先级最低
        [ configuration B ]
    }
    
    location /documents/ {    //比 / 更精确
        [ configuration C ]
    }
    
    location ^~ /images/ {    //左匹配比右匹配优先级高
        [ configuration D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {     //右匹配比不带任何符号的优先级高,即大于B,C
        [ configuration E ]
    }
    /*
    The “/” request will match configuration A, 
    the “/index.html” request will match configuration B, 
    the “/documents/document.html” request will match configuration C, 
    the “/images/1.gif” request will match configuration D,
    the “/documents/1.jpg” request will match configuration E.
    */
    
  7. alias / xx et root / xx distinction
    alias ne peut être utilisé dans un endroit

    location /shit {
    	root /xx         //匹配 /xx/shit/下的资源
    	alias /xx        //匹配 /xx下的资源,alias相当于覆盖
    }
    
  8. page d'erreur, tel que défini ci-dessous, vous pouvez donc définir votre propre page 404

    error_page 404 /404.html;
    	location /404.html {
        	root /data/a/error/;
    	}
    

    Afin d'éviter Détournement du navigateur page 404 360, le protocole suivant peut être utilisé pour empêcher les pages détournement:

    error_page 404 =200 /404.html;         //404依旧是404,但是对于浏览器响应头返回的是200,这样360就会认为这是个正常的页面,不会劫持了
     	location /404.html {
         	root /data/a/error/;
     	}
    
  9. try_files xx xx xx XX: conformément à l'ordre de l'inspection, si le n-1 précédent n'existe pas, puis retourne le XX finale comme dernier réoriente.

Deuxièmement, d'autres éléments de configuration http {...}

  1. tcp_nodelay on | off:
    connexion en mode Maintien en vie est activé options tcp_nodelay: Vous pouvez utiliser le serveur et l' emplacement dans
    le délai d' expulsion, puis combiner plusieurs demandes // peu de pression sur le serveur, mais se réunissent envoyer affecter l'expérience client
    sur lorsque le retard ne se transmet pas à envoyer un. // serveur a consommé, mais l'expérience client est bon, généralement ouvert.

  2. sendfile on | off:
    désactivé par défaut, vous ne pouvez pas configurer un serveur proxy inverse cela, mais les ressources statiques d'accès est fortement recommandé de lancer le processus d' économie, puis envoyer socketbuf noyau à partir du noyau copié dans l'espace utilisateur.

  3. server_token on | off | build | chaîne
    : si la version d'affichage des en- têtes de réponse du serveur de messages Nginx, serveur et l' emplacement qui peut être utilisé
    exposée version nginx La sécurité du réseau est très sûr, facile pour un pirate de trouver la version correspondante de la vulnérabilité à l' attaque, il est recommandé utiliser au large, pour améliorer la sécurité.
    Cette version commerciale peut être une chaîne, il suffit d' écrire une chaîne de caractères, comme le site Jingdong et a constaté que le nom du serveur JDWS, pas Nginx.

  4. keepalive_timeout: Paramètres généraux 30 secondes __gVirt_NP_NNS_NNPS<__, selon la situation du trafic.

  5. keepalive_requests: encore une fois la longueur du nombre maximum de connexions autorisées demande de ressources.

  6. keepalive_disable none | navigateur: Quel navigateur empêche la connexion longue.

  7. send_timeout <time>: longueur du paquet de réponse au client envoie un délai d' attente.

  8. client_body_buffer_size 128k:
    la réception d' une taille de mémoire tampon de requête de client de la partie de corps du paquet, la valeur par défaut 16K, dépassant la taille du disque de travail
    : client_max_body_size 10M
    recevoir un corps de message de requête de client est 1OM maximale;
    ; client_body_temp_path 1 2 2.
    Après client_body_temp_path le filtre portion est constituée par une valeur de hachage, chaque fichier a un calcul de la valeur de hachage, prise de l'arrière 5, 122 attribué par le rapport, la formation / 1/2/2 partie de stockage de motif de trajet de fichier du corps final.

Publié 49 articles originaux · louange gagné 18 · vues 3999

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41047549/article/details/90321744
conseillé
Classement