原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請注明:轉(zhuǎn)載自IT人故事會(huì),謝謝!
原文鏈接地址:『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)-nginx(上)(19)
今天說說nginx, 其實(shí)有老鐵比較奇怪,nginx不是運(yùn)維來搞的嗎?確實(shí)是的,大部分情況下,公司比較大的話,存在運(yùn)維的話,這個(gè)鍋肯定是運(yùn)維來做的。但是現(xiàn)在有個(gè)趨勢叫devops之前我也說過,開發(fā)運(yùn)維一體化,開發(fā)也要懂一定的運(yùn)維知識。在一些互聯(lián)網(wǎng)的創(chuàng)業(yè)公司剛開始技術(shù)的工種,并不是分的那么清楚,可能都要會(huì)的。環(huán)境的搭建,運(yùn)維,框架搭建,開發(fā)都必須拿得下來。
源碼:https://github.com/limingios/netFuture/tree/master/nginx

Nginx服務(wù)搭建與基礎(chǔ)演示(一)
Nginx
- 官網(wǎng)

- 介紹
Nginx是一個(gè)輕量級、高性能、穩(wěn)定性高、并發(fā)性好的HTTP和反向代理服務(wù)器。也是由于其的特性,其應(yīng)用非常廣。
- 歷史
由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),最初供俄國大型的入口網(wǎng)站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁伺服器中表現(xiàn)較好.目前中國大陸使用nginx網(wǎng)站用戶有:新浪、網(wǎng)易、 騰訊,另外知名的微網(wǎng)志Plurk也使用nginx。
- 理解代理的概念
1.正向代理:某些情況下,代理我們用戶去訪問服務(wù)器,需要用戶手動(dòng)的設(shè)置代理服務(wù)器的ip和端口號。
2.反向代理:是用來代理服務(wù)器的,代理我們要訪問的目標(biāo)服務(wù)器。代理服務(wù)器接受請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)的服務(wù)器(集群化),并將從服務(wù)器上得到的結(jié)果返回給客戶端,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)服務(wù)器。
- 根據(jù)源碼配置的機(jī)器

| 系統(tǒng)類型 | IP地址 | 節(jié)點(diǎn)角色 | CPU | Memory | Hostname |
|---|---|---|---|---|---|
| Centos7 | 192.168.66.110 | nginx | 1 | 2G | nginx |
| Centos7 | 192.168.66.111 | tomcat | 1 | 2G | tomcat1 |
| Centos7 | 192.168.66.112 | tomcat | 1 | 2G | tomcat2 |

- 三臺(tái)機(jī)器
準(zhǔn)備工作
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel



- nginx主機(jī)安裝pcre的安裝包(192.168.66.110)
https://sourceforge.net/projects/pcre/files/pcre/
nginx rewrite依賴于PCRE庫,所以需要在linux系統(tǒng)中編譯安裝PCRE庫

wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.41/pcre-8.41.tar.gz
tar zxvf pcre-8.41.tar.gz
cd image.png
./configure
make && make install
pcre-config --prefix



- 安裝nginx
cd ..
wget http://nginx.org/download/nginx-1.13.10.tar.gz
tar zxvf nginx-1.13.10.tar.gz
mkdir nginx
cd nginx-1.13.10
./configure --prefix=/root/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/root/pcre-8.41
make && make install
cd ~
cd nginx/sbin/
./nginx -v
./nginx -t


- 啟動(dòng)nginx
cd ~/nginx/sbin/
./nginx
其實(shí)沒有權(quán)限

修改配置文件
vi ~/nginx/conf/nginx.conf
#修改成user root
#wq保存
#重新加載nginx新的配置
./sbin/nginx -s reload



- 111 和112 兩個(gè)機(jī)器安裝tomcat
java -version
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz


tar zxvf apache-tomcat-8.5.37.tar.gz
cd apache-tomcat-8.5.37
cd bin
./startup.sh
curl 127.0.0.1:8080




- 111 和112 添加一個(gè)index.jsp文件方法查看
cd /root/apache-tomcat-8.5.37/webapps/ROOT
>index.jsp
vi index.jsp
cat index.jsp




upstream 與location 模塊參數(shù)與案例講解(二)
未來軟件其實(shí)都是趨于模塊化的。拼裝完成。
upstream
- 官網(wǎng)的介紹

- upstream實(shí)例

- upstream 參數(shù)
| 參數(shù)名稱 | 描述 |
|---|---|
| service | 反向服務(wù)地址 加端口 |
| weight | 權(quán)重 |
| max_fails | 失敗多少次 認(rèn)為主機(jī)已掛掉則,踢出,默認(rèn)是1次,企業(yè)一般配置2到3次,但是電商更加重視用戶體驗(yàn)所以就是1次。前提這個(gè)機(jī)器供給比較多。 |
| fail_timeout | 踢出后重新探測時(shí)間 |
| backup | 備用服務(wù) |
| max_conns | 允許最大連接數(shù) |
| slow_start | 當(dāng)節(jié)點(diǎn)恢復(fù),不立即加入 |
修改66.110 那個(gè)nginx配置文件
vi /root/nginx/conf/nginx.conf
cat /root/nginx/conf/nginx.conf


因?yàn)闄?quán)重相同,所以輪播111 和 112 2個(gè)tomcat


*負(fù)載均衡算法
1.ll+weight
默認(rèn)的負(fù)載算法,其實(shí)就是根據(jù)權(quán)重才分配服務(wù)請求。
2.ip_hash
基于Hash 計(jì)算 應(yīng)用場景:保持session 一至性,第一次訪問那臺(tái),一直是同一臺(tái)。hash(ip)%3 =index。弊端小區(qū)或者學(xué)校集中化的地方,他們出去的ip都是一致的,某個(gè)節(jié)點(diǎn)負(fù)載會(huì)非常非常的大。成為熱點(diǎn),有了ip_hash導(dǎo)致weight權(quán)重就失效了。
3.url_hash
(第三方)應(yīng)用場景:靜態(tài)資源緩存,節(jié)約存儲(chǔ),加快速度
4.least_conn
最少鏈接
5.least_time
最小的響應(yīng)時(shí)間,計(jì)算節(jié)點(diǎn)平均響應(yīng)時(shí)間,然后取響應(yīng)最快的那個(gè),分配更高權(quán)重。
6.keeplive
占用連接數(shù)。內(nèi)存消耗比較大,但是響應(yīng)速度很快,應(yīng)該保持這socket連接。
- location
1.root
后面的配置相當(dāng)于把瀏覽器中的輸入路徑進(jìn)行了重指
2.index
在前后端分離的基礎(chǔ)上,指定網(wǎng)站初始頁
3.proxy_set_header
用來重定義發(fā)往后端服務(wù)器的請求頭
4.proxy_pass
如果在proxy_pass后面的url加/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分也給代理走

動(dòng)靜分離方案
一般動(dòng)靜分離兩種方式
- 靜態(tài)文件放入nginx
- 靜態(tài)文件放入指定的服務(wù)器,通過請求地址來區(qū)別跳轉(zhuǎn)到那個(gè)服務(wù)器。
- 靜態(tài)文件放入nginx
#思路:動(dòng)、靜態(tài)的文件,請求時(shí)匹配不同的目錄當(dāng)訪問gif,jpeg時(shí) 直接訪問e:wwwroot;
server {
listen 80;
server_name localhost;
location / {
root e:wwwroot;
index index.html;
}
# 所有靜態(tài)請求都由nginx處理,存放目錄為html
location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root e:wwwroot;
}
# 所有動(dòng)態(tài)請求都轉(zhuǎn)發(fā)給tomcat處理
location ~ .(jsp|do)$ {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root e:wwwroot;
}
}
- 靜態(tài)服務(wù)器的方式
多個(gè)upstream,多個(gè)location, location的名稱不一樣。
PS:最后來個(gè)通俗的說法,你就是大王,我是你的太監(jiān),upstream就是后宮,后宮可以有多個(gè),每個(gè)后宮里面已經(jīng)分配好了按照罩杯不同,后宮A全部都是A罩杯,后宮B全部都是B罩杯,后宮里面有很多愛妃,到晚上了大王有需求了,告訴太監(jiān),太監(jiān)根據(jù)后宮的情況,按照一定的算法,看看那個(gè)愛妃可以進(jìn)行侍寢,我這個(gè)太監(jiān)就告訴大王,大王就直接去我通過算法的方式告訴他的愛妃哪里。