À propos de l'architecture Nginx

不言
Libérer: 2023-03-25 13:20:01
original
1606 Les gens l'ont consulté

Nginx-Architecture

1. FAQ Nginx

1. Plusieurs hôtes virtuels avec le même nom de serveur ont un accès prioritaire

# 三个配置文件:

# testserver1:
server_name testserver1 www.rona1do.top;
root /opt/app/code1;

# testserver2:
server_name testserver2 www.rona1do.top;
root /opt/app/code2;

# testserver3:
server_name testserver3 www.rona1do.top;
root /opt/app/code3;
Copier après la connexion
Configurez les trois configurations ci-dessus avec le même nom_serveur Un hôte virtuel accédera en premier à testserver1. La priorité d'accès est basée sur l'ordre de lecture du serveur, c'est-à-dire l'ordre des noms de fichiers.

2. Priorité de correspondance d'emplacement

  • = : effectuer une correspondance exacte de caractères ordinaires, c'est-à-dire une correspondance complète

  • ^ ~ : Indique une correspondance de caractères normale, utilisez la correspondance de préfixe

  • ~ ~ : Indique une correspondance régulière (l'ajout de n'est pas sensible à la casse)

Les priorités ci-dessus diminuent de haut en bas. Les deux premières correspondances sont des correspondances exactes, ils ne rechercheront plus vers le bas. Si une correspondance régulière correspond à la chaîne correspondante, ils continueront à chercher vers le bas pour voir. s'il y en a plus.

3. Utilisation des try_files de Nginx

Vérifiez si les fichiers existent dans l'ordre
# 先检查对应的url地址下的文件存不存在,如果不存在找/index.php,类似于重定向
location / {
    try_file $uri /index.php;
}
Copier après la connexion

4 La différence entre l'alias et la racine de Nginx

    <🎜. >
  • root

location /request_path/image/ {
    root /local_path/image/;
}
# 请求:http://www.rona1do.top/request_path/image/cat.png
# 查询: /local_path/image/request_path_image/cat.png
Copier après la connexion
  • alias

location /request_path/image/ {
    alias /local_path/image/;
}
# 请求:http://www.rona1do.top/request_path/image/cat.png
# 查询: /local_path/image/cat.png
Copier après la connexion
5. it La véritable adresse IP de l'utilisateur

  • Dans le cas d'un proxy, remote_addr obtient l'adresse IP du proxy, pas celle de l'utilisateur

  • x- forwarded -for est facile à falsifier

Solution générale : Vous pouvez négocier avec l'agent de premier niveau et définir les informations d'en-tête x_real_ip pour enregistrer l'adresse IP de l'utilisateur
set x_real_ip=$remote_addr
6. Codes d'erreur courants dans Nginx

  • 413 : entité de demande trop grande

    • Limite de fichier de téléchargement par l'utilisateur : client_max_body_size

  • 502 : passerelle incorrecte

    • Le service backend ne répond pas

  • 504 : délai d'expiration de la passerelle

    • Délai d'expiration du service backend

2 Optimisation des performances de Nginx

1. Considérations sur l'optimisation des performances

  • Goulot d'étranglement de la structure actuelle du système

    • Indicateurs d'observation (en haut. afficher l'état, les journaux, etc.), tests de résistance

  • Comprendre le modèle économique

    • Type d'activité de l'interface, système structure hiérarchique

  • Performances et sécurité

    • Configurer un pare-feu qui accorde trop d'attention à la sécurité réduira les performances

2. Outil de test de stress de l'interface ab

  1. Installation

    • yum install httpd-tools

  2. Utilisez

    • ab -n 2000 -c 2 http://127.0.0.1/

    • -n : Nombre total de requêtes

    • -c : Nombre de requêtes simultanées

    • -k : S'il faut activer les connexions longues

3. Optimisation des performances du système et de Nginx

  1. Gestion de fichiers

    • LinuxUnix tous les fichiers ensemble, le descripteur de fichier est un index

  2. Méthode de paramétrage

    - 系统全局性修改、用户局部性修改、进程局部性修改
    Copier après la connexion
Système modification globale et modification locale utilisateur :

Fichier de configuration : /etc/security/limits.conf
# root:root用户
root soft nofile 65535
# hard 强制限制、soft 超过会发送提醒(邮件等),不限制
root hard nofile 65535
# *:所有用户
*     soft nofile 65535
*     hard nofile 65535
Copier après la connexion
Modification de la localité du processus

Fichier de configuration : /etc/nginx/nginx.conf
# 针对nginx进程进行设置
worker_rlimit_nofile 35535;
Copier après la connexion
4. Affinité CPU

Affinité CPU : Lier le processus/thread au CPU L'avantage le plus intuitif est d'augmenter le taux de réussite du cache CPU. , réduisant ainsi la perte d'accès à la mémoire.
  • Nombre de processeurs physiques :

    cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

  • Cœurs de processeur :

    cat /proc/cpuinfo | grep "cpu cores" | uniq

  • Utilisation du cœur et du processus : appuyez d'abord sur

    , puis appuyez sur top1

# /etc/nginx/nginx.conf

# nginx建议数量跟cpu核心数保持一致
worker_processes 2;
# 配置cpu亲和
worker_cpu_affinity 0000000000000001 0000000000000010
# 与上一行等价,自动对应(Nginx1.9版本以上)
worker_cpu_affinity auto
Copier après la connexion

pour afficher la liaison du processeur de Nginx :
ps -eo pid,args,psr | grep [n]ginx

5. Optimisation de la configuration générale de Nginx

# nginx服务使用nginx用户(最好不要使用root用户)
user nginx;
# cpu亲和(最好跟核心数保持一致)
worker_processes 2;
worker_cpu_affinity auto;

# error的日志级别设置为warn
error_log  /var/log/nginx/error.log warn; 
pid        /var/run/nginx.pid;

# 文件句柄对于进程间的限制(建议1w以上)
worker_rlimit_nofile 35535;

# 事件驱动器
events {
    use epoll;
    # 限制每一个worker_processes进程可以处理多少个连接
    worker_connections  10240;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    #字符集(服务端响应发送的报文字符集)
    charset utf-8;
    
    log_format  main  &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;
                      &#39;$status $body_bytes_sent "$http_referer" &#39;
                      &#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;
    
    access_log  /var/log/nginx/access.log  main;
    
    # 静态资源的处理
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    # gzip压缩(对于IE6或以下版本对于gzip压缩支持不是很好)
    gzip  on;
    # IE6或以下不进行压缩(兼容)
    gzip_disable "MSIE [1-6]\.";
    gzip_http_version 1.1;
    
    include /etc/nginx/conf.d/*.conf;
}
Copier après la connexion
3. Sécurité de Nginx

1. Comportements malveillants courants

  • Comportement du robot d'exploration, l'exploration malveillante et le vol de ressources

    • La fonction anti-hotlink de base empêche les utilisateurs malveillants d'explorer facilement les données externes du site Web

    • secure_link_module, améliore la vérification du cryptage et l'efficacité de la sécurité des données, convient aux données importantes de base telles que les données importantes de base

    • access_module, assure la prévention et le contrôle IP des données en arrière-plan et de certains services utilisateur

2. 常见的攻击手段

  • 后台密码撞库,通过猜测密码字典不断对后台系统尝试性登录,获取后台登录密码

    • 后台登录密码复杂度

    • access_module,对后台提供IP防控

    • 预警机制(一个IP在一段时间内重复不断请求等)

3. 文件上传漏洞

利用一些可以上传的接口将恶意代码植入到服务器中,再通过url去访问以执行代码
  • 例:http://www.rona1do.top/upload...(Nginx将1.jpg作为php代码执行)

# 文件上传漏洞解决办法
location ^~ /upload {
    root /opt/app/images;
    if ($request_file ~* (.*)\.php){
        return 403;
    }
}
Copier après la connexion

4. SQL注入

利用未过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的SQL代码
  • Nginx+LUA配置WAF防火墙防止SQL注入

À propos de larchitecture Nginx

  • ngx_lua_waf 下载地址

使用waf步骤:

  1. git clone https://github.com/loveshell/ngx_lua_waf.git

  2. cd ngx_lua_waf

  3. mv ngx_lua_waf /etc/nginx/waf

  4. vim /etc/nginx/waf/conf.lua,修改RulePath为对应路径(/etc/nginx/waf/wafconf)

  5. vim /etc/nginx/waf/wafconf/post,加入一行,\sor\s+,放sql注入的正则

  6. 集成waf:

# /etc/nginx/nginx.conf
lua_package_path "/etc/nginx/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /etc/nginx/waf/init.lua;
access_by_lua_file /etc/nginx/waf/waf.lua
Copier après la connexion
  1. reload Nginx

5. 复杂的访问攻击中CC攻击

  • waf/conf.lua配置文件中打开防cc攻击配置项

    • CCDeny="on"

    • CCrate="100/60" #每60秒100次请求

四、Nginx总结

  1. 定义Nginx在服务体系中的角色

  • 静态资源服务

  • À propos de larchitecture Nginx

  • 代理服务

  • À propos de larchitecture Nginx

  • 动静分离

  • 设计评估

    • LVS、keepalive、syslog、Fastcgi

    • 用户权限、日志目录存放

    • CPU、内存、硬盘

    • 硬件

    • 系统

    • 关联服务

  • 配置注意事项

    • 合理配置

    • 了解原理(HTTP、操作系统...)

    • 关注日志

    相关推荐:

    nginx架构与实现

    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!

    Étiquettes associées:
    source:php.cn
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!