ホームページ  >  記事  >  バックエンド開発  >  Nginx負荷分散サーバーエントリーケース

Nginx負荷分散サーバーエントリーケース

不言
不言オリジナル
2018-04-04 15:00:171372ブラウズ


最近 nginx を勉強する時間があったので、簡単な入門ケースを作成しました。

概要:

Nginx (エンジン x) は、軽量の Web サーバー、リバース プロキシ サーバー、および電子メール ( IMAP/POP3) プロキシ サーバーです。

通常のクライアントがサーバーにアクセスするためのモードは、nginxサーバーを使用すると、同じアプリケーションを異なるサーバーにデプロイできます。これにより、同時実行性が大幅に向上し、負荷が軽減されます。サーバーのパフォーマンスが向上しました。 + サーバー:

Apache

と比較して、
Nginx

は使用するリソースが少なく、より多くの同時接続をサポートし、より高い効率を反映するため、

Nginx

は仮想ホスティングプロバイダーの間で特に人気があります。開発モデルとして

epollとkqueue

を選択した

Nginx

のおかげで、最大

50,000

の同時接続の応答をサポートできます 負荷分散サーバーとして: Nginx は、内部で Rails PHP を直接サポートできるだけでなく、HTTP プロキシ サーバーとして外部サービスもサポートします。 Nginx は、C で書かれており、システムリソースのオーバーヘッドやCPU

の使用効率は

Perlbal よりもはるかに優れています。 メール プロキシ サーバーとして : Nginx は非常に優れたメール プロキシ サーバーでもあります (この製品を開発した最初の目的の 1 つはメール プロキシ サーバーとしても機能します)。Last.fm では次のように説明されています。成功と素晴らしい経験。 Nginx インストールは非常に簡単で、設定ファイルは非常に簡潔です (perl構文もサポートできます)、バグサーバーが非常に少ない: Nginx の起動は特に簡単です、ほぼ 7*24 の中断のない動作を実現し、たとえ数か月間実行しても再起動する必要はありません。サービスを中断せずにソフトウェアのバージョンをアップグレードすることもできます。

インストール:

にはLinuxwindowsのバージョンがあり、基本的には対応するものをインストールする必要があります。 windowsを例に挙げます:

インストールパッケージをダウンロードしますhttp://nginx.org/en/download.html

それを解凍し、nginx.exeRunをクリックしてサービスを開始します, in ブラウザに localhost (デフォルトでは listen 127.0.0.1:80) と入力すると、次のページが表示されます。これは、nginx サーバーが正常に起動したことを意味します。


デモ:

springbootの単純なプロジェクトを構築し、それを異なるポートにデプロイしました(異なるサーバーにデプロイ可能)。テストを容易にするために、出力内容に簡単な区別を付けました:


設定の詳細:

注: conf / nginx.conf ngインクス デフォルトの設定ファイル。 nginx -c を使用して構成ファイルを指定することもできます

#运行用户
#user  nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件,记录当前启动的nginx的进程ID
#pid        logs/nginx.pid;

#工作模式及连接数上限
events {
    worker_connections  1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #设定mime类型(邮件支持类型),类型由mime.types文件定义
    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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;

    #连接超时时间
    keepalive_timeout  65;

    #gzip压缩开关
    #gzip  on;
	
    #设定负载均衡的服务器列表(或者一个反向代理服务器,一个的话不需要分配权重)
    upstream hello_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 127.0.0.1:8888   weight=1;
        server 127.0.0.1:8899   weight=3;
    }

    server {
        #监听80端口,80端口是知名端口号,用于HTTP协议
	listen       80;
	#定义使用localhost访问
        server_name  localhost;

        #编码格式
	charset utf-8;

        #access_log  logs/host.access.log  main;
		
	#反向代理的路径,location 后面设置映射的路径
	#对所有请求进行负载均衡请求(和upstream绑定)
        location / {
            root        /root;                 #定义服务器的默认网站根目录位置
            index       index.html index.htm;  #定义首页索引文件的名称
            proxy_pass  http://hello_server;   #请求转向hello_server 定义的服务器列表

            #以下是一些反向代理的配置(可选择性配置)
            #proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_connect_timeout 90;          #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90;             #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90;             #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k;              #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k;       #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            
            client_max_body_size 10m;          #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;      #缓冲区代理缓冲用户端请求的最大字节数
        }

}

構成後、nginxサーバーを再起動し、localhostにアクセスします:

再起動コマンド: nginxリロード

はまだnginx(localhost)サーバーにアクセスしていますが、実際にはデプロイされたspringbootプロジェクト(localhost:8899)にアクセスしています。 。さらに数回更新すると、両方のポートにデプロイされたサービスがアクセスされたことを示す下の図が表示されます。


注: 2 つのサービスによって割り当てられた重み値は異なるため、hello world b!!!(実際のアクセスlocalhost:8899) の可能性が高くなります。 hello world a!!!(localhost:8888への実際のアクセス)が表示される可能性は低くなります。権限の値を自分で変更して、さらに数回テストすることができます。 概要:

Nginx

共通コマンド:


関連推奨事項:


Nginxを使用してajaxクロスドメインリクエストを回避する


nginx リバースプロキシメカニズムがフロントエンドを解決クロスドメインの問題 質問

以上がNginx負荷分散サーバーエントリーケースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。