(一)nginx upstream實作負載均衡
Ngx_http_upstream_module子產品可實作七層負載均衡,定義的伺服器組可被proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass所引用,具體可以參考官方文檔:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
1,目前的環境:
Nginx upstream IP:192.168.180.2
node1 : 192.168.180.2:8080
node2 : 192.168.180.3:8080
目前兩台主機的服務都已經再跑如圖:
<a href="https://s1.51cto.com/wyfs02/M00/8F/C5/wKioL1jsjiiTBJgqAABEsJG73qM704.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M00/8F/C7/wKiom1jsjinA6q21AAAyTS1Y870039.png" target="_blank"></a>
2,nginx upstream配置
(1)隻定義http段的定義伺服器組
<code>user </code><code>ftp</code><code>;</code>
<code>worker_processes 3;</code>
<code>worker_rlimit_nofile 65535;</code>
<code>events {</code>
<code> </code><code>use epoll;</code>
<code> </code><code>worker_connections 1024;</code>
<code>}</code>
<code>http {</code>
<code> </code><code>include mime.types;</code>
<code> </code><code>default_type application</code><code>/octet-stream</code><code>;</code>
<code> </code><code>#include proxy.conf;</code>
<code> </code><code>log_format yundns_log </code><code>'$server_name $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'</code><code>;</code>
<code> </code><code>log_format main </code><code>'$remote_addr - $remote_user [$time_local] "$request" '</code>
<code> </code><code>'$status $body_bytes_sent "$http_referer" '</code>
<code> </code><code>'"$http_user_agent" "$http_x_forwarded_for"'</code><code>;</code>
<code> </code><code>access_log logs</code><code>/access</code><code>.log main;</code>
<code> </code><code>access_log on;</code>
<code> </code><code>server_tokens off;</code>
<code> </code><code>sendfile on;</code>
<code> </code><code>tcp_nopush on;</code>
<code> </code><code>server_names_hash_bucket_size 256;</code>
<code> </code><code>client_header_buffer_size 256k;</code>
<code> </code><code>#large_client_header_buffers 4 32k;</code>
<code> </code><code>large_client_header_buffers 4 256k;</code>
<code> </code><code>client_body_buffer_size 256k;</code>
<code> </code><code>client_header_timeout 3m;</code>
<code> </code><code>client_body_timeout 3m;</code>
<code> </code><code>send_timeout 3m;</code>
<code> </code><code>client_max_body_size 50m;</code>
<code> </code><code>keepalive_timeout 120;</code>
<code> </code><code>fastcgi_intercept_errors on;</code>
<code> </code><code>fastcgi_connect_timeout 300;</code>
<code> </code><code>fastcgi_send_timeout 300;</code>
<code> </code><code>fastcgi_read_timeout 300;</code>
<code> </code><code>#fastcgi_buffer_size 64k;</code>
<code> </code><code>#fastcgi_buffers 8 64k;</code>
<code> </code><code>#fastcgi_busy_buffers_size 128k;</code>
<code> </code><code>#fastcgi_temp_file_write_size 128k;</code>
<code> </code><code>fastcgi_buffer_size 128k;</code>
<code> </code><code>fastcgi_buffers 4 256k;</code>
<code> </code><code>fastcgi_busy_buffers_size 256k;</code>
<code> </code><code>fastcgi_temp_file_write_size 256k;</code>
<code> </code><code>gzip</code> <code>on;</code>
<code> </code><code>gzip_min_length 1k;</code>
<code> </code><code>gzip_buffers 4 16k;</code>
<code> </code><code>gzip_http_version 1.0;</code>
<code> </code><code>gzip_comp_level 2;</code>
<code> </code><code>gzip_types text</code><code>/plain</code> <code>application</code><code>/x-javascript</code> <code>text</code><code>/css</code> <code>application</code><code>/xml</code><code>;</code>
<code> </code><code>gzip_vary on;</code>
<code> </code><code>#limit_req_zone $anti_SendSms zone=anti_SendSms:30m rate=1r/m;</code>
<code> </code><code>limit_req_zone $binary_remote_addr zone=anti_SendSms:30m rate=1r</code><code>/m</code><code>;</code>
<code> </code><code>upstream guojinbao{</code>
<code> </code><code>ip_hash;</code>
<code> </code><code>server 192.168.180.2:8080;</code>
<code> </code><code>server 192.168.180.3:8080;</code>
<code> </code><code>}</code>
<code> </code><code>include server/*.conf;</code>
(2)定義虛拟主機段location區段的proxy_pass中伺服器組
<code>server {</code>
<code> </code><code>listen 443 ssl http2;</code>
<code> </code><code>server_name localhost;</code>
<code> </code><code>#ssl on;</code>
<code> </code><code>ssl_certificate guojinbao.geotrust.crt;</code>
<code> </code><code>ssl_certificate_key guojinbao.geotrust.key;</code>
<code> </code><code>rewrite ^</code><code>/invitejoin/</code><code>(.*)\.htm[l]?$ </code><code>/register</code><code>.shtml?$1 last;</code>
<code> </code><code>index index.jsp index.html;</code>
<code> </code><code>root </code><code>/opt/static/home</code><code>; </code>
<code> </code><code>location ~ .* {</code>
<code> </code><code>proxy_pass http:</code><code>//guojinbao</code><code>;</code>
<code> </code><code>proxy_set_header X-Real-IP $remote_addr;</code>
<code> </code><code>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</code>
<code> </code><code>#proxy_set_header X-Forward-For $remote_addr;</code>
<code> </code><code>proxy_set_header Host $host;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
3,測試:
把其中一台服務關閉先把192.168.180.2:8080服務關閉,看下能不能調到192.168.180.3這台伺服器上
如下圖:
<a href="https://s2.51cto.com/wyfs02/M00/8F/C7/wKiom1jsjxKza9WzAAAdlOYCiF8476.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/8F/C7/wKiom1jsjxPCen9wAAQcMiC9Y_Q108.png" target="_blank"></a>
可以正常通路說明服務已調到192.168.180.3這台伺服器上,負載均衡已起作用。
備注:主要參數說明:
server 192.168.0.30 weight=2;此處的weight為權重,預設為1;
主要算法,rr,wrr,ip_hash等,可在upstream中定義;
server 192.168.0.30 max_files=3 fail_timeout=30s;此處的max_files,fail_timeout為健康狀态檢測,超過3次未響應,逾時30s,就從server清單中移除。
server 192.168.0.30 backup;标記為備份
server 192.168.0.30 down;标記為不可用,與ip_hash算法一同使用
二、Nginx fastcgi
1、fastcgi全稱為高速的通用網關接口,是HTTP伺服器與動态腳本語言之間通信的接口,其工作模式與反向代理差不多,實作用戶端請求的動靜分離。
2 配置fastcfi_params
<code>fastcgi_param GATEWAY_INTERFACE CGI</code><code>/1</code><code>.1;</code>
<code>fastcgi_param SERVER_SOFTWARE nginx;</code>
<code>fastcgi_param QUERY_STRING $query_string;</code>
<code>fastcgi_param REQUEST_METHOD $request_method;</code>
<code>fastcgi_param CONTENT_TYPE $content_type;</code>
<code>fastcgi_param CONTENT_LENGTH $content_length;</code>
<code>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</code>
<code>fastcgi_param SCRIPT_NAME $fastcgi_script_name;</code>
<code>fastcgi_param REQUEST_URI $request_uri;</code>
<code>fastcgi_param DOCUMENT_URI $document_uri;</code>
<code>fastcgi_param DOCUMENT_ROOT $document_root;</code>
<code>fastcgi_param SERVER_PROTOCOL $server_protocol;</code>
<code>fastcgi_param REMOTE_ADDR $remote_addr;</code>
<code>fastcgi_param REMOTE_PORT $remote_port;</code>
<code>fastcgi_param SERVER_ADDR $server_addr;</code>
<code>fastcgi_param SERVER_PORT $server_port;</code>
<code>fastcgi_param SERVER_NAME $server_name;</code>
<code> </code><code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name 192.168.110.4; </code><code>################域名可以有多個,用空格隔</code>
<code> </code><code>access_log </code><code>/data/nginx/log/nginx</code><code>.access.log;</code>
<code> </code><code>index index.php index.html;</code>
<code> </code><code># root /usr/local/nginx/html;</code>
<code> </code><code>root </code><code>/data/php</code><code>;</code>
<code> </code><code># root /data/test/php;</code>
<code> </code><code># root /data/www/php;</code>
<code> </code><code>error_page 500 502 503 </code><code>/50x</code><code>.html; </code>
<code> </code><code>location = </code><code>/nginx-status</code> <code>{ </code>
<code> </code><code>stub_status on; </code>
<code> </code><code>access_log off; </code>
<code> </code><code>allow 127.0.0.1; </code>
<code> </code><code>allow 192.168.180.4; </code>
<code> </code><code>} </code>
<code> </code><code>location ~ \.php$ </code>
<code> </code><code>{ </code>
<code> </code><code># root /usr/local/nginx/html/zabbix; </code>
<code> </code><code>expires -1s; </code>
<code> </code><code>#index index.php index.html; </code>
<code> </code><code>fastcgi_split_path_info ^(.+\.php)(/.+)$; </code>
<code> </code><code>include fastcgi_params; </code>
<code> </code><code>fastcgi_param PATH_INFO $fastcgi_path_info; </code>
<code> </code><code>fastcgi_index index.php; </code>
<code> </code><code>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; </code>
<code> </code><code>fastcgi_pass 127.0.0.1:9000; </code>
<code> </code>
<code> </code><code>}</code>
本文轉自 lqbyz 51CTO部落格,原文連結:http://blog.51cto.com/liqingbiao/1914951