日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Nginx >内容正文

Nginx

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

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

Nginx反向代理的原理優(yōu)點(diǎn):

反向代理可以簡(jiǎn)單的理解為:代理服務(wù)器來(lái)接收internet上的服務(wù)器請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部的服務(wù)器上,然后將結(jié)果返回給internet上請(qǐng)求的客戶端,所以代理服務(wù)器對(duì)外表現(xiàn)出來(lái)的只是一臺(tái)服務(wù)器。反向代理服務(wù)器也稱為Web服務(wù)器加速,針對(duì)web服務(wù)器提供加速功能。他作為代理服務(wù)器,并不針對(duì)瀏覽器用戶,而是針對(duì)一臺(tái)或者多臺(tái)特定的web服務(wù)器??梢跃彺鎤eb的頁(yè)面,降低web服務(wù)器的訪問量,從而來(lái)降低web服務(wù)器的負(fù)載,實(shí)施反向代理,只要將反向代理設(shè)備放置在一臺(tái)或多臺(tái)Web服務(wù)器前端即可。當(dāng)互聯(lián)網(wǎng)用戶訪問某個(gè)WEB服務(wù)器時(shí),通過DNS服務(wù)器解析后的IP地址是代理服務(wù)器的IP地址,而非原始Web服務(wù)器的IP地址,這時(shí)代理服務(wù)器設(shè)備充當(dāng)Web服務(wù)器,瀏覽器可以與它連接,無(wú)需再直接與Web服務(wù)器相連。因此,大量Web服務(wù)工作量被轉(zhuǎn)載到反向代理服務(wù)上。不但能夠很大程度上減輕web服務(wù)器的負(fù)擔(dān),提高訪問速度,而且能夠防止外部網(wǎng)主機(jī)直接和web服務(wù)器直接通信帶來(lái)的安全隱患。

Nginx proxy是Nginx的王牌功能,利用proxy基本可以實(shí)現(xiàn)一個(gè)完整的7層負(fù)載均

衡,它有這 些特色:

1. 功能強(qiáng)大,性能卓越,運(yùn)行穩(wěn)定。

2.?配置簡(jiǎn)單靈活。

3.?能夠自動(dòng)剔除工作不正常的后端服務(wù)器。

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

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

?

項(xiàng)目拓?fù)?#xff1a;

配置環(huán)境:

三臺(tái)CentOS6.2X86 ?1臺(tái)做Nginx Proxy ?2臺(tái)Apache做頁(yè)面測(cè)試服務(wù)器

配置步驟:

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

一、安裝nginx服務(wù)器

1.???????后臺(tái)的web服務(wù)我們使用的是Apache服務(wù),關(guān)于Apache的安裝部署我們?cè)谶@里就不做詳細(xì)說(shuō)明了,我們的重點(diǎn)在nginx方向代理怎么配置。

2.???????安裝Nginx服務(wù)

  • 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的狀態(tài)?
  • ?
  • --with-http_ssl_module????開啟SSL模塊?
  • ?
  • ??make?&&?make?install?
  • 3.???????修改nginx主配置文件,主配置文件路徑:/usr/local/site/nginx/conf/nginx.conf,最好配置文件作下備份;

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

    Nginx支持不間斷運(yùn)行,啟動(dòng)的命令

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

    查看Nginx服務(wù)狀態(tài),確定正常之后我們來(lái)配置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?反向代理服務(wù)器,反向代理服務(wù)器的配置如下;需要修改兩個(gè)兩個(gè)地方,在HTTP字段里面修改和Server字段中修改,在下圖中只把需要添加的文件列出來(lái)即可。

  • http?{?
  • ?
  • ????include???????mime.types;?
  • ?
  • default_type??application/octet-stream;?
  • ?
  • ????client_max_body_size?300m;?????????????//允許客戶端請(qǐng)求的最大的單個(gè)文件字節(jié)數(shù)?
  • ?
  • ????client_body_buffer_size?128k;????????//緩存區(qū)代理用戶端文件字節(jié)數(shù)?
  • ?
  • ????client_body_temp_path?/dev/shm/client_body_temp;?????//請(qǐng)求試圖寫入到緩存文件的目錄路徑?
  • ?
  • ????proxy_connect_timeout600;??????????????//和后端服務(wù)器連接的超時(shí)時(shí)間,?
  • ?
  • ????proxy_read_timeout?600;??????????????????//連接成功等待后端相應(yīng)的時(shí)間,默認(rèn)是60S?
  • ?
  • ????proxy_send_timeout?600;?????????????//后端服務(wù)器的回傳時(shí)間,規(guī)定服務(wù)器在一定的時(shí)間內(nèi)傳送完。?
  • ?
  • ????proxy_buffer_size?16k;??????????????????//代理服務(wù)器的緩存文件頭部文件大小,默認(rèn)是4K?
  • ?
  • ????proxy_buffers?4?32k;????????????????????//后端真是服務(wù)器的數(shù)量和大小?
  • ?
  • ????proxy_busy_buffers_size?64k;????????????//當(dāng)系統(tǒng)忙事,申請(qǐng)更大proxy_buffer?
  • ?
  • ????proxy_temp_file_write_size?64k;?????????//寫入臨時(shí)目錄的文件大小?
  • ?
  • ????proxy_temp_path?/dev/shm/proxy_temp;????//指定一個(gè)目錄來(lái)緩存比較大的代理請(qǐng)求?
  • ?
  • ?
  • 如下是HTTP負(fù)載均衡模塊upstream?指定設(shè)置一群服務(wù)器,服務(wù)器可以指定不同的權(quán)重,默認(rèn)為1。Nginx支持5種方式的查詢,?
  • ?
  • 1、??輪詢?Nginx默認(rèn)的查詢方式?
  • ?
  • 2、??Weight?指定分配的輪詢方式,根據(jù)后端服務(wù)器的性能來(lái)做權(quán)重,在此案例中我們使用這種方式來(lái)輪詢的?
  • ?
  • 3、??Ip_hash?每個(gè)請(qǐng)求按照ip的hash結(jié)果分配,這樣每個(gè)IP地址就可以固定的訪問后端的一臺(tái)服務(wù)器,解決了session的問題?
  • ?
  • 4、??Fair?第三方模塊,這個(gè)原理是按照響應(yīng)時(shí)間的優(yōu)先來(lái)分配的,?
  • ?
  • 5、??url_hash????按照url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端的服務(wù)器;?
  • ?
  • ?????????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;???????????//允許將發(fā)送到后端的服務(wù)器請(qǐng)求重新定義或者增加一個(gè)字段,這個(gè)可以是變量也是文本組合。?
  • ?
  • ????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;??????//聯(lián)系下面PS中所寫,在后端web中就算加上$http_x_Forwarded_for這條,也得不到用戶的IP,所以在nginx反向代理添加Header頭信息?X-Forwarded-For在配合后端服務(wù)器日志文件的$http_x_Forwarded_for這條就可以獲得用戶的IP地址了。?
  • ?
  • ????????????proxy_set_header?Host?$host;???????????????//首先說(shuō)明?proxy_set_header?指令在向反向代理的后端Web服務(wù)器發(fā)起請(qǐng)求時(shí)添加指定的?Header頭信息,后端web服務(wù)器有多個(gè)基于域名的虛擬主機(jī)時(shí),通過頭信息Host,用于指定請(qǐng)求的域名,這樣后端web才能識(shí)別反向代理請(qǐng)求哪個(gè)虛擬主機(jī)處理。?
  • ?
  • ????????????proxy_next_upstream?error?timeout?invalid_header?http_500?http_502?http_503?
  • ?
  • ????????????http_504?http_404;?服務(wù)器頭部超時(shí)相應(yīng)的各種狀態(tài)?
  • ?
  • ????????}?
  • ?
  • }?
  • ?
  • }?
  • 配置完成之后平滑重啟Nginx服務(wù)

  • kill?-HUP?`cat?/usr/local/site/nginx/logs/nginx.pid`?
  • 三、測(cè)試,刷新測(cè)試能正常進(jìn)行負(fù)載,可以根據(jù)自己的環(huán)境來(lái)對(duì)nginx proxy的設(shè)置輪詢模式;



    本文轉(zhuǎn)自devilangel 51CTO博客,原文鏈接:http://blog.51cto.com/devliangel/1142008,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者


    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。