Nginx詳解

1瞧毙、Nginx簡介

1.1 什么是Nginx

Nginx(engine x)是一個高性能的Web服務(wù)器和反向代理服務(wù)器,也可以作為郵件代理服務(wù)器浸锨。

Nginx 特點是占有內(nèi)存少百侧,并發(fā)處理能力強(qiáng),以高性能谴供、低系統(tǒng)資源消耗而聞名块茁,Nginx官方測試為5萬并發(fā)請求。

Nginx是免費開源的桂肌,同時Nginx也有收費的商業(yè)版本数焊,商業(yè)版本提供了性能優(yōu)化、宕機(jī)等緊急問題處理等技術(shù)支持和服務(wù)崎场。

1.2 正向代理和反向代理概念

反向代理(Reverse Proxy)方式是指以==代理服務(wù)器==來接受internet上的連接請求佩耳,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端谭跨,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器干厚;

正向代理類似一個跳板機(jī)答恶,代理訪問外部資源。比如:我是一個用戶萍诱,我訪問不了某網(wǎng)站,但是我能訪問一個代理服務(wù)器污呼,這個代理服務(wù)器裕坊,它能訪問那個我不能訪問的網(wǎng)站,于是我先連上代理服務(wù)器燕酷,告訴它我需要那個無法訪問網(wǎng)站的內(nèi)容籍凝,代理服務(wù)器去取回來,然后返回給我。正向代理應(yīng)用最廣泛的就是“科學(xué)上網(wǎng)工具”苗缩。

綜上所述:==正向代理代理對象是客戶端饵蒂,反向代理代理對象是服務(wù)端。==

==軟件層面一般常用Nginx來做反向代理服務(wù)器酱讶,它的性能非常好退盯,用來做負(fù)載均衡。==

2泻肯、Nginx環(huán)境搭建

2.1 下載

wget http://nginx.org/download/nginx-1.14.2.tar.gz

2.2 安裝

Nginx的安裝需要確定Linux安裝相關(guān)的幾個庫渊迁,否則配置和編譯會出現(xiàn)錯誤,安裝的命令為:

yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

開始安裝:

  1. tar -zxvf nginx-1.14.2.tar.gz
  2. cd nginx-1.14.2
  3. ./configure --prefix=/usr/local/nginx(--prefix是指定安裝路徑)
  4. make
  5. make install

2.3 Nginx常用命令

啟動:

  1. 普通啟動:cd nginx/sbin/;./nginx
  2. 通過配置文件啟動: ./nginx -c /usr/local/nginx/conf/nginx.conf
  3. 查看進(jìn)程灶挟,檢查Nginx是否啟動:ps -ef | grep nginx

關(guān)閉:

  1. kill -QUIT 主pid(這種關(guān)閉方式會處理完請求后再關(guān)閉)
  2. kill -TERM 主pid(暴力關(guān)閉)

重啟Nginx:
./nginx -s reload

檢查配置文件是否正確:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf –t

3琉朽、Nginx配置文件說明

Nginx核心配置文件在/nginx/conf目錄下,名字為nginx.conf稚铣,內(nèi)容如下:

#配置worker進(jìn)程運(yùn)行用戶 nobody也是一個linux用戶箱叁,一般用于啟動程序,沒有密碼
user  nobody;  
#配置工作進(jìn)程數(shù)目惕医,根據(jù)硬件調(diào)整耕漱,通常等于CPU數(shù)量或者2倍于CPU數(shù)量
worker_processes  1;  

#配置全局錯誤日志及類型,[debug | info | notice | warn | error | crit]曹锨,默認(rèn)是error
error_log  logs/error.log;  
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;  #配置進(jìn)程pid文件 


###====================================================


#配置工作模式和連接數(shù)
events {
    worker_connections  1024;  #配置每個worker進(jìn)程連接數(shù)上限孤个,nginx支持的總連接數(shù)就等于worker_processes * worker_connections
}

###===================================================


#配置http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持
http {
    #配置nginx支持哪些多媒體類型,可以在conf/mime.types查看支持哪些多媒體類型
    include       mime.types;  
    #默認(rèn)文件類型 流類型沛简,可以理解為支持任意類型
    default_type  application/octet-stream;  
    #配置日志格式 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #配置access.log日志及存放路徑齐鲤,并使用上面定義的main日志格式
    #access_log  logs/access.log  main;

    sendfile        on;  #開啟高效文件傳輸模式
    #tcp_nopush     on;  #防止網(wǎng)絡(luò)阻塞

    #keepalive_timeout  0;
    keepalive_timeout  65;  #長連接超時時間椒楣,單位是秒

    #gzip  on;  #開啟gzip壓縮輸出
    
    ###-----------------------------------------------
    

    #配置虛擬主機(jī)捧灰,可以有多個
    server {
        listen       80;  #配置監(jiān)聽端口
        server_name  localhost;  #配置服務(wù)名

        #charset koi8-r;  #配置字符集

        #access_log  logs/host.access.log  main;  #配置本虛擬主機(jī)的訪問日志

    #默認(rèn)的匹配斜杠/的請求,當(dāng)訪問路徑中有斜杠/饲窿,會被該location匹配到并進(jìn)行處理
        location / {
        #root是配置服務(wù)器的默認(rèn)網(wǎng)站根目錄位置逾雄,默認(rèn)為nginx安裝主目錄下的html目錄
            root   html;  
        #配置首頁文件的名稱
            index  index.html index.htm;  
        }       

        #error_page  404              /404.html;  #配置404頁面
        # redirect server error pages to the static page /50x.html
        #error_page   500 502 503 504  /50x.html;  #配置50x錯誤頁面
        
    #精確匹配
    location = /50x.html {
            root   html;
        }

        #PHP 腳本請求全部轉(zhuǎn)發(fā)到Apache處理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        #PHP 腳本請求全部轉(zhuǎn)發(fā)到FastCGI處理
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        #禁止訪問 .htaccess 文件
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    
    #配置另一個虛擬主機(jī)
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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

    
    #配置https服務(wù)永品,安全的網(wǎng)絡(luò)傳輸協(xié)議鼎姐,加密傳輸,端口443喂走,運(yùn)維來配置
    #
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

4、Nginx主要應(yīng)用

4.1 靜態(tài)網(wǎng)站部署

Nginx是一個HTTP的web服務(wù)器帖池,可以將服務(wù)器上的靜態(tài)文件(如HTML睡汹、圖片等)通過HTTP協(xié)議返回給瀏覽器客戶端囚巴。

假設(shè)要將一個靜態(tài)網(wǎng)站ace部署到Nginx服務(wù)器上:

  1. 將ace上傳到linux的/opt/static目錄下
  2. 修改nginx.conf配置文件:
//在server中彤叉,通過location匹配訪問的路徑秽浇,然后轉(zhuǎn)發(fā)給靜態(tài)資源
location / {
    root html;
    root /opt/static/ace;
    index index.html index.htm;
}

location /ace { //這里接受/ace請求审残,去/opt/static下找資源
    root /opt/static;
    index index.html index.htm;
}
  1. 重啟nginx
  2. 在瀏覽器中輸入http://localhost:80/ace進(jìn)行訪問

location中配置路徑講解:

規(guī)則:==ip + port 等于 root==搅轿,假設(shè)server的配置如下:

server {  
    listen 80; #端口號  
    location / {  
        root /opt/static/ace; #靜態(tài)文件路徑
    }  
}

替換:

http://localhost:80/ = root = /opt/static/ace

http://localhost:80/ace = root/ace = /opt/static/ace/ace

4.2 負(fù)載均衡

在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺機(jī)器對外提供集中式服務(wù)。隨著業(yè)務(wù)量的增大铲敛,我們一臺服務(wù)器不夠用伐蒋,此時就會把多臺機(jī)器組成一個集群對外提供服務(wù)先鱼,但是焙畔,我們網(wǎng)站對外提供的訪問入口通常只有一個宏多,比如 www.web.com伸但。那么當(dāng)用戶在瀏覽器輸入www.web.com進(jìn)行訪問的時候更胖,如何將用戶的請求分發(fā)到集群中不同的機(jī)器上呢却妨,這就是負(fù)載均衡要做的事情管呵。

負(fù)載均衡通常是指將請求"均勻"分?jǐn)偟郊褐卸鄠€服務(wù)器節(jié)點上執(zhí)行捐下,這里的均勻是指在一個比較大的統(tǒng)計范圍內(nèi)是基本均勻的奸柬,并不是完全均勻婴程。

Nginx負(fù)載均衡

Nginx通過在nginx.conf文件進(jìn)行配置即可實現(xiàn)負(fù)載均衡

原理圖

負(fù)載均衡.png

配置如下:

  1. 在http模塊內(nèi)加上upstream配置
    upstream myweb {
        server  127.0.0.1:9100 weight=5;#這里可以是一個端口號為9100的tomcat
        server  127.0.0.1:9200 weight=2;#同上
    }

其中weight=1表示權(quán)重,用于后端服務(wù)器性能不均的情況铃肯,訪問比率約等于權(quán)重之比押逼,權(quán)重越大訪問機(jī)會越多挑格。

upstream是配置nginx與后端服務(wù)器負(fù)載均衡非常重要的一個模塊,并且==它還能對后端的服務(wù)器的健康狀態(tài)進(jìn)行檢查==灾搏,若后端服務(wù)器中的一臺發(fā)生故障士骤,則前端的請求不會轉(zhuǎn)發(fā)到該故障的機(jī)器拷肌。

  1. 在server模塊里添加location,并配置proxy_pass
    location /myweb {
        proxy_pass http://myweb;
    }

==其中myweb字符串要和upstream后面的字符串相等==若锁。

==Nginx常用負(fù)載均衡策略:==

  1. 輪詢(默認(rèn))
upstream backserver { 
        server 127.0.0.1:8080; 
        server 127.0.0.1:9090; 
} 

==注意:這里的輪詢并不是每個請求輪流分配到不同的后端服務(wù)器又固,與ip_hash類似乏冀,但是按照訪問url的hash結(jié)果來分配請求辆沦,使得每個url定向到同一個后端服務(wù)器,主要應(yīng)用于后端服務(wù)器為緩存時的場景下。==

  1. 權(quán)重
upstream backserver { 
        server 192.168.0.14 weight=5; 
        server 192.168.0.15 weight=2; 
} 

每個請求按一定比例分發(fā)到不同的后端服務(wù)器,weight值越大訪問的比例越大育拨,用于后端服務(wù)器性能不均的情況。

  1. ip_hash
upstream backserver { 
        ip_hash; 
        server 127.0.0.1:8080; 
        server 127.0.0.1:9090; 
}

==ip_hash也叫IP綁定析蝴,每個請求按訪問ip的hash值分配,這樣每個訪問客戶端會固定訪問一個后端服務(wù)器佑菩,可以解決會話Session丟失的問題。==

  1. 最少連接
upstream backserver { 
        least_conn;
        server 127.0.0.1:8080; 
        server 127.0.0.1:9090; 
}   

web請求會被轉(zhuǎn)發(fā)到連接數(shù)最少的服務(wù)器上

4.3 靜態(tài)代理

把所有靜態(tài)資源的訪問改為訪問nginx,而不是訪問tomcat莲蜘,這種方式叫靜態(tài)代理。因為nginx更擅長于靜態(tài)資源的處理鞠眉,性能更好,效率更高。

所以在實際應(yīng)用中,我們將靜態(tài)資源比如圖片胆胰、css、html厚柳、js等交給nginx處理扎谎,而不是由tomcat處理移袍。


靜態(tài)代理.png

Nginx靜態(tài)代理實現(xiàn)方式

  1. 在nginx.conf的location中配置靜態(tài)資源的后綴觅够。例如:當(dāng)訪問靜態(tài)資源,從linux服務(wù)器/opt/static目錄下獲取。
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid
|doc|ppt|pdf|xls|mp3|wma)$ {
        root /opt/static;
}

說明:

  • ~表示正則匹配,也就是說后面的內(nèi)容可以是正則表達(dá)式匹配恨课。
  • 第一個點 . 表示任意字符剂公。
  • *表示一個或多個字符希俩。
  • . 是轉(zhuǎn)移字符,是后面這個點的轉(zhuǎn)移字符诬留。
  • | 表示或者斜纪。
  • $ 表示結(jié)尾贫母。
  1. 在nginx.conf的location中配置靜態(tài)資源所在目錄文兑。例如當(dāng)訪問靜態(tài)資源,則從linux服務(wù)器/opt/static目錄下獲取腺劣。
location ~ .*/(css|js|img|images) {
        root   /opt/static;
}
xxx/css
xxx/js
xxx/img
xxx/images

我們將靜態(tài)資源放入 /opt/static 目錄下绿贞,然后用戶訪問時由nginx返回這些靜態(tài)資源。

4.4 動靜分離

Nginx的負(fù)載均衡和靜態(tài)代理結(jié)合在一起橘原,我們可以實現(xiàn)動靜分離籍铁,這是實際應(yīng)用中常見的一種場景。
動態(tài)資源趾断,如jsp由tomcat或其他web服務(wù)器完成拒名。
靜態(tài)資源,如圖片芋酌、css增显、js等由nginx服務(wù)器完成。
它們各司其職脐帝,專注于做自己擅長的事情同云。
動靜分離充分利用了它們各自的優(yōu)勢糖权,從而達(dá)到更高效合理的架構(gòu)。

架構(gòu)圖.png

整個架構(gòu)中炸站,一個nginx負(fù)責(zé)負(fù)載均衡星澳,兩個nginx負(fù)責(zé)靜態(tài)代理。Nginx在一臺Linux上安裝一份旱易,可以啟動多個Nginx禁偎,每個Nginx的配置文件不一樣即可。

4.5 虛擬主機(jī)

虛擬主機(jī)咒唆,就是把一臺物理服務(wù)器劃分成多個“虛擬”的服務(wù)器届垫,這樣我們的一臺物理服務(wù)器就可以當(dāng)做多個服務(wù)器來使用,從而可以配置多個網(wǎng)站全释。
Nginx提供虛擬主機(jī)的功能装处,就是為了讓我們不需要安裝多個Nginx,就可以運(yùn)行多個域名不同的網(wǎng)站浸船。
Nginx下妄迁,一個server標(biāo)簽就是一個虛擬主機(jī)。nginx的虛擬主機(jī)就是通過nginx.conf中server節(jié)點指定的李命,想要設(shè)置多個虛擬主機(jī)登淘,配置多個server節(jié)點即可;

配置虛擬主機(jī)方式

  1. 基于端口的虛擬主機(jī)
    基于端口的虛擬主機(jī)配置封字,使用端口來區(qū)分黔州。
    瀏覽器使用 同一個域名+端口 或 同一個ip地址+端口訪問;
    server {
            listen 8080;
            server_name www.myweb.com;
            location /myweb {
                proxy_pass http://www.myweb.com;
            }
    }
    server {
            listen 9090;
            server_name www.myweb.com;
            location /p2p {
                proxy_pass http://www.p2p.com;
            }
    }
  1. 基于域名的虛擬主機(jī)
    基于域名的虛擬主機(jī)是最常見的一種虛擬主機(jī)阔籽。
   server {
        listen       80;
        server_name  www.myweb.com;
        location /myweb {
           proxy_pass http://www. myweb.com;
        }
    }
    server {
        listen       80;
        server_name  www.p2p.com;
        location /myweb {
           proxy_pass http://www.p2p.com;
        }
    }

需要修改一下本地的hosts文件流妻,在hosts文件中配置:
本機(jī)ip www.myweb.com
本機(jī)ip www.p2p.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笆制,隨后出現(xiàn)的幾起案子绅这,更是在濱河造成了極大的恐慌,老刑警劉巖在辆,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件证薇,死亡現(xiàn)場離奇詭異,居然都是意外死亡匆篓,警方通過查閱死者的電腦和手機(jī)浑度,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸦概,“玉大人箩张,你說我怎么就攤上這事。” “怎么了伏钠?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵横漏,是天一觀的道長。 經(jīng)常有香客問我熟掂,道長缎浇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任赴肚,我火速辦了婚禮素跺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誉券。我一直安慰自己指厌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布踊跟。 她就那樣靜靜地躺著踩验,像睡著了一般。 火紅的嫁衣襯著肌膚如雪商玫。 梳的紋絲不亂的頭發(fā)上箕憾,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音拳昌,去河邊找鬼袭异。 笑死,一個胖子當(dāng)著我的面吹牛炬藤,可吹牛的內(nèi)容都是我干的御铃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼沈矿,長吁一口氣:“原來是場噩夢啊……” “哼上真!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起细睡,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤谷羞,失蹤者是張志新(化名)和其女友劉穎帝火,沒想到半個月后溜徙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡犀填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年蠢壹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片九巡。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡图贸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疏日,我是刑警寧澤偿洁,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站沟优,受9級特大地震影響涕滋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挠阁,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一宾肺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侵俗,春花似錦锨用、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寻歧,卻和暖如春跪者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熄求。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工渣玲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弟晚。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓忘衍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卿城。 傳聞我的和親對象是個殘疾皇子枚钓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • nginx介紹 Nginx是俄羅斯人編寫的十分輕量級的HTTP服務(wù)器,Nginx多望,它的發(fā)音為“engine X”嫩舟,...
    WickJohn閱讀 630評論 0 1
  • 基于域名的配置(核心配置如下) nginx的多server規(guī)范使用 nginx的主配置文件為/usr/local/...
    CaptainWhite閱讀 263評論 0 0
  • Nginx 是一個高性能的Http和反向代理web服務(wù)器。它可以作為靜態(tài)資源服務(wù)器怀偷,反向代理服務(wù)器家厌,也可以用作負(fù)載...
    逝去丶淺秋閱讀 609評論 0 3
  • 本文為看視頻《Nginx入門到實踐》總結(jié)的學(xué)習(xí)筆記。 一椎工、服務(wù)器基礎(chǔ)配置 遠(yuǎn)程鏈接服務(wù)器 默認(rèn)的用戶名是root饭于,...
    solocoder閱讀 4,413評論 1 0
  • nginx詳解 一蜀踏、什么是正向代理和反向代理? 正向代理image反向代理image URI掰吕、URL和URN: U...
    Jerry_Liang閱讀 788評論 0 6