Nginx代理服務(wù)器詳解

1. 什么是Nginx

1.1. 介紹

Nginx是一款高性能的http 服務(wù)器聋迎、反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。由俄羅斯的程序設(shè)計師Igor Sysoev用c語言所開發(fā),官方測試nginx能夠支支撐5萬并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗非常低绑榴,運行非常穩(wěn)定。

1.2. 主要運用場景

http服務(wù)器拣展。Nginx是一個http服務(wù)可以獨立提供http服務(wù)彭沼〉薰洌可以做網(wǎng)頁靜態(tài)服務(wù)器备埃。

虛擬主機。可以實現(xiàn)在一臺服務(wù)器虛擬出多個網(wǎng)站褐奴。例如個人網(wǎng)站使用的虛擬主機按脚。

反向代理,負載均衡敦冬。當(dāng)網(wǎng)站的訪問量達到一定程度后辅搬,單臺服務(wù)器不能滿足用戶的請求時,需要用多臺服務(wù)器集群可以使用nginx做反向代理。并且多臺服務(wù)器可以平均分擔(dān)負載堪遂,不會因為某臺服務(wù)器負載高宕機而某臺服務(wù)器閑置的情況介蛉。

2. Nginx的安裝與使用

2.1. 準備安裝環(huán)境

第一步:在Linux系統(tǒng)上安裝gcc環(huán)境。

yum -y install gcc-c++

第二步:安裝第三方開發(fā)包PCRE庫溶褪,nginx的http模塊使用pcre來解析正則表達式币旧,所以需要在linux上安裝pcre庫。

yum install -y pcre pcre-devel

第三步:安裝第三方zlib庫猿妈,nginx使用zlib對http包的內(nèi)容進行壓縮與解壓縮吹菱。

yum install -y zlib zlib-devel

第四步:安裝OpenSSL安全套接字密碼庫,囊括主要的密碼算法彭则、常用的密鑰和證書封裝管理功能及SSL協(xié)議鳍刷。

yum install -y openssl openssl-devel

2.2. 安裝Nginx

第一步:下載Nginx源碼包,并解壓到自己創(chuàng)建目錄俯抖。

第二步:進入到解壓目錄输瓜,依次輸入指令./configure、make芬萍、make install前痘,進行安裝,安裝完成后Nginx的相關(guān)文件在/usr/local/nginx目錄下担忧。如需要改變相關(guān)路徑芹缔,首先創(chuàng)建client目錄,然后在執(zhí)行configure命令時瓶盛,添加配置路徑項最欠,指令如下:

mkdir /var/temp/nginx/client -p
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
image.png

第三步:進入安裝目錄/usr/local/nginx/sbin/,啟動nginx惩猫,執(zhí)行命令:

[root@localhost sbin]# ./nginx

第四步:輸入指令ps aux|grep nginx檢查nginx是否啟動成功芝硬,并在瀏覽器中輸入ip進行訪問。

image.png
image.png

注:訪問的默認端口是80端口轧房。注意:看是否關(guān)閉防火墻拌阴。

2.3. Nginx相關(guān)命令

 /usr/local/nginx/sbin/nginx   # 啟動服務(wù)
 /usr/local/nginx/sbin/nginx -s reload  # 重新加載服務(wù)
 /usr/local/nginx/sbin/nginx -s stop    # 停止服務(wù)
 /usr/local/nginx/sbin/nginx -s quit    # 停止服務(wù)

補充:為Nginx添加開機自動啟動。

第一步:修改/etc/rc.local文件奶镶,添加一行/usr/local/nginx/sbin/nginx迟赃,保存并退出。

image.png

第二步:在/etc目錄下執(zhí)行指令厂镇,使其生效纤壁。

chmod 755 rc.local

3. Nginx配置多個虛擬主機

虛擬的主機就是在一臺服務(wù)器啟動多個網(wǎng)站。Nginx可以通過端口不同和域名不同來區(qū)分不同的網(wǎng)站捺信。

3.1. 通過端口區(qū)分虛擬主機

第一步:vim打開配置文件/usr/local/nginx/conf/nginx.conf酌媒,添加兩個不同端口的Server,并修改listen訪問端口和root對應(yīng)的訪問目錄,此目錄默認為/usr/local/nginx/html秒咨,這里改為html1和html2喇辽。

image.png

第二步:復(fù)制/usr/local/nginx/html文件夾兩份,名字分別為html1和html2雨席。注意名字要去第一步root修改的名字一樣茵臭。

image.png

第四步:為了區(qū)分是否為不同虛擬主機,修改html1和html2目錄下的index.html文件舅世,如下:

image.png
image.png

第三步:執(zhí)行Nginx重啟命令旦委,重啟。

/usr/local/nginx/sbin/nginx -s reload

第四步:在瀏覽器中輸入地址+端口雏亚,訪問如下缨硝,表示配置成功。

image.png

image.png

3.2. 通過域名區(qū)分虛擬主機

3.2.1 域名的分類

域名分為一級域名(頂級域名)罢低、二級域名和三級域名查辩。舉例如下:

一級域名:又叫頂級域名

Baidu.com

Taobao.com

Jd.com

二級域名:

www.baidu.com

Image.baidu.com

Item.baidu.com

三級域名:

1.Image.baidu.com

Aaa.image.baidu.com

3.2.2 域名訪問網(wǎng)站的過程

域名訪問網(wǎng)站,其本質(zhì)還是通過Tcp/ip協(xié)議訪問,以下為通過域名訪問的流程圖:

image.png

DNS服務(wù)器:把域名解析為ip地址网持。保存的就是域名和ip的映射關(guān)系,可以簡單的理解為一個MAP<KEY,VALUE>宜岛。

本地測試可以修改host文件。修改window的hosts文件:(C:\Windows\System32\drivers\etc)功舀,可以通過SwitchHosts工具萍倡,以管理員權(quán)限運行的方式進行修改。

3.2.3 配置域名并訪問

第一步:修改Window系統(tǒng)文件C:\Windows\System32\drivers\etc\hosts辟汰,添加需要訪問的域名列敲,可以通過SwitchHosts工具添加。

image.png

第二步:打開hosts文件帖汞,檢查是否添加成功戴而。如果沒有添加成功,請檢查是否開啟相關(guān)權(quán)限控制軟件翩蘸,如360安全衛(wèi)士所意。

image.png

第三步:在Linux系統(tǒng)中,vim打開配置文件/usr/local/nginx/conf/nginx.conf催首,添加兩個不同端口的Server扶踊,并修改server_name訪問域名和root對應(yīng)的訪問目錄,這里改為html3和html4翅帜。

image.png

第四步:復(fù)制/usr/local/nginx/html文件夾兩份姻檀,名字分別為html3和html4。注意名字要去第三步root修改的名字一樣涝滴。

image.png

第五步:為了區(qū)分是否為不同虛擬主機,修改html3和html4目錄下的index.html文件,如下:

image.png

image.png

第六步:執(zhí)行Nginx重啟命令歼疮,重啟杂抽。

/usr/local/nginx/sbin/nginx -s reload

第七步:在瀏覽器中輸入域名,訪問如下韩脏,表示配置成功缩麸。

image.png
image.png

4. Nginx代理模式

Nginx代理模式分為正向代理和反向代理。正向代理指的是赡矢,用戶訪問代理服務(wù)器杭朱,代理服務(wù)器直接轉(zhuǎn)發(fā)請求到指定服務(wù)器;反向代理指的是吹散,用戶訪問公網(wǎng)ip網(wǎng)站入口弧械,由代理服務(wù)器決定內(nèi)部網(wǎng)絡(luò)上哪一臺服務(wù)器提供對應(yīng)服務(wù)。以下正向代理和反向代理通過tomcat服務(wù)器演示空民。

4.1. 配置正向代理

正向代理刃唐,需要在客戶機中安裝代理軟件。用戶訪問網(wǎng)站時界轩,會被代理軟件攔截画饥,然后代理軟件去請求用戶訪問的網(wǎng)站,獲得網(wǎng)站數(shù)據(jù)浊猾,在返回給用戶抖甘,在訪問過程中,瀏覽器地址欄網(wǎng)站不會發(fā)生改變葫慎。

4.2. 配置反向代理

第一步:安裝兩個tomcat单山,修改配置文件端口分別為8081和8082。為了進行區(qū)分幅疼,修改tomcat目錄下/ webapps/ROOT/index.jsp文件米奸,然后啟動兩個tomcat。

image.png
image.png

第二步:修改Window系統(tǒng)文件C:\Windows\System32\drivers\etc\hosts爽篷,添加需要訪問的域名悴晰,可以通過SwitchHosts工具添加。

image.png

第三步:在Linux系統(tǒng)中逐工,vim打開配置文件/usr/local/nginx/conf/nginx.conf铡溪,添加兩個不同端口的Server,并修改server_name訪問域名泪喊;分別添加upstream tomcat1和upstream tomcat2棕硫;在location中添加proxy_pass 為tomcat1和tomcat2訪問地址。(也可不添加upstream袒啼,直接在proxy_pass中添加訪問地址)

image.png

第四步:執(zhí)行Nginx重啟命令哈扮,重啟纬纪。

第五步:在瀏覽器中輸入指定域名,訪問如下滑肉,表示配置成功包各。

image.png
image.png

5. 負載均衡

如果一個服務(wù)由多臺服務(wù)器提供,需要把負載分配到不同的服務(wù)器處理靶庙,需要配置負載均衡问畅,默認的負載均衡的策略就是輪詢的方式。

upstream tomcat2 {
    server 192.168.25.130:8081;
    server 192.168.25.130:8082;
 }

也可以根據(jù)服務(wù)器的實際情況調(diào)整服務(wù)器權(quán)重六荒。權(quán)重越高分配的請求越多护姆,權(quán)重越低分配的請求越,默認是都是1掏击。

upstream tomcat2 {
    server 192.168.25.130:8081;
    server 192.168.25.130:8082 weight=2;
 }

其他的負載均衡的策略:1.通過IP地址的hash值 做映射卵皂。2.通過URL的方式計算出Hash值 。3.隨機策略铐料。4.最少并發(fā)量渐裂。

查考nginx.conf配置方案:

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
    
    upstream myapp1 {
        server 192.168.25.132:9090 weight=2;
        server 192.168.25.132:9091 weight=10;
    }

    server {
        listen 80;
        server_name www.demon.com;
        location / {
            proxy_pass http://myapp1;
            index index.jsp index.html index.htm;
        }
    }
}

6. 擴展知識

6.1. Nginx解決跨域問題

以下為文件上傳的跨域配置方案:

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen 80;
        server_name www.demon.com;
        add_header 'Access-Control-Allow-Origin'  '*';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
        location / {
            proxy_pass  http://192.168.25.134:8888;
            if ($request_method = 'OPTIONS') {
                add_header Access-Control-Allow-Origin  *;
                add_header Access-Control-Allow-Headers X-Requested-With;
                add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
                # 解決假請求問題,如果是簡單請求則沒有這個問題钠惩,但這里是上傳文件柒凉,首次請求為 OPTIONS 方式,實際請求為 POST 方式
                # Provisional headers are shown.
                # Request header field Cache-Control is not allowed by Access-Control-Allow-Headers in preflight response.
                add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range;
                return 200;
            }
        }
    }
}

6.2. Keepalived實現(xiàn)Nginx主備

Keepalived是集群管理中保證集群高可用的一個服務(wù)軟件篓跛,用來防止單點故障膝捞。

Keepalived的作用是檢測web服務(wù)器的狀態(tài),如果有一臺web服務(wù)器死機愧沟,或工作出現(xiàn)故障蔬咬,Keepalived將檢測到,并將有故障的web服務(wù)器從系統(tǒng)中剔除沐寺,當(dāng)web服務(wù)器工作正常后Keepalived自動將web服務(wù)器加入到服務(wù)器群中林艘,這些工作全部自動完成,不需要人工干涉混坞,需要人工做的只是修復(fù)故障的web服務(wù)器狐援。

6.3 配置HTTPS

編譯命令

./configure --prefix=/data/test/nginx/ --with-http_stub_status_module --with-http_ssl_module --with-stream

配置文件:

#user  nobody;
worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  fin-uatms.vvtechnology.cn;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


    # HTTPS server
    #
    server {

        listen 443 ssl;
        server_name fin-uatms.vvtechnology.cn;

        ssl_certificate   /data/test/nginx/fin-uatms.vvtechnology.cn.pem;
        ssl_certificate_key  /data/test/nginx/fin-uatms.vvtechnology.cn.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者究孕。
  • 序言:七十年代末啥酱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厨诸,更是在濱河造成了極大的恐慌镶殷,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件微酬,死亡現(xiàn)場離奇詭異绘趋,居然都是意外死亡颤陶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門埋心,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指郁,“玉大人忙上,你說我怎么就攤上這事拷呆。” “怎么了疫粥?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵茬斧,是天一觀的道長。 經(jīng)常有香客問我梗逮,道長项秉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任慷彤,我火速辦了婚禮娄蔼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘底哗。我一直安慰自己岁诉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布跋选。 她就那樣靜靜地躺著涕癣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪前标。 梳的紋絲不亂的頭發(fā)上坠韩,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音炼列,去河邊找鬼只搁。 笑死,一個胖子當(dāng)著我的面吹牛俭尖,可吹牛的內(nèi)容都是我干的氢惋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼目溉,長吁一口氣:“原來是場噩夢啊……” “哼明肮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缭付,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柿估,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陷猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秫舌,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡的妖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了足陨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂粟。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖墨缘,靈堂內(nèi)的尸體忽然破棺而出星虹,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站似芝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卸亮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一玩裙、第九天 我趴在偏房一處隱蔽的房頂上張望兼贸。 院中可真熱鬧,春花似錦吃溅、人聲如沸溶诞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽很澄。三九已至,卻和暖如春颜及,著一層夾襖步出監(jiān)牢的瞬間甩苛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工俏站, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讯蒲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓肄扎,卻偏偏與公主長得像墨林,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犯祠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359