日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用Nginx反向代理来实现简单的负载均衡

發布時間:2025/3/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Nginx反向代理来实现简单的负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nginx反向代理的原理優點:

反向代理可以簡單的理解為:代理服務器來接收internet上的服務器請求,然后將請求轉發給內部的服務器上,然后將結果返回給internet上請求的客戶端,所以代理服務器對外表現出來的只是一臺服務器。反向代理服務器也稱為Web服務器加速,針對web服務器提供加速功能。他作為代理服務器,并不針對瀏覽器用戶,而是針對一臺或者多臺特定的web服務器。可以緩存web的頁面,降低web服務器的訪問量,從而來降低web服務器的負載,實施反向代理,只要將反向代理設備放置在一臺或多臺Web服務器前端即可。當互聯網用戶訪問某個WEB服務器時,通過DNS服務器解析后的IP地址是代理服務器的IP地址,而非原始Web服務器的IP地址,這時代理服務器設備充當Web服務器,瀏覽器可以與它連接,無需再直接與Web服務器相連。因此,大量Web服務工作量被轉載到反向代理服務上。不但能夠很大程度上減輕web服務器的負擔,提高訪問速度,而且能夠防止外部網主機直接和web服務器直接通信帶來的安全隱患。

Nginx proxy是Nginx的王牌功能,利用proxy基本可以實現一個完整的7層負載均

衡,它有這 些特色:

1. 功能強大,性能卓越,運行穩定。

2.?配置簡單靈活。

3.?能夠自動剔除工作不正常的后端服務器。

4.?上傳文件使用異步模式。

5.?支持多種分配策略,可以分配權重,分配方式靈活

?

項目拓撲:

配置環境:

三臺CentOS6.2X86 ?1臺做Nginx Proxy ?2臺Apache做頁面測試服務器

配置步驟:

在安裝之前首先解決依賴包的問題,pcre-devel openssl zlib-devel?

一、安裝nginx服務器

1.???????后臺的web服務我們使用的是Apache服務,關于Apache的安裝部署我們在這里就不做詳細說明了,我們的重點在nginx方向代理怎么配置。

2.???????安裝Nginx服務

  • yum?-y?install?make?
  • ?
  • ???yum?-y?install?pcre?pcre-devel?openssl-devel?zlib-devel?gcc?gcc-c++?
  • ?
  • ???mkdir?/usr/local/site/nginx?-p?
  • ?
  • ???useradd?-s?/sbin/nologin?www?
  • ?
  • ???rpm?-qa?|?grep?httpd?
  • ?
  • ???./configure?--prefix=/usr/local/site/nginx/?--user=www?--group=www??\?指定Nginx用戶組?
  • ?
  • --with-http_stub_status_module??\??非核心模塊,獲取從上次開啟之后Nginx的狀態?
  • ?
  • --with-http_ssl_module????開啟SSL模塊?
  • ?
  • ??make?&&?make?install?
  • 3.???????修改nginx主配置文件,主配置文件路徑:/usr/local/site/nginx/conf/nginx.conf,最好配置文件作下備份;

  • user??www;?????????????????????????????????指定nginx的運行用戶,?
  • ?
  • worker_processes??1;??????????????指定線程,默認情況下Nginx是單線程運行,?
  • ??
  • ?
  • #error_log??logs/error.log;????日志模塊?
  • ?
  • #error_log??logs/error.log??notice;?
  • ?
  • #error_log??logs/error.log??info;?
  • ?
  • #pid????????logs/nginx.pid;????????????//inx主進程ID?
  • ?
  • events?{?
  • ?
  • ????user?epoll;????????//inx的高效模式;?
  • ?
  • worker_connections??65535;???????????????????//文件最大的連接數;?
  • ?
  • }?
  • ???
  • ?
  • http?{?
  • ?
  • ???????include???????mime.types;?????????????????????//置文件模塊;?
  • ?
  • ????default_type??application/octet-stream;?????????????//核心配置文件模塊;?
  • ?
  • ????sendfile????????on;??????????????????????//開啟高效傳輸模式;?
  • ?
  • ????tcp_nopush?????on;???????????????????????//防止網絡端口阻塞;???
  • ?
  • ????#keepalive_timeout??0;?
  • ?
  • ????keepalive_timeout??65;??
  • ?
  • ????#gzip??on;??????????????????//開啟壓縮模塊,需要注意的是在配置文件中開啟之后是不生效的,還需要加載gzip模塊?
  • ??
  • ?
  • ????server?{?
  • ?
  • ????????listen???????80;???????????????//監聽的80端口?
  • ?
  • ????????server_name??proxy.rsyslog.net;????????//指定代理服務器的域名?
  • ?
  • ????????location?/?{?
  • ?
  • ????????????root???html;?????????????????//配置文件所在的目錄,這里是相對路徑?
  • ?
  • ????????????index??index.html?index.htm;????//頁面文件的類型;?
  • ?
  • ????????}?
  • ?
  • ????????error_page??404??????????????/404.html;?????????//相關錯誤提示頁面?
  • ?
  • ????????error_page???500?502?503?504??/50x.html;?
  • ?
  • ????????location?=?/50x.html?{?
  • ?
  • ????????????root???html;?
  • ?
  • ????????}?
  • ?
  • ????}?
  • ?
  • }?
  • 然后重啟服務測試服務是否正常,links proxy.rsyslog.net?域名需要在dns服務器上配置正確

    Nginx支持不間斷運行,啟動的命令

    kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid`

    查看Nginx服務狀態,確定正常之后我們來配置Nginx Proxy,查看Nginx端口

  • [root@localhost?conf]#?ps?-ef?|?grep?nginx?
  • ?
  • root?????27276?????1??0?15:53??????????00:00:00?nginx:?master?process?./nginx?
  • ?
  • www??????27315?27276??0?16:03??????????00:00:00?nginx:?worker?process?
  • ?
  • root?????27317?25195??0?16:05?pts/0????00:00:00?grep?nginx?
  • ?

    二、配置Nginx?反向代理服務器,反向代理服務器的配置如下;需要修改兩個兩個地方,在HTTP字段里面修改和Server字段中修改,在下圖中只把需要添加的文件列出來即可。

  • http?{?
  • ?
  • ????include???????mime.types;?
  • ?
  • default_type??application/octet-stream;?
  • ?
  • ????client_max_body_size?300m;?????????????//允許客戶端請求的最大的單個文件字節數?
  • ?
  • ????client_body_buffer_size?128k;????????//緩存區代理用戶端文件字節數?
  • ?
  • ????client_body_temp_path?/dev/shm/client_body_temp;?????//請求試圖寫入到緩存文件的目錄路徑?
  • ?
  • ????proxy_connect_timeout600;??????????????//和后端服務器連接的超時時間,?
  • ?
  • ????proxy_read_timeout?600;??????????????????//連接成功等待后端相應的時間,默認是60S?
  • ?
  • ????proxy_send_timeout?600;?????????????//后端服務器的回傳時間,規定服務器在一定的時間內傳送完。?
  • ?
  • ????proxy_buffer_size?16k;??????????????????//代理服務器的緩存文件頭部文件大小,默認是4K?
  • ?
  • ????proxy_buffers?4?32k;????????????????????//后端真是服務器的數量和大小?
  • ?
  • ????proxy_busy_buffers_size?64k;????????????//當系統忙事,申請更大proxy_buffer?
  • ?
  • ????proxy_temp_file_write_size?64k;?????????//寫入臨時目錄的文件大小?
  • ?
  • ????proxy_temp_path?/dev/shm/proxy_temp;????//指定一個目錄來緩存比較大的代理請求?
  • ?
  • ?
  • 如下是HTTP負載均衡模塊upstream?指定設置一群服務器,服務器可以指定不同的權重,默認為1。Nginx支持5種方式的查詢,?
  • ?
  • 1、??輪詢?Nginx默認的查詢方式?
  • ?
  • 2、??Weight?指定分配的輪詢方式,根據后端服務器的性能來做權重,在此案例中我們使用這種方式來輪詢的?
  • ?
  • 3、??Ip_hash?每個請求按照ip的hash結果分配,這樣每個IP地址就可以固定的訪問后端的一臺服務器,解決了session的問題?
  • ?
  • 4、??Fair?第三方模塊,這個原理是按照響應時間的優先來分配的,?
  • ?
  • 5、??url_hash????按照url的hash結果來分配請求,使每個url定向到同一個后端的服務器;?
  • ?
  • ?????????upstream?cluster?{?
  • ?
  • ?????????????server?192.168.100.238:80?weight=8?max_fails=2?fail_timeout=30s;?
  • ?
  • ?????????????server?192.168.100.248:80?weight=8?max_fails=2?fail_timeout=30s;?
  • ?
  • ?????????}???
  • ?
  • ????server?{?
  • ?
  • ????????listen???????80;?
  • ?
  • ????????server_name??localhost;?
  • ???
  • ?
  • ????????location?/?{?
  • ?
  • ????????????root???html;?
  • ?
  • ????????????index??index.html?index.htm;?
  • ?
  • ????????????proxy_pass?http://cluster/;???????//指定需要代理的URL,?
  • ?
  • ????????????proxy_redirect?off;?????????//如果需要從后端打開location和Refresh字段,可以開啟。?
  • ?
  • ????????????proxy_set_header?X-Real-IP?$remote_addr;???????????//允許將發送到后端的服務器請求重新定義或者增加一個字段,這個可以是變量也是文本組合。?
  • ?
  • ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??????//聯系下面PS中所寫,在后端web中就算加上$http_x_Forwarded_for這條,也得不到用戶的IP,所以在nginx反向代理添加Header頭信息?X-Forwarded-For在配合后端服務器日志文件的$http_x_Forwarded_for這條就可以獲得用戶的IP地址了。?
  • ?
  • ????????????proxy_set_header?Host?$host;???????????????//首先說明?proxy_set_header?指令在向反向代理的后端Web服務器發起請求時添加指定的?Header頭信息,后端web服務器有多個基于域名的虛擬主機時,通過頭信息Host,用于指定請求的域名,這樣后端web才能識別反向代理請求哪個虛擬主機處理。?
  • ?
  • ????????????proxy_next_upstream?error?timeout?invalid_header?http_500?http_502?http_503?
  • ?
  • ????????????http_504?http_404;?服務器頭部超時相應的各種狀態?
  • ?
  • ????????}?
  • ?
  • }?
  • ?
  • }?
  • 配置完成之后平滑重啟Nginx服務

  • kill?-HUP?`cat?/usr/local/site/nginx/logs/nginx.pid`?
  • 三、測試,刷新測試能正常進行負載,可以根據自己的環境來對nginx proxy的設置輪詢模式;



    本文轉自devilangel 51CTO博客,原文鏈接:http://blog.51cto.com/devliangel/1142008,如需轉載請自行聯系原作者


    總結

    以上是生活随笔為你收集整理的使用Nginx反向代理来实现简单的负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。