Maison  >  Article  >  Opération et maintenance  >  Comment nginx implémente l'équilibrage de charge de plusieurs services de géoserveur

Comment nginx implémente l'équilibrage de charge de plusieurs services de géoserveur

PHPz
PHPzavant
2023-05-17 11:04:051423parcourir

Vue d'ensemble

Afin d'améliorer la vitesse d'accès au service, de réduire la pression sur le service géoserveur et d'éviter les problèmes avec les nœuds de service qui affectent la stabilité de l'accès au service, nous résolvons généralement le problème en déployant plusieurs géoserveurs. Cependant, après. Pour le déploiement de plusieurs géoserveurs, nous avons besoin d'une interface unifiée à utiliser, et nginx peut très bien répondre à ces besoins. Cet article explique comment réaliser l'équilibrage de charge de plusieurs services de géoserveur via nginx.

Effet de réussite

Comment nginx implémente léquilibrage de charge de plusieurs services de géoserveur

Réalisation

1. Déploiement multi-géoserveur

Afin de maintenir la cohérence du service de géoserveur, nous configurons d'abord un service de géoserveur. Après la configuration, copions le Tomcat déployé et en clonons plusieurs. is La démonstration en copie deux (trois géoserveurs au total), modifie le port Tomcat afin que les trois ports n'entrent pas en conflit et démarre respectivement trois Tomcats après la copie.

2. Configuration de nginx

Modifiez le fichier nginx.conf Les informations de configuration sont les suivantes :

#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;
    
    # 反向代理配置
    upstream server_list{
       # 这个是tomcat的访问路径
       server localhost:8081;
       server localhost:8082;
       server localhost:8083;
    }
    server {
        listen       80;
        server_name  localhost;
     
        location / {
            add_header 'Access-Control-Allow-Origin' $http_origin;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain; charset=utf-8';
                add_header 'Content-Length' 0;
                return 204;
            }
            root   html;
            proxy_pass http://server_list;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Après avoir configuré nginx, démarrez nginx.

3. Appel frontal

Selon la configuration ci-dessus, le port de nginx est 80, donc l'adresse du géoserveur est http://localhost/geoserver Le code d'appel en ol est le suivant :

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>OpenLayers map preview</title>
  <link rel="stylesheet" href="lib/ol/ol.css" rel="external nofollow"  type="text/css">
  <link rel="stylesheet" href="css/common.css" rel="external nofollow" >
  <script src="../ol5/ol.js" type="text/javascript"></script>
</head>
<body>
<div id="map" class="map"></div>
<script>
  const options = {
    center: [52102781.07568731, 4456849.777083951],
    zoom: 3,
    minZoom: 0,
    maxZoom: 18
  }

  const base = new ol.layer.Tile({
    visible: true,
    source: new ol.source.OSM()
  });
  const wms = new ol.layer.Tile({
    source: new ol.source.TileWMS({
      url: &#39;http://localhost/geoserver/mapbox/wms&#39;,
      params: {&#39;LAYERS&#39;: &#39;mapbox:city&#39;, &#39;TILED&#39;: true},
      serverType: &#39;geoserver&#39;,
      transition: 0
    })
  })

  window.map = new ol.Map({
    controls: ol.control.defaults({
      attribution: false
    }).extend([new ol.control.ScaleLine()]),
    target: &#39;map&#39;,
    layers: [base, wms],
    view: new ol.View({
      center: options.center,
      zoom: options.zoom,
      minZoom: options.minZoom,
      maxZoom: options.maxZoom
    })
  });
</script>
</body>
</html>
.

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