nginxの - nginxの基本構成

nginxの上流の負荷分散

コンセプト

サーバーの過負荷、サーバーとアイドルが起こった他の戦略を防止するための戦略です。同じサービスサーバの負荷を提供するために、この戦略は、このようなことが可能とすることは基本的に同じです。

共通の戦略

  • ポーリング(デフォルト)
  • WRR
  • IP_hash
  • URL_hash
  • 応答時間

投票

上流のポーリングが既定の割り当て、時間のために、異なるバックエンドサーバーに割り当てられた順番で、すなわち各要求であるバックエンドサーバがダウンしている場合、自動的に削除

upstream  xxx {
	server 10.0.0.7:80; 
	server 10.0.0.8:80; 
}

重量世論調査

重量は、主にバックエンドサーバーのハードウェアの違いの次のシーンで使用される指定されたポーリングレート、重量とアクセス確率に比例することができポーリングの拡張バージョンであり、

5つの要求を行くために重量のポート8050によると、ポート8060への要求を行きます

upstream xxx {
    server 127.0.0.1:8050       
    	weight=5;
    server 127.0.0.1:8060       
        weight=1;

IP_hash +本当のIP

  • 各要求は、Webサーバーは、固体のセッションを確立することができるようになりますので、各訪問者は、バックエンドサーバーにアクセスすることをハッシュ結果アクセスIPによって割り当てられ、固定されています。

    upstream xxx {
       ip_hash;
       server 192.168.100.104:80;
       server 192.168.100.105:80;
     }
    
  • IP_hash問題

    nginxの要件は、ほとんどのフロントエンドサーバ、nginxのかない権利IPでなければならない、あなたはIPに基づいてハッシュをすることはできません。私たちは、ときnginxのではユーザーの要求本当のIPを取得し、その後、これらの実際のIPに基づいてハッシュポリシーを行うことができ、あること、からnginxののハッシュポリシー定義。

    map $http_x_forwarded_for $clientRealIp {
    	# 没有通过代理,直接用 remote_addr
    	"" $remote_addr;
        #用正则匹配,从 x_forwarded_for 中取得用户的原始IP
        #例如 X-Forwarded-For: 202.123.123.11, 208.22.22.234, 192.168.2.100,...
        #这里第一个 202.123.123.11 是用户的真实 IP,后面其它都是经过的 CDN 服务器
    	~^(?P<firstAddr>[0-9\.]+),?.*$ 
            $firstAddr;
    }
    
    --skip--
    
    upstream xxx {
    	hash $clientRealIp;
    	server 192.168.100.104:9080;
    	server 192.168.100.105:9080;
    }
    

url_hash +キャッシュヒット

  • 押し割り当て要求へのアクセスURLのハッシュ結果キャッシュ、バックエンドサーバが有効です

  • 注:上流のハッシュにおける記述のうち、に参加、サーバーの文は、体重などの他のパラメータを記述することはできません、hash_methodハッシュアルゴリズムが使用されています

  • キャッシュヒットで使用するために、

    • 不必要な複数のダウンロードにつながる複数の要求が異なるサーバーに到着して、リソースを持つクラスタサーバー、
    • 同じマシンに到達します(リソースの要求で、ある)URLとurl_hash戦略を使用し、キャッシュリソースは、キャッシュからの読み出し要求を受け
    • 帯域幅を削減し、時間を短縮
    • クライアント - サーバークラスタA-クラウドストレージ - ファイルのダウンロード - 一時キャッシュ - クライアント・サーバ・クラスタA-
 upstream xxx { 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32;
}

バックエンドの応答時間

  • フェア(サードパーティ)

    • RTにバックエンドサーバーの割り当て要求の応答時間によると、
    • すなわち、短い応答時間、小さなバックエンドサーバ割り当て要求の優先順位を室温
    • あなたはnginxの上流・フェア・マスターをダウンロードする必要があります
     upstream backend {
     	fair;
        server 192.168.1.101;
        server 192.168.1.102;
        server 192.168.1.103;
                
    }
    

nginxのは、構成されたサードパーティ製のモジュールだけ--add-モジュール= /サードパーティのモジュールディレクトリをインストールし、次に何をすることができますコンパイラを作る場合は、インストールをインストールしないでください。指定されたディレクトリnginxのに次のOBJSコピーをコンパイルした後

パラメータ

パラメータ 説明
サービス リバースアドレス+ポートサービス
重量 重量
max_fails どのように多くの時間は、ホストがハングアップすると思います失敗した、追い出さ
fail_timeout 再響きは時間から追い出された後
バックアップ 他のノードがハングアップすると、バックアップサーバーが予約開始
MAX_CONNS 接続の最大数
slow_start ノードが復元すると、すぐに参加しません。
ダウン 現在のサーバが一時的に負荷分散に参加されていません(外部サービス)

MAX_CONNS

あなたは、サービスの品質に基づいて接続の最大数を設定することができます

upstream xxx {
    server 127.0.0.1:8050    weight=5  max_conns=800;
    server 127.0.0.1:8060    weight=1;
}

max_fails、fail_timeout

  • max_fails = 3、fail_timeout = 30代
    • アプリケーション要求のための30秒以内に3回失敗したアプリケーションのダウンタイムという
    • 30秒待ってから、新しい要求が、その間、アプリケーションのダウンタイムには送信されません
    • その後、要求は、接続アプリケーションのダウンタイムにしようとし続け、一度だけしてみてください、またはあなたがまだ失敗した場合、30秒を待つために継続する時間にそこに来ています
    • 回復するまで。
upstream xxx {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=30;
    server 127.0.0.1:8060    weight=1;
}

ダウン

8060ポートと8070ポートを一時的に開きます

upstream xxx {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=20;
    server 127.0.0.1:8060    weight=1  down;
    server 127.0.0.1:8070    weight=1  down; 
    server 127.0.0.1:8090    weight=1;
}

バックアップ

8070ポートがバックアップノードであります

バックアップノードが8070ポート、ポート番号8050または8090を開き、ポートノード8070が再び閉鎖される際にポートをハングアップを開始する時期場合は、ポート番号8050または8090ポートがハングアップ

upstream xxx {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=20;
    server 127.0.0.1:8060    weight=1  down;
    server 127.0.0.1:8070    weight=1  backup; 
    server 127.0.0.1:8090    weight=1  max_fails=1  fail_timeout=20;
}

設定の場所

例:

location / { 
            root  html; 
            index  index.html index.htm; 
            proxy_pass http://xxx; 
}

localtionマッチの優先順位

オーダー それは識別マッチング場所 マッチングの説明
1 位置= / { 完全に一致
2 位置= ^〜/画像/ { プレフィックス一致
3 loction〜*(GIF | JPG | JPEG)。$ { 定期的な試合
4 位置/ドキュメント/ { ファジーマッチング
5 位置/ { デフォルトのマッチ

ビジネスの中でnginxの設定

  • /etc/nginx/nginx.conf
#定义Nginx运行的用户和用户组
user www www;
 
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 8;
 
#全局错误日志定义类型
#记录级别[debug|info|notice|warn|error|crit]
error_log /var/logs/error.log info;
 
#进程文件
pid runnginx.pid;
 
#一个nginx进程打开的最多文件描述符数目
#理论值应该是最多打开文件数(系统的值ulimit-n)与nginx进程数相除
#但是nginx分配请求并不均匀,所以建议与ulimit-n的值保持一致。
worker_rlimit_nofile 65535;
 
#事件处理设置
events {
    #事件模型
    #[kqueue|rtsig|epoll|/dev/poll|select|poll]
    #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型		#FreeBSD就用kqueue模型。
	use epoll;
	#单个进程最大连接数(最大连接数=连接数*进程数)
	worker_connections 65535;
}
 
#http服务器
http {
    #文件扩展名与文件类型映射表
	include mime.types; 
    #默认文件类型
	default_type application/octet-stream; 
    #默认编码
	charset utf-8; 
    #服务器名字的hash表大小
	server_names_hash_bucket_size 128; 
    #上传文件大小限制
	client_header_buffer_size 32k; 
	large_client_header_buffers 4 64k; 
	client_max_body_size 8m;
     #开启高效文件传输模式
     #nginx是否调用sendfile函数来输出文件,对于普通应用设为on
     #用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
	sendfile on;
    #开启目录列表访问,合适下载服务器,默认关闭。
	autoindex on;
    #防止网络阻塞
	tcp_nopush on; 
	tcp_nodelay on; 
    #长连接超时时间,单位是秒
	keepalive_timeout 120; 
	 	 
#gzip模块设置
    #开启gzip压缩输出
	gzip on; 
    #最小压缩文件大小
	gzip_min_length 1k;
    #压缩缓冲区
	gzip_buffers 4 16k;
    #压缩版本(默认1.1,squid2.5请使用1.0)
	gzip_http_version 1.0;
    #压缩等级
	gzip_comp_level 2;
    #压缩类型,默认就已经包含textml,所以下面就不用再写了
	gzip_types text/plain application/x-javascript text/css application/xml;
	gzip_vary on;
    #开启限制IP连接数的时候需要使用
	#limit_zone crawler $binary_remote_addr 10m; 
    
#负载均衡,weigth参数表示权值,权值越高被分配到的几率越大。 
	upstream xxx {
		server 192.168.80.121:80 weight=3;
		server 192.168.80.122:80 weight=2;
		server 192.168.80.123:80 weight=3;
	}
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;     
}
  • /etc/nginx/conf.d/xxx.conf

    このプロファイルが作成されたxxx.conf自分がしなければならない.conf終了します

#虚拟主机的配置
	server {
		#端口
		listen 80;
		#域名可以有多个,用空格隔开
		server_name www.yyy.com yyy.com;
		index index.html index.htm index.php;
   		#启动nginx之前路径
		root /xxx/www/yyy; 
    
#页面缓存expires
#单位:s/m/h/d/max - 秒/分/时/天/最大(不建议)
        #图片缓存时间设置
		location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
			expires 10d;
		}
		#JS和CSS缓存时间设置
		location ~ .*.(js|css)?$ {
			expires 1h; #保留1小时
		}

#代理设置
		#定义本虚拟主机的访问日志
		access_log /var/logs/access.log;
		#对 "/" 启用反向代理
		location / { 
         #一般我们在配置python Django应用时都是使用http,让Nginx直接使用proxy_pass就把它从本地代理到前端服务器
		#当uwsgi配置http=127.0.0.1:8000时,我们可以如下设置Nginx进行代理
        	proxy_pass http://xxx; #代理推送
			proxy_redirect off; #关闭代理重写
         	 
             #将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip
        	 #$remote_addr 只能获取到与服务器本身直连的上层请求ip,所以设置$remote_addr一般都是设置第一个代理上面
			proxy_set_header X-Real-IP $remote_addr;
			
#有时通过cdn访问,那么后面web服务器获取到的是cdn的ip而非真是用户ip
#用X-Forwarded—For链路反追踪
#客户真实IP-多层级proxy-web服务器,各层IP都会记录下来
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			
			#以下是一些反向代理的配置,可选。
        	#$host就是nginx代理服务器,也就是客户端请求的host
			proxy_set_header Host $host; 
        	#允许客户端请求的最大单文件字节数
			client_max_body_size 10m; 
        	#缓冲区代理缓冲用户端请求的最大字节数,
			client_body_buffer_size 128k; 
        	#nginx跟后端服务器连接超时时间(代理连接超时)
			proxy_connect_timeout 90; 
        	#后端服务器数据回传时间(代理发送超时)
			proxy_send_timeout 90; 
        	#连接成功后,后端服务器响应时间(代理接收超时)
			proxy_read_timeout 90; 
        	#设置代理服务器(nginx)保存用户头信息的缓冲区大小
			proxy_buffer_size 4k; 
        	#proxy_buffers缓冲区,网页平均在32k以下的设置
			proxy_buffers 4 32k; 
        	#高负荷下缓冲大小(proxy_buffers*2)
			proxy_busy_buffers_size 64k; 
        	#设定缓存文件夹大小,大于这个值,将从upstream服务器传
			proxy_temp_file_write_size 64k; 
		}

# location设置不同资源配置
    	# 通过location 精确匹配/xxx
    	location = /xxx { 
        #当uwsgi配置socket时,外部浏览器将无法直接访问
        #会提示类似于“缓存区(buffer)超过最大长度”类似的问题
	    #此时使用nginx进行代理时,如下配置
        	uwsgi_param X-Real-IP $remote_addr; 
        	uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; 
        	uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto; 
        	include  uwsgi_params;
       		uwsgi_pass 192.168.90.21:8000;          
    	}
    	
		#设定查看Nginx状态的地址
		location /status {
        	#开启统计功能模块
			stub_status on; 
        	#关闭成功日志
			access_log off;  
        	#仅允许这个ip通过
			#allow 192.168.0.1;  
        	#其他都不允许通过
			#deny all;           
		}
		#所有动态页面均交由tomcat
		location ~ .(jsp|jspx|do)?$ {
			proxy_pass http://127.0.0.1:8080;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}		
		#所有静态文件由nginx直接读取不经过tomcat
		location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { 
			expires 15d; 
		}		
		location ~ .*.(js|css)?$ { 
			expires 1h; 
		}
	}

おすすめ

転載: www.cnblogs.com/yangjunh/p/nginx-config.html