天天看點

Nginx自學手冊(一) upstream及fastcgi

(一)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