重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
Nginx中怎么設(shè)置負(fù)載均衡和反向代理,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),鐵東企業(yè)網(wǎng)站建設(shè),鐵東品牌網(wǎng)站建設(shè),網(wǎng)站定制,鐵東網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鐵東網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
負(fù)載均衡是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負(fù)載分布到多個(gè)服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性。
負(fù)載均衡算法決定了后端的哪些健康服務(wù)器會(huì)被選中。幾個(gè)常用的算法:
Round Robin(輪詢):為第一個(gè)請(qǐng)求選擇列表中的第一個(gè)服務(wù)器,然后按順序向下移動(dòng)列表直到結(jié)尾,然后循環(huán)。
Least Connections(最小連接):優(yōu)先選擇連接數(shù)最少的服務(wù)器,在普遍會(huì)話較長的情況下推薦使用。
Source:根據(jù)請(qǐng)求源的 IP 的散列(hash)來選擇要轉(zhuǎn)發(fā)的服務(wù)器。這種方式可以一定程度上保證特定用戶能連接到相同的服務(wù)器。如果你的應(yīng)用需要處理狀態(tài)而要求用戶能連接到和之前相同的服務(wù)器。可以通過 Source 算法基于客戶端的 IP 信息創(chuàng)建關(guān)聯(lián),或者使用粘性會(huì)話(sticky sessions)。
Nginx提供的負(fù)載均衡策略有2種:內(nèi)置策略和擴(kuò)展策略。 內(nèi)置策略為輪詢,加權(quán)輪詢,Ip hash。 擴(kuò)展策略,就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負(fù)載均衡算法,給他一一找出來做下實(shí)現(xiàn)。 擴(kuò)展策略舉例: fair,根據(jù)服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配,即負(fù)載壓力小的優(yōu)先會(huì)分配。 fair源碼
參見:什么是負(fù)載均衡? Nginx負(fù)載均衡配置
正向代理是一個(gè)位于客戶端和目標(biāo)服務(wù)器之間的代理服務(wù)器(中間服務(wù)器)。 為了從原始服務(wù)器取得內(nèi)容,客戶端向代理服務(wù)器發(fā)送一個(gè)請(qǐng)求,并且指定目標(biāo)服務(wù)器,之后代理向目標(biāo)服務(wù)器轉(zhuǎn)交并且將獲得的內(nèi)容返回給客戶端。 正向代理的情況下客戶端必須要進(jìn)行一些特別的設(shè)置才能使用。
反向代理正好相反。對(duì)于客戶端來說,反向代理就好像目標(biāo)服務(wù)器。并且客戶端不需要進(jìn)行任何設(shè)置。 客戶端向反向代理發(fā)送請(qǐng)求,接著反向代理判斷請(qǐng)求走向何處,并將請(qǐng)求轉(zhuǎn)交給客戶端,使得這些內(nèi)容就好似他自己一樣, 一次客戶端并不會(huì)感知到反向代理后面的服務(wù),也因此不需要客戶端做任何設(shè)置,只需要把反向代理服務(wù)器當(dāng)成真正的服務(wù)器就好了。
參照:正向代理與反向代理的區(qū)別
首先修改公司的yum源配置, cd /etc/yum.repos.d/ ,修改CentOS-7.6-Base.repo 。
除此之外,在安裝epel 源。(extra package for enterprise linux, 為“紅帽系”的操作系統(tǒng)提供額外的軟件包,適用于RHEL、CentOS等, 里面有1萬多個(gè)軟件,強(qiáng)烈建議安裝) yum install epel-release 如果epel無法安裝,請(qǐng)參見:yum安裝epel源
添加Nginx倉庫 vim /etc/yum.repos.d/nginx.repo 輸入下面內(nèi)容 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
安裝:yum install nginx 。 使用 yum 安裝是在線安裝,但是版本可能不是最新,如果需要最新版本的話,還是需要源碼安裝。
啟動(dòng)Nginx systemctl start nginx 或者 進(jìn)入/usr/sbin,執(zhí)行 ./nginx 或者執(zhí)行 service nginx start
測(cè)試頁面 http://127.0.0.1/ 如果頁面沒有出來,查看防火墻配置 vi /etc/sysconfig/iptables 添加下面內(nèi)容 -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允許80端口通過防火墻) -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(MySQL端口 允許3306端口通過防火墻) 然后重啟防火墻:service iptables restart
把Nginx加到系統(tǒng)啟動(dòng)項(xiàng),這樣每次開機(jī)的時(shí)候就自動(dòng)啟動(dòng)了,使用下面的命令: systemctl enable nginx
參照:Linux(Centos7)yum安裝Nginx
有關(guān)兩個(gè)命令的一點(diǎn)解釋:
yum -y update - 升級(jí)所有包,改變軟件設(shè)置和系統(tǒng)設(shè)置,系統(tǒng)版本內(nèi)核都升級(jí)。
yum -y upgrade - 升級(jí)所有包,不改變軟件設(shè)置和系統(tǒng)設(shè)置,系統(tǒng)版本升級(jí),內(nèi)核不改變。
[root@localhost src]# yum -y install gcc gcc-c++ autoconf automake libtool make cmake [root@localhost src]# yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
http://nginx.org/en/download.html nginx-1.10.2.tar.gz
用 root 用戶身份登錄系統(tǒng),執(zhí)行以下命令創(chuàng)建新的用戶。
[root@localhost src]# groupadd nginx [root@localhost src]# useradd -g nginx -M nginx
useradd命令的-M參數(shù)用于不為nginx建立home目錄
修改/etc/passwd,使得nginx用戶無法bash登陸(nginx用戶后面由/bin/bash改為/sbin/nologin)
vi /etc/passwd然后找到有 nginx 那一行,把它修改為(后面由/bin/bash改為/sbin/nologin): 例如:nginx..1002:1003::/home/nginx:/sbin/nologin
下面我們進(jìn)入解壓的nginx源碼目錄:/usr/local/src/ 執(zhí)行以下命令
[root@localhost ~]# cd /usr/local/src/nginx* [root@localhost nginx-1.10.3]# pwd /usr/local/src/nginx-1.10.3 [root@localhost nginx-1.10.3]# [root@localhost nginx-1.10.3]# ./configure --prefix=/usr/local/nginx \ --pid-path=/usr/local/nginx/run/nginx.pid \ --with-http_ssl_module \ --user=nginx \ --group=nginx \ --with-pcre \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module --prefix=/usr/local/nginx 指定安裝到 /usr/local/nginx 目錄下。 上面配置完成后,接下來執(zhí)行編譯 [root@localhost nginx-1.10.3]# make [root@localhost nginx-1.10.3]# make install 查看安裝后的程序版本: [root@localhost nginx-1.10.3]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.10.3
注意:上面的反斜杠\ 表示換行繼續(xù)。
nginx 管理的幾種方式:
/usr/local/nginx/sbin/nginx
kill -QUIT 主進(jìn)程號(hào) # 如上一步中的 ps 命令輸出的 29151,就是 Nginx的主進(jìn)程號(hào)
kill -TERM 主進(jìn)程號(hào)
pkill -9 nginx
/usr/nginx/sbin/nginx -s reload
參照:Nginx安裝
yum 安裝是在線安裝,好處是:安裝方式簡單,不易出錯(cuò); 源碼包 安裝是先將 nginx 的源碼下載下來,在自己的系統(tǒng)里編譯生成可執(zhí)行文件,然后執(zhí)行, 好處是:因?yàn)槭窃谧约旱南到y(tǒng)上編譯的,更符合自己系統(tǒng)的性能,也就是說在自己的系統(tǒng)上執(zhí)行 nginx 服務(wù)性能效率更好。
安裝路徑不同 通過源碼包編譯安裝的軟件,通常都放在 /usr/local/包名 路徑下。 通過源碼安裝,可以自己指定安裝路徑。
啟動(dòng)方式不同 yum 安裝 nginx,我們可以通過 系統(tǒng)服務(wù)命令 service 來啟動(dòng)或停止 service nginx start #啟動(dòng) nginx 服務(wù) service nginx stop #停止 nginx 服務(wù) service nginx restart #重啟 nginx 服務(wù) 源碼包 安裝 nginx 啟動(dòng)的時(shí)候不能使用 service 來啟動(dòng),需要執(zhí)行 nginx 安裝目錄下的 sbin 目錄下的 nginx 可執(zhí)行程序才行, 如下(我的 nginx 安裝在 /usr/local/webserver/ 目錄下) ? ~ /usr/local/webserver/nginx/sbin/nginx #啟動(dòng) nginx 服務(wù) ? ~ /usr/local/webserver/nginx/sbin/nginx -s stop #停止 nginx 服務(wù)
參照:nginx服務(wù)器詳細(xì)安裝過程(使用yum 和 源碼包兩種安裝方式,并說明其區(qū)別)
... #全局塊 events { #events塊 ... } http #http塊 { ... #http全局塊 server #server塊 { ... #server全局塊 location [PATTERN] #location塊 { ... } location [PATTERN] { ... } } server { ... } ... #http全局塊 }
########### 每個(gè)指令必須有分號(hào)結(jié)束。################# #user administrator administrators; #配置用戶或者組,默認(rèn)為nobody nobody。 #worker_processes 2; #允許生成的進(jìn)程數(shù),默認(rèn)為1 #pid /nginx/pid/nginx.pid; #指定nginx進(jìn)程運(yùn)行文件存放地址 error_log log/error.log debug; #制定日志路徑,級(jí)別。這個(gè)設(shè)置可以放入全局塊,http塊,server塊,級(jí)別以此為:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on multi_accept on; #設(shè)置一個(gè)進(jìn)程是否同時(shí)接受多個(gè)網(wǎng)絡(luò)連接,默認(rèn)為off #use epoll; #事件驅(qū)動(dòng)模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大連接數(shù),默認(rèn)為512 } http { include mime.types; #文件擴(kuò)展名與文件類型映射表 default_type application/octet-stream; #默認(rèn)文件類型,默認(rèn)為text/plain #access_log off; #取消服務(wù)日志 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式 access_log log/access.log myFormat; #combined為日志格式的默認(rèn)值 sendfile on; #允許sendfile方式傳輸文件,默認(rèn)為off,可以在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每個(gè)進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認(rèn)為0,即不設(shè)上限。 keepalive_timeout 65; #連接超時(shí)時(shí)間,默認(rèn)為75s,可以在http,server,location塊。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 } error_page 404 https://www.baidu.com; #錯(cuò)誤頁 server { keepalive_requests 120; #單連接請(qǐng)求上限次數(shù)。 listen 4545; #監(jiān)聽端口 server_name 127.0.0.1; #監(jiān)聽地址 location ~*^.+$ { #請(qǐng)求的url過濾,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。 #root path; #根目錄 #index vv.txt; #設(shè)置默認(rèn)頁 proxy_pass http://mysvr; #請(qǐng)求轉(zhuǎn)向mysvr 定義的服務(wù)器列表 deny 127.0.0.1; #拒絕的ip allow 172.18.5.54; #允許的ip } } }
$remote_addr 與 $http_x_forwarded_for 用以記錄客戶端的ip地址;
$remote_user :用來記錄客戶端用戶名稱;
$time_local : 用來記錄訪問時(shí)間與時(shí)區(qū);
$request : 用來記錄請(qǐng)求的url與http協(xié)議;
$status : 用來記錄請(qǐng)求狀態(tài);成功是200;
$body_bytes_s ent :記錄發(fā)送給客戶端文件主體內(nèi)容大小;
$http_referer :用來記錄從那個(gè)頁面鏈接訪問過來的;
$http_user_agent :記錄客戶端瀏覽器的相關(guān)信息;
驚群現(xiàn)象:一個(gè)網(wǎng)路連接到來,多個(gè)睡眠的進(jìn)程被同時(shí)叫醒,但只有一個(gè)進(jìn)程能獲得鏈接,這樣會(huì)影響系統(tǒng)性能。
每個(gè)指令必須有分號(hào)結(jié)束。
參見:
Nginx反向代理以及負(fù)載均衡配置 【nginx】配置Nginx實(shí)現(xiàn)負(fù)載均衡 Nginx 配置詳解
關(guān)于Nginx中怎么設(shè)置負(fù)載均衡和反向代理問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。