Maison  >  Article  >  Opération et maintenance  >  Comment Nginx peut-il déployer efficacement plusieurs sites sur un seul serveur ?

Comment Nginx peut-il déployer efficacement plusieurs sites sur un seul serveur ?

王林
王林avant
2023-05-14 16:13:062608parcourir

Jetons un œil à nos besoins. J'ai trois projets de sites Web à déployer (correspondant tour à tour à trois noms de domaine). Un serveur Linux est fourni pour permettre l'accès au nom de domaine correspondant pour accéder au site Web correspondant.

Jetons un coup d'œil au diagramme d'architecture que j'ai conçu pour résoudre ce problème :

Comment Nginx peut-il déployer efficacement plusieurs sites sur un seul serveur ?

Ici, nous supposons que l'adresse IP publique du serveur Linux dans le diagramme est 192.168.2.100, puis supposons que nous devons construisez ces trois serveurs sur ce serveur : www.nginxtest.net, admin.nginxtest.net, app.nginxtest.net.

D'accord, configurons-le en détail :

1. Configurez le proxy inverse nginx

Nous nous connectons toujours à ssh d'abord, puis effectuons les opérations suivantes (généralement, il n'est pas recommandé de modifier le fichier de configuration principal par défaut nginx. conf, nous créons donc un nouveau fichier de configuration d'équilibrage de charge fxdl.conf assure la sécurité du serveur, comme suit) :

$ ssh root@192.168.2.100             //ssh连接
# cd /usr/local/nginx/conf
# touch fxdl.conf                 //创建代理配置文件
# vi fxdl.conf                  //用vi编辑器打开文件,然后按键盘的i

Remarque : dans l'éditeur vi, appuyez sur i sur le clavier pour entrer dans l'état d'insertion, et appuyez sur esc pour quitter le insérer l'état.

Entrez ensuite le code de configuration suivant (personnalisez la partie nom de domaine avec votre propre nom de domaine et activez la partie commentaire si nécessaire) :

#设置低权限用户,为了安全而设置的
user nobody;

#工作衍生进程数
worker_processes 4;

#设置错误文件存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#设置pid存放路径(pid是控制系统中重要文件)
#pid logs/nginx.pid;

#设置最大连接数
events{
  worker_connections 1024;
}

http {
  #用来设置日志格式
  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 /data/wwwlogs/access_nginx.log main;

  #开启高效文件传输模式
  sendfile      on;
  #防止网络阻塞
  tcp_nopush     on;
  #防止网络阻塞
  tcp_nodelay     on;
  #长连接超时时间,单位是秒
  keepalive_timeout  65;
  #散列表的冲突率,默认1024,越大则内存消耗更多,但散列key的冲突率会降低,检索速度就更快
  types_hash_max_size 2048;

  #文件扩展名与文件类型映射表
  include       /usr/local/nginx/conf/mime.types;
  #默认文件类型
  default_type    application/octet-stream;

  #include /etc/nginx/conf.d/*.conf;

  #主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询
  upstream tomcat_client {
    server localhost:8080;
  }

  #开启gzip压缩,开启后,访问网页会自动压缩
  #gzip on;

  #指定服务器的名称和参数
  server {
    listen 80;
    server_name app.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      #设置代理
      proxy_set_header host $host;
      proxy_set_header x-real-ip $remote_addr;
    }
  }
  server {
    listen 80;
    server_name admin.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      proxy_set_header host $host;
      proxy_set_header x-real-ip $remote_addr;
    }
  }
  server {
    listen 80;
    server_name www.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      proxy_set_header host $host;
      proxy_set_header x-real-ip $remote_addr;
    }
    location = / {
      #判断是否为手机移动端
      if ($http_user_agent ~* '(iphone|ipod|ipad|android|windows phone|mobile|nokia)') {
        rewrite . http://www.nginxtest.net/phone break;
      }
      rewrite . http://www.nginxtest.net/pc break;
    }
  }
}

D'accord, c'est aussi simple que cela, le proxy inverse nginx est configuré. Descendez et configurez Tomcat :

2. Configurez Tomcat pour déployer plusieurs sites

$ ssh root@192.168.2.100             //ssh连接
# cd /usr/local/tomcat
# cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml_bk //备份server.xml原文件
# vi server.xml                  //用vi编辑器打开文件,然后按键盘的i

Nous modifions server.xml et ajoutons le nœud hôte suivant sous le nœud moteur (le nom de domaine et le répertoire du projet de site dans le nœud doivent être personnalisé et modifié selon le vôtre) :

<host name="www.nginxtest.net" unpackwars="true" autodeploy="true"
      xmlvalidation="false" xmlnamespaceaware="false">
  <context path="/" docbase="/data/wwwroot/www.nginxtest.net/webcontent" reloadable="true"/>
</host>
<host name="admin.nginxtest.net" unpackwars="true" autodeploy="true"
      xmlvalidation="false" xmlnamespaceaware="false">
  <context path="/" docbase="/data/wwwroot/admin.nginxtest.net/webcontent" reloadable="true"/>
</host>
<host name="app.nginxtest.net" unpackwars="true" autodeploy="true"
      xmlvalidation="false" xmlnamespaceaware="false">
  <context path="/" docbase="/data/wwwroot/app.nginxtest.net/webcontent" reloadable="true"/>
</host>

Remarque : Si vous souhaitez accéder directement à l'adresse IP publique sans l'effet de page Web, supprimez simplement le

<host name="localhost" ..>..</host>

sous le nœud du moteur.

Après avoir terminé la saisie, appuyez sur Échap, puis entrez :

:wq!

pour enregistrer et quitter le fichier de configuration. À ce stade, Tomcat est également configuré.

Ensuite, nous pouvons placer nos codes d'ingénierie de plusieurs sites sous /data/wwwroot/. Ensuite, démarrez nginx et Tomcat.

Vous pouvez maintenant l'essayer et accéder aux noms de domaine de deuxième niveau www.nginxtest.net, admin.nginxtest.net, app.nginxtest.net de chaque site respectivement. Nous avons constaté que nous pouvons accéder au site correspondant (et à chacun. site Déployez un serveur séparément et voyez le même effet).

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