什么是 nginx
- Nginx是一個(gè)高性能的 HTTP 和反向代理服務(wù)器。特點(diǎn):占有內(nèi)存小,并發(fā)能力強(qiáng),事實(shí)上nginx 的并發(fā)能力確實(shí)是同類(lèi)網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好。
- Nginx是專(zhuān)門(mén)為性能優(yōu)化而開(kāi)發(fā),性能是最重要的考量,實(shí)現(xiàn)上非常注重效率,能經(jīng)受高負(fù)載的考驗(yàn),有報(bào)告表明支持高達(dá) 50000 個(gè)并發(fā)連接數(shù)。
nginx 安裝
1.將 Nginx 安裝包上傳到 Linux 中
官網(wǎng):http:///en/download.html 這里安裝使用的 Nginx 版本為 nginx-1.8.0.tar.gz
2 nginx 安裝環(huán)境
nginx 是 C 語(yǔ)言開(kāi)發(fā),建議在 linux 上運(yùn)行
-
gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴(lài) gcc 環(huán)境,如果沒(méi)有 gcc環(huán)境,需要安裝 gcc:yum install gcc-c++
-
PCRE
PCRE(Perl Compatible Regular Expressions)是一個(gè) Perl 庫(kù),包括 perl 兼容的正則表達(dá)式庫(kù)。nginx 的 http 模塊使用 pcre 來(lái)解析正則表達(dá)式,所以需要在 linux 上安裝 pcre 庫(kù)。
yum install -y pcre pcre-devel
注:pcre-devel 是使用 pcre 開(kāi)發(fā)的一個(gè)二次開(kāi)發(fā)庫(kù)。nginx 也需要此庫(kù)。
-
zlib
zlib 庫(kù)提供了很多種壓縮和解壓縮的方式,nginx 使用 zlib 對(duì) http 包的內(nèi)容進(jìn)行 gzip, 所以需要在 linux 上安裝 zlib 庫(kù)。
yum install -y zlib zlib-developenssl
-
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書(shū)封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。nginx 不僅支持 http 協(xié)議,還支持 https(即在 ssl 協(xié)議上傳輸 http),所以需要在linux 安裝 openssl 庫(kù)。
yum install -y openssl openssl-devel
3.編譯安裝
解壓:tar -zxvf nginx-1.8.0.tar.gz
進(jìn)入到 nginx 的根目錄 cd nginx-1.8.0
-
3.1配置安裝參數(shù) ./configure
參數(shù)設(shè)置如下:
./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
注意:上邊將臨時(shí)文件目錄指定為/var/temp/nginx,需要在/var 下創(chuàng)建 temp 及 nginx 目錄
--prefix=/usr/local/nginx決定將 nginx 安裝到什么位置,設(shè)置了就會(huì)自動(dòng)創(chuàng)建
-
3.2編譯安裝 編譯:make
編譯安裝 make install,安裝完成之后在/usr/local/nginx/sbin 下有 sbin 的啟動(dòng)腳本
4.操作Nginx
- 使用 nginx 操作的常用命令:必須要進(jìn)入 nginx 目錄中去才行 /usr/local/nginx/sbin
- 查看 nginx 版本號(hào) 查看版本號(hào) ./nginx -v
- 查看 nginx 啟動(dòng)狀態(tài) ps aux|grep nginx
- 啟動(dòng) nginx
cd /usr/local/nginx/sbin/
./nginx
注意:執(zhí)行./nginx 啟動(dòng) nginx,這里可以-c 指定加載的 nginx 配置文件,如下: ./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx 在啟動(dòng)時(shí)默認(rèn)加載 conf/nginx.conf 文件,此文件的地址也可以在 編譯安裝 nginx 時(shí)指定./configure 的參數(shù)(--conf-path= 指向配置文件(nginx.conf))
- 停止 nginx
方式 1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相當(dāng)于先查出 nginx 進(jìn)程 id 再使用 kill 命令強(qiáng)制殺掉進(jìn)程。
方式 2,完整停止(建議使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步驟是待 nginx 進(jìn)程處理任務(wù)完畢進(jìn)行停止。
- 重啟 nginx
方式 1,先停止再啟動(dòng)(建議使用):
對(duì) nginx 進(jìn)行重啟相當(dāng)于先停止 nginx 再啟動(dòng) nginx,即先執(zhí)行停止命令再執(zhí)行啟動(dòng)命令。 如下:
./nginx -s quit
./nginx
方式 2,重新加載配置文件:
當(dāng) nginx 的配置文件 nginx.conf 修改后,要想讓配置生效需要重啟 nginx,使用-s reload
不用先停止 nginx 再啟動(dòng) nginx 即可將配置信息在 nginx 中生效,如下:
./nginx -s reload
- 測(cè)試
nginx 安裝成功,啟動(dòng) nginx,即可訪問(wèn)虛擬機(jī)上的 nginx Nginx 默認(rèn)的是監(jiān)聽(tīng)80 端口
正向代理
- 在客戶端(瀏覽器)配置代理服務(wù)器,通過(guò)代理服務(wù)器進(jìn)行訪問(wèn),服務(wù)端訪問(wèn)的是真實(shí)的服務(wù)器
反向代理
- 我們只需要將請(qǐng)求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標(biāo)服務(wù)器獲取數(shù)據(jù)后,在返回給客戶端,此時(shí)反向代理服務(wù)器和目標(biāo)服務(wù)器對(duì)外就是一個(gè)服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真實(shí)服務(wù)器的 ip 地址。服務(wù)端訪問(wèn)的是代理的服務(wù)器
負(fù)載均衡
- 并發(fā)請(qǐng)求較大,使用單一服務(wù)器容易造成崩潰。單個(gè)服務(wù)器解決不了,我們?cè)黾臃?wù)器的數(shù)量,然后將請(qǐng)求額分發(fā)到各個(gè)服務(wù)器上,將原先請(qǐng)求集中到單個(gè)服務(wù)器上的情況改為分發(fā)到多個(gè)服務(wù)器上,將負(fù)載分發(fā)到不同的服務(wù)器,這就是所說(shuō)的負(fù)載均衡。
動(dòng)靜分離
- 為了加快網(wǎng)站的解析速度,可以吧動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面由不同服務(wù)器來(lái)解析,加快解析速度,降低單個(gè)服務(wù)器的壓力。這里會(huì)使用 Nginx 處理靜態(tài)頁(yè)面物理分離,Tomcat 處理動(dòng)態(tài)頁(yè)面。提供訪問(wèn)效率
nginx 使用
搭建虛擬主機(jī)
虛擬主機(jī)是一種特殊的軟硬件技術(shù),它可以將網(wǎng)絡(luò)上的每一臺(tái)計(jì)算機(jī)分成多個(gè)虛擬主 機(jī),每個(gè)虛擬主機(jī)可以獨(dú)立對(duì)外提供 www 服務(wù),這樣就可以實(shí)現(xiàn)一臺(tái)主機(jī)對(duì)外提供多個(gè) web 服務(wù),每個(gè)虛擬主機(jī)之間是獨(dú)立的,互不影響的。
虛擬主機(jī)技術(shù)是互聯(lián)網(wǎng)服務(wù)器采用的節(jié)省服務(wù)器硬件成本的技術(shù),虛擬主機(jī)技術(shù)主要應(yīng) 用于 HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)服務(wù),將一臺(tái)服務(wù)器的某項(xiàng)或 者全部服務(wù)內(nèi)容邏輯劃分為多個(gè)服務(wù)單位,對(duì)外表現(xiàn)為多個(gè)服務(wù)器,從而充分利用服務(wù)器硬 件資源。主要就是節(jié)省硬件成本
Nginx 的虛擬主機(jī)配置方式
Nginx 支持三種類(lèi)型的虛擬主機(jī)配置
-
基于 IP 的虛擬主機(jī)
這里使用一臺(tái) liunx 搭建 2 個(gè) ip,不同 ip 訪問(wèn)不同的 html 頁(yè)面(這里就是 nginx 的訪問(wèn)首頁(yè))
- 第一步,一臺(tái) linux 配置多 ip 方式,將動(dòng)態(tài) ip 改成靜態(tài) ip 進(jìn)入 cd /etc/sysconfig/network-scripts ,進(jìn)入配置 ,需將配置文件中BOOTPRPTP=static,其次添加另一個(gè) ip 配置內(nèi)容:保存重啟服務(wù)即可配置成功。
IPADDR=192.168.10.144
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=114.114.114.114
-
第二步修改 nginx 的配置文件,我這里是在/usr/local/nginx/conf 目錄下
Nginx 的配置文件 nginx.conf
如上述配置文件所示,主要由 6 個(gè)部分組成:
main:用于進(jìn)行 nginx 全局信息的配置
events:用于 nginx 工作模式的配置
http:用于進(jìn)行 http 協(xié)議信息的一些配置
server:用于進(jìn)行服務(wù)器訪問(wèn)信息的配置 ,一個(gè) server 就是一個(gè)虛擬機(jī)
location:用于進(jìn)行訪問(wèn)路由的配置
upstream:用于進(jìn)行負(fù)載均衡的配置
主要是對(duì) http 下 server 和 location 進(jìn)行修改配置即可
#一個(gè) Server 就是一個(gè)虛擬主機(jī)
server {
listen 80;
#為虛擬機(jī)指定 IP 或者是域名
server_name 192.168.70.144;
#主要配置路由訪問(wèn)信息
location / {
#用于指定訪問(wèn)根目錄時(shí),訪問(wèn)虛擬主機(jī)的 web 目錄 就是這個(gè)主頁(yè)的目錄
root html144;
#在不指定訪問(wèn)具體資源時(shí),默認(rèn)的展示資源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; }
}
-
基于端口的虛擬主機(jī)
-
基于端口和 ip 配置都差不多這里主要修改 listen 即可
#一個(gè) Server 就是一個(gè)虛擬主機(jī) 基于端口
server {
listen 8080;
#為虛擬機(jī)指定 IP 或者是域名
server_name 192.168.70.188;
#主要配置路由訪問(wèn)信息
location / {
#用于指定訪問(wèn)根目錄時(shí),訪問(wèn)虛擬主機(jī)的 web 目錄
root html8080;
#在不指定訪問(wèn)具體資源時(shí),默認(rèn)的展示資源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; location = /50x.html {
root html; }
}
-
基于域名的虛擬主機(jī)(以 mac 配置)
-
修改hosts 下面的映射關(guān)系 命令:sudo vi /etc/hosts,進(jìn)入之后進(jìn)行映射
192.168.70.188 www.123.com
-
修改 Nginx 的配置文件完成基于域名的虛擬主機(jī)配置
server {
listen 80;
#為虛擬機(jī)指定 IP 或者是域名,這里使用域名
server_name www.123.com;
#主要配置路由訪問(wèn)信息
location / {
#用于指定訪問(wèn)根目錄時(shí),訪問(wèn)虛擬主機(jī)的 web 目錄
root html-123;
#在不指定訪問(wèn)具體資源時(shí),默認(rèn)的展示資源的列表
index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html {
root html; }
}
這三種配置方式其實(shí)都比較類(lèi)似主要是修改 配置文件中的 listen,server_name,以及 location 既可以完成
反向代理
這里需要先對(duì) 虛擬機(jī)ip(nginx 默認(rèn)端口就是80可省略) 和域名做一個(gè)映射,前面已經(jīng)使用過(guò)不在贅述,其次就是修改 nginx.conf配置文件,完成配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## 增加這個(gè)屬性完成虛擬機(jī)代理,表示代理那個(gè)服務(wù)器
upstream tomcat_server1{
server 192.168.70.143:8080;
}
server {
listen 80;
#為虛擬機(jī)指定 IP 或者是域名
server_name com.123.com;
#主要配置路由訪問(wèn)信息 location / {
#用于指定訪問(wèn)根目錄時(shí),訪問(wèn)虛擬主機(jī)的 web 目錄 這里刪除 root,root 是去找虛擬機(jī)中的目錄
proxy_pass http://tomcat_server1;
#在不指定訪問(wèn)具體資源時(shí),默認(rèn)的展示資源的列表
通過(guò)以上配置,重啟 nginx 既可以完成代理,通過(guò)訪問(wèn) www.123.com,就可以訪問(wèn) tomcat 首頁(yè)
負(fù)載均衡
什么是負(fù)載均衡
- 負(fù)載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展 網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。負(fù)載均衡,英文名稱(chēng)為L(zhǎng)oad Balance,其意思就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,例如 Web 服務(wù)器、FTP 服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù) 服務(wù)器等,從而共同完成工作任務(wù)。
負(fù)載均衡的策略
-
輪詢(默認(rèn)) 每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器 down 掉,能自動(dòng)剔除。
-
指定權(quán)重
指定輪詢幾率,weight 和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。性能高的多處理
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
-
IP 綁定 ip_hash
每個(gè)請(qǐng)求按訪問(wèn) ip 的 hash 結(jié)果分配,這樣每個(gè)訪客固定訪 問(wèn)一個(gè)后端服務(wù)器,可以解決 session 的問(wèn)題。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
這里通過(guò)同一個(gè) liunx 上使用兩個(gè) tomcat 模擬
如何在一個(gè)虛擬機(jī)配置多個(gè) tomcat?
這里和使用一個(gè) tomcat 的時(shí)候是一致的,只需要修改配置文件中的標(biāo)簽即可,進(jìn)入 tomcat 目錄修改
如下標(biāo)簽,主要是為了區(qū)分端口號(hào):只要不要和第一個(gè) tomcat 相同即可,默認(rèn)端口是 8080
配置 nginx 的集群 還是在 nginx.conf 中進(jìn)行配置,直接在之前反向代理的配置中進(jìn)行增加即可,即可配置成集群
## 增加這個(gè)屬性完成虛擬機(jī)代理
upstream tomcat_server1{
server 192.168.70.143:8080; ## 直接在后面加權(quán)重即可
server 192.168.70.143:9090;
}
節(jié)點(diǎn)說(shuō)明:
在 http 節(jié)點(diǎn)里添加:
定義負(fù)載均衡設(shè)備的 Ip 及設(shè)備狀態(tài)
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用負(fù)載的 Server 節(jié)點(diǎn)下添加 proxy_pass http://myServer;
upstream 每個(gè)設(shè)備的狀態(tài):
down 表示單前的 server 暫時(shí)不參與負(fù)載
weight 默認(rèn)為 1.weight 越大,負(fù)載的權(quán)重就越大
fail_timeout:次失敗后,暫停的時(shí)間 默認(rèn) 10s
max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為 1.當(dāng)超過(guò)最大次數(shù)時(shí),返回
backup: 其它所有的非 backup 機(jī)器 down 或者忙的時(shí)候,請(qǐng)求 backup 機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。
|