成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Nginx常見(jiàn)配置

Anleb / 1789人閱讀

摘要:只需要兩個(gè)配置,個(gè),個(gè),分別用來(lái)做反向代理,和負(fù)載均衡。以反向代理為例,不自己處理的相關(guān)請(qǐng)求,而是把的相關(guān)請(qǐng)求轉(zhuǎn)發(fā)給來(lái)處理。

二話不說(shuō),直接進(jìn)入配置主題,若對(duì)nginx毫無(wú)了解的請(qǐng)?zhí)D(zhuǎn)Nginx入門(mén)到實(shí)戰(zhàn)(1)基礎(chǔ)篇

在此之前,先把配置參數(shù)所在位置分為四層

1. conf 全局層
2. http 服務(wù)器層
3. server 虛擬主機(jī)層
4. location 定位層

一、全局層
#有1個(gè)工作的子進(jìn)程,可以自行修改,但太大無(wú)益,因?yàn)橐獱?zhēng)奪CPU,一般設(shè)置為 CPU數(shù)*核數(shù)
worker_processes 1; 

#一般是配置nginx連接的特性,如1個(gè)子進(jìn)程能同時(shí)允許多少連接
Event {
    
    #這是指一個(gè)子進(jìn)程最大允許連1024個(gè)連接
    worker_connections  1024;
}

#這是配置http服務(wù)器的主要段
http { 
     
     #這是虛擬主機(jī)段
     Server1 {
      
            #定位,把特殊的路徑或文件再次定位,如image目錄多帶帶處理,如.php多帶帶處理
            Location {  
            ...    
            }
     }

     Server2 {
         ...
     }
}
二、HTTP服務(wù)器層 1. 網(wǎng)頁(yè)內(nèi)容的壓縮編碼與傳輸速度優(yōu)化
請(qǐng)求:
Accept-Encoding:gzip,deflate,sdch
響應(yīng):
Content-Encoding:gzip
Content-Length:36093

原理:
瀏覽器---請(qǐng)求----> 聲明可以接受 gzip壓縮 或 deflate壓縮 或compress 或 sdch壓縮。

從http協(xié)議的角度看--請(qǐng)求頭 聲明 acceopt-encoding: gzip deflate sdch (是指壓縮算法,其中sdch是google倡導(dǎo)的一種壓縮方式,目前支持的服務(wù)器尚不多)

服務(wù)器-->回應(yīng)---把內(nèi)容用gzip方式壓縮---->發(fā)給瀏覽器
瀏覽<-----解碼gzip-----接收gzip壓縮內(nèi)容

gzip    #配置的常用參數(shù)
gzip on|off;    #是否開(kāi)啟gzip
gzip_buffers 32 4K | 16 8K   #緩沖(壓縮在內(nèi)存中緩沖幾塊? 每塊多大?)
gzip_comp_level  #[1-9] #推薦6 壓縮級(jí)別(級(jí)別越高,壓的越小,越浪費(fèi)CPU計(jì)算資源)
gzip_disable    #正則匹配UA 什么樣的Uri不進(jìn)行g(shù)zip
gzip_min_length 200     #開(kāi)始?jí)嚎s的最小長(zhǎng)度(再小就不要壓縮了,意義不在)
gzip_http_version 1.0|1.1   # 開(kāi)始?jí)嚎s的http協(xié)議版本(可以不設(shè)置,目前幾乎全是1.1協(xié)議)
gzip_proxied          #設(shè)置請(qǐng)求者代理服務(wù)器,該如何緩存內(nèi)容
gzip_types text/plain  application/xml  #對(duì)哪些類(lèi)型的文件用壓縮如txt,xml,html ,css ,若不知道類(lèi)型名稱,可以查看nginx下conf文件夾的mime.types
gzip_vary on|off    #是否傳輸gzip壓縮標(biāo)志

注意:
圖片/mp3這樣的二進(jìn)制文件,不必壓縮因?yàn)閴嚎s率比較小,比如100->80字節(jié),而且壓縮也是耗費(fèi)CPU資源的。比較小的文件不必壓縮。

2. 緩存設(shè)置

對(duì)于網(wǎng)站的圖片,尤其是新聞?wù)?,圖片一旦發(fā)布,改動(dòng)的可能是非常小的。我們希望 能否在用戶訪問(wèn)一次后,圖片緩存在用戶的瀏覽器端,且時(shí)間比較長(zhǎng)的緩存。
可以, 用到nginx的expires設(shè)置。

#在location或if段里
    expires 30s;
    expires 30m;
    expires 2h;
    expires 30d;
    
location ~ image {
    expires 1d;
}

另: 304 也是一種很好的緩存手段

原理是: 服務(wù)器響應(yīng)文件內(nèi)容是,同時(shí)響應(yīng)etag標(biāo)簽(內(nèi)容的簽名,內(nèi)容一變,他也變), 和 last_modified_since 2個(gè)標(biāo)簽值。瀏覽器下次去請(qǐng)求時(shí),頭信息發(fā)送這兩個(gè)標(biāo)簽, 服務(wù)器檢測(cè)文件有沒(méi)有發(fā)生變化,如無(wú),直接頭信息返回 etag,last_modified_since
瀏覽器知道內(nèi)容無(wú)改變,于是直接調(diào)用本地緩存。
這個(gè)過(guò)程,也請(qǐng)求了服務(wù)器,但是傳著的內(nèi)容極少。
對(duì)于變化周期較短的,如靜態(tài)html,js,css,,比較適于用這個(gè)方式

三、虛擬主機(jī)層
#基于域名的虛擬主機(jī)
server {
    listen 80;  #監(jiān)聽(tīng)端口
    server_name a.com; #監(jiān)聽(tīng)域名

    location / {
            root /var/www/a.com;   #根目錄定位
            index index.html;
    }
}

#基于端口的虛擬主機(jī)配置 訪問(wèn) 192.xxx.xx.xxx:8080
server {
    listen 8080;    #監(jiān)聽(tīng)8080端口
    server_name 192.xxx.xx.xxx;    #服務(wù)器IP地址

    location / {
            root /var/www/html8080;
            index index.html;
    }
}
1. 日志管理
#不同的server可以使用不同的log
#此處定義了日志格式,最好定位在頂層,方便其他server公用
log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
    #                  "$status $body_bytes_sent "$http_referer" "
    #                  ""$http_user_agent" "$http_x_forwarded_for"";

$remote_addr                        用戶ip
$remote_user [$time_local]          用戶訪問(wèn)時(shí)間
$request                            請(qǐng)求類(lèi)型 get,post...
$status                             請(qǐng)求狀態(tài) 200 304...
$body_bytes_sent                    請(qǐng)求的內(nèi)容有多少字節(jié)
$http_referer                       上一個(gè)頁(yè)面來(lái)自哪里(從哪里跳轉(zhuǎn)過(guò)來(lái))
$http_user_agent                    用戶代理(用了什么瀏覽器訪問(wèn))



#這說(shuō)明 該server, 它的訪問(wèn)日志的文件,使用的格式main格式.
access_log  logs/host.access.log  main;

寫(xiě)一個(gè)sh腳本,每天半夜切分log日志,避免log每天累積造成文件過(guò)大

#!/bin/bash
base_path="/usr/local/nginx/logs"
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

#Crontab 編輯定時(shí)任務(wù)
01 00 * * * /xxx/path/b.sh  每天0時(shí)1分(建議在02-04點(diǎn)之間,系統(tǒng)負(fù)載小)
四、定位層 1. location定位

location 有“定位”的意思,根據(jù)Uri來(lái)進(jìn)行不同的定位,在虛擬主機(jī)的配置中,是必不可少的。location可以把網(wǎng)站的不同部分,定位到不同的處理方式上。

當(dāng)我們碰到“.php”, 如何調(diào)用PHP解釋器? --這時(shí)就需要location

#location 的語(yǔ)法
location [=|~|~*|^~] patt {
    ...
}
#中括號(hào)可以不寫(xiě)任何參數(shù),此時(shí)稱為一般匹配
#也可以寫(xiě)參數(shù)
#因此,大類(lèi)型可以分為3種
#首先看有沒(méi)有精準(zhǔn)匹配,如果有,則停止匹配過(guò)程,若沒(méi)有向下匹配到最符合的location
location = patt {} #[精準(zhǔn)匹配]
location patt{}  #[一般匹配]
location ~ patt{} #[正則匹配]

匹配順序?qū)嵗?

location / {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
        }

location ~ image {
           root /var/www/image;
           index index.html;
}
#如果我們?cè)L問(wèn)  http://xx.com/image/logo.png
#此時(shí), “/” 與”/image/logo.png” 匹配
#同時(shí),”image”正則 與”image/logo.png”也能匹配,誰(shuí)發(fā)揮作用?
#正則表達(dá)式的成果將會(huì)使用.
#圖片真正會(huì)訪問(wèn) /var/www/image/logo.png 
#注意,若在roo最后加了"/",那么將訪問(wèn)/var/www/image/image/logo.png 

匹配順序?qū)嵗?

location / {
             root   /usr/local/nginx/html;
             index  index.html index.htm;
         }
 
location /foo {
            root /var/www/html;
             index index.html;
}
#我們?cè)L問(wèn) http://xxx.com/foo
#對(duì)于uri “/foo”,   兩個(gè)location的patt,都能匹配他們
#即 ‘/’能從左前綴匹配 ‘/foo’, ‘/foo’也能左前綴匹配’/foo’,
#此時(shí), 真正訪問(wèn) /var/www/html/index.html 
#原因:’/foo’匹配的更長(zhǎng),因此使用之

總結(jié):

先判斷精準(zhǔn)命中,如果命中,立即返回結(jié)果并結(jié)束解析過(guò)程

判斷普通命中,如果有多個(gè)命中,記錄下最長(zhǎng)的命中結(jié)果為準(zhǔn)(記錄但不結(jié)束)

繼續(xù)判斷正則表達(dá)式的解析結(jié)果,按配置里的正則表達(dá)式順序?yàn)闇?zhǔn),由上往下,一旦匹配成功1個(gè),立即返回結(jié)果,并結(jié)束解析

分析:

普通命中順序無(wú)所謂,按命中長(zhǎng)短來(lái)決定

正則命中,按順序

2. rewrite 重寫(xiě)
#重寫(xiě)中用到的指令
if  (條件) {}  #設(shè)定條件,再進(jìn)行重寫(xiě) 
set #設(shè)置變量
return #返回狀態(tài)碼 
break #跳出rewrite
rewrite #重寫(xiě)

#If  語(yǔ)法格式
If 空格 (條件) {
    重寫(xiě)模式
}

#條件語(yǔ)法
1: “=”來(lái)判斷相等, 用于字符串比較
2: “~” 用正則來(lái)匹配(此處的正則區(qū)分大小寫(xiě))
   ~* 不區(qū)分大小寫(xiě)的正則
3: -f -d -e來(lái)判斷是否為文件,為目錄,是否存在.

例子

location / {
    #當(dāng)訪問(wèn)ip相等時(shí),返回403
    if  ($remote_addr = 192.xxx.xx.xx) { 
        return 403;
    }
    
    #如果是IE瀏覽器訪問(wèn) 
    if ($http_user_agent ~ MSIE) {
        rewrite ^.*$ /ie.htm;
        break; #若不brea,重定向后又會(huì)匹配到IE瀏覽器,又走到這一步,會(huì)循環(huán)重定向
    }
    
    #若訪問(wèn)目錄、文件不存在,重定向到404頁(yè)面
    if (!-e $document_root$fastcgi_script_name) {
        rewrite ^.*$ /404.html break;
    } 
    root html;
    index index.html
}

xx.com/dsafsd.html這個(gè)不存在頁(yè)面為例,我們觀察訪問(wèn)日志,日志中顯示的訪問(wèn)路徑,依然是GET /dsafsd.html HTTP/1.1。提示:服務(wù)器內(nèi)部的rewrite和302跳轉(zhuǎn)不一樣。
跳轉(zhuǎn)的話URL都變了,變成重新http請(qǐng)求404.html,而內(nèi)部rewrite, 上下文沒(méi)變,
就是說(shuō) fastcgi_script_name 仍然是 dsafsd.html,因此會(huì)循環(huán)重定向。

set 是設(shè)置變量用的, 可以用來(lái)達(dá)到多條件判斷時(shí)作標(biāo)志用,達(dá)到apache下的 rewrite_condition的效果

#使用set方式防止重定向死循環(huán)
if ($http_user_agent ~* msie) {
    set $isie 1;
}

if ($fastcgi_script_name = ie.html) {
    set $isie 0;
}

if ($isie 1) {
    rewrite ^.*$ ie.html;
}
3. Nginx與PHP配合
#當(dāng)碰到訪問(wèn) .php 的時(shí)候時(shí)候
location ~ .php$ {
    root html;
    #把請(qǐng)求的信息轉(zhuǎn)發(fā)給9000端口的PHP進(jìn)程
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    #告訴php進(jìn)程想運(yùn)行哪個(gè)php文件 
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

#1: 碰到php文件,
#2: 把根目錄定位到 html,
#3: 把請(qǐng)求上下文轉(zhuǎn)交給9000端口PHP進(jìn)程,
#4: 并告訴PHP進(jìn)程,當(dāng)前的腳本是 $document_root$fastcgi_scriptname
# (注:PHP會(huì)去找這個(gè)腳本并處理,所以腳本的位置要指對(duì))
4. 反向代理 + 負(fù)載均衡

用nginx做反向代理和負(fù)載均衡非常簡(jiǎn)單。

只需要兩個(gè)配置, 1個(gè)proxy, 1個(gè)upstream,分別用來(lái)做反向代理,和負(fù)載均衡。

以反向代理為例,nginx不自己處理php的相關(guān)請(qǐng)求,而是把php的相關(guān)請(qǐng)求轉(zhuǎn)發(fā)給apache來(lái)處理。

#將php程序交給8080端口的apache處理,實(shí)現(xiàn)動(dòng)靜分離
location ~ .php$ {
    proxy_pass  http://xxx.xxx.xx:8080 
}
http {
    ...
    #負(fù)載均衡服務(wù)器池
    upstream xxx {
        server 127.xx.xx.xx1;
        server 127.xx.xx.xx2;
    }
    server {
        liseten 80;
        server_name localhost;
        location / {
            #用戶真實(shí)IP
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://xxx     #upstream 對(duì)應(yīng)自定義名稱
            include proxy.conf;  
        }
    }
}

有收獲的朋友記得點(diǎn)個(gè) 收藏 哦~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39954.html

相關(guān)文章

  • Nginx反向代理跨域基本配置常見(jiàn)誤區(qū)

    摘要:同時(shí)由于跨域了,就想利用的反向代理去處理一下跨域,但是在解決問(wèn)題的同時(shí),發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問(wèn)題,在這里總結(jié)一下基本配置,也聊一下常見(jiàn)的配置問(wèn)題。 最近公司前后端分離,前端獨(dú)立提供頁(yè)面和靜態(tài)服務(wù)很自然的就想到了用nginx去做靜態(tài)服務(wù)器。同時(shí)由于跨域了,就想利用nginx的反向代理去處理一下跨域,但是在解決問(wèn)題的同時(shí),發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問(wèn)題,在這里總結(jié)一下基本配置...

    lindroid 評(píng)論0 收藏0
  • Nginx反向代理跨域基本配置常見(jiàn)誤區(qū)

    摘要:同時(shí)由于跨域了,就想利用的反向代理去處理一下跨域,但是在解決問(wèn)題的同時(shí),發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問(wèn)題,在這里總結(jié)一下基本配置,也聊一下常見(jiàn)的配置問(wèn)題。 最近公司前后端分離,前端獨(dú)立提供頁(yè)面和靜態(tài)服務(wù)很自然的就想到了用nginx去做靜態(tài)服務(wù)器。同時(shí)由于跨域了,就想利用nginx的反向代理去處理一下跨域,但是在解決問(wèn)題的同時(shí),發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問(wèn)題,在這里總結(jié)一下基本配置...

    JasonZhang 評(píng)論0 收藏0
  • Nginx 內(nèi)容緩存及常見(jiàn)參數(shù)配置

    摘要:設(shè)置一個(gè)共享內(nèi)存區(qū),該內(nèi)存區(qū)用于存儲(chǔ)緩存鍵和元數(shù)據(jù),有些類(lèi)似計(jì)時(shí)器的用途。注意,非活動(dòng)內(nèi)容有別于過(guò)期內(nèi)容。在兩次緩存管理器啟動(dòng)的間隔,緩存的數(shù)據(jù)量可能短暫超過(guò)配置的大小。為在緩存響應(yīng)之前必須使用相同密鑰的請(qǐng)求的最小次數(shù)。 原文鏈接:何曉東 博客 使用場(chǎng)景:項(xiàng)目的頁(yè)面需要加載很多數(shù)據(jù),也不是經(jīng)常變化的,不涉及個(gè)性化定制,為每次請(qǐng)求去動(dòng)態(tài)生成數(shù)據(jù),性能比不上根據(jù)請(qǐng)求路由和參數(shù)緩存一下結(jié)果,...

    KnewOne 評(píng)論0 收藏0
  • Nginx 內(nèi)容緩存及常見(jiàn)參數(shù)配置

    摘要:設(shè)置一個(gè)共享內(nèi)存區(qū),該內(nèi)存區(qū)用于存儲(chǔ)緩存鍵和元數(shù)據(jù),有些類(lèi)似計(jì)時(shí)器的用途。注意,非活動(dòng)內(nèi)容有別于過(guò)期內(nèi)容。在兩次緩存管理器啟動(dòng)的間隔,緩存的數(shù)據(jù)量可能短暫超過(guò)配置的大小。為在緩存響應(yīng)之前必須使用相同密鑰的請(qǐng)求的最小次數(shù)。 原文鏈接:何曉東 博客 使用場(chǎng)景:項(xiàng)目的頁(yè)面需要加載很多數(shù)據(jù),也不是經(jīng)常變化的,不涉及個(gè)性化定制,為每次請(qǐng)求去動(dòng)態(tài)生成數(shù)據(jù),性能比不上根據(jù)請(qǐng)求路由和參數(shù)緩存一下結(jié)果,...

    olle 評(píng)論0 收藏0
  • Nginx 內(nèi)容緩存及常見(jiàn)參數(shù)配置

    摘要:設(shè)置一個(gè)共享內(nèi)存區(qū),該內(nèi)存區(qū)用于存儲(chǔ)緩存鍵和元數(shù)據(jù),有些類(lèi)似計(jì)時(shí)器的用途。注意,非活動(dòng)內(nèi)容有別于過(guò)期內(nèi)容。在兩次緩存管理器啟動(dòng)的間隔,緩存的數(shù)據(jù)量可能短暫超過(guò)配置的大小。為在緩存響應(yīng)之前必須使用相同密鑰的請(qǐng)求的最小次數(shù)。 原文鏈接:何曉東 博客 使用場(chǎng)景:項(xiàng)目的頁(yè)面需要加載很多數(shù)據(jù),也不是經(jīng)常變化的,不涉及個(gè)性化定制,為每次請(qǐng)求去動(dòng)態(tài)生成數(shù)據(jù),性能比不上根據(jù)請(qǐng)求路由和參數(shù)緩存一下結(jié)果,...

    felix0913 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<