ホームページ >運用・保守 >Nginx >nginx が複数の geoserver サービスの負荷分散を実装する方法

nginx が複数の geoserver サービスの負荷分散を実装する方法

PHPz
PHPz転載
2023-05-17 11:04:051452ブラウズ

概要

サービスのアクセス速度を向上させ、ジオサーバー サービスへの負荷を軽減し、サービス アクセスの安定性に影響を与えるサービス ノードの問題を回避するために、通常は、複数の geoserver がデプロイされている 複数の geoserver をインストールした後は、使用するための統一されたインターフェイスが必要です。nginx はこの要件を十分に満たすことができます。この記事では、nginx を通じて複数の geoserver サービスの負荷分散を実現する方法について説明します。

実装効果

nginx が複数の geoserver サービスの負荷分散を実装する方法

実装

1. 複数のジオサーバーの展開

ジオサーバー サービスの一貫性を保つために、最初に geoserver サービスを構成します。構成後、デプロイされた Tomcat をコピーし、複数の Tomcat を複製します。この記事では、デモンストレーション用に 2 つ (合計 3 つの geoserver) をコピーしました。3 つのポートが競合しないように Tomcat ポートを変更します。コピー後、それぞれを開始します3匹のトムキャット。

2. nginx の設定

nginx.conf ファイルを変更すると、設定情報は次のようになります:

#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;
        }
    }
}

nginx の設定後、nginx を起動します。

3. フロントエンド呼び出し

上記の設定によると、nginx のポートは 80 なので、geoserver のアドレスは http://localhost/geoserver になります。は次のとおりです:

<!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>

以上がnginx が複数の geoserver サービスの負荷分散を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。