Nginx安裝

安裝
安裝依賴
在Linux中是編譯安裝,所以要準備一系列工具

yum install pcre-devel make gcc gcc-c++ ncurses-devel perl zlib zlib-devel openssl openssl-devel
工具目的 程序
編譯器 make gcc gcc-c++
安全協議 openssl openssl-devel
語言 perl腳本語言
正則表達式庫 pcre-devel(用于perl語言)
壓縮庫 zlib zlib-devel
字符處理庫 ncurses-devel
cd /usr/local/
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1  

執行Configuration配置檢查文件,指定目錄到剛剛新建的nginx目錄里

./configure --prefix=/usr/local/nginx 

執行make操作和make install進行安裝

make
make install

安裝完成后,將nginx命令移動到$PATH的目錄下,這樣就不用每次都cd到 /usr/local/sbin 里去運行了

mv /usr/local/nginx/sbin/nginx /usr/local/bin/

然后使用nginx -c 命令指定配置文件,接著使用 nginx -t 命令檢查配置文件是否正確,得到反饋syntax is ok

nginx -c /usr/local/nginx/conf/nginx.conf
nginx -t

啟動:

nginx

重啟:

nginx -s reload

立即停止:

nginx –s stop

溫和停止:

nginx -s quit

強制關閉:

pkill nginx

打開瀏覽器訪問此機器的 IP,如果瀏覽器出現 Welcome to nginx! 則表示 Nginx 已經安裝并運行成功。

配置
Nginx配置文件常見結構的從外到內依次是「http」「server」「location」等等,缺省的繼承關系是從外到內,也就是說內層塊會自動獲取外層塊的值作為缺省值。

  • HTTP
    HTTP代表在該計算機上啟動HTTP路由,可以開啟不同的server服務,所以HTTP內可以包括多個server。
http {
  server {
    # 在80端口監聽http服務
    # 正常情況下會和個人電腦的瀏覽器沖突,但是服務器上一般沒瀏覽器
    # 因為瀏覽器之所以能上網,就是在80端口不停的監聽http服務
    listen       80;  
    server_name  localhost;
    ......
  }

  server {
    # 在8080端口監聽http服務
    listen       8080;
    server_name  localhost;
    ......
  }

  ......
}
  • Server
    接收請求的服務器需要將不同的請求按規則轉發到不同的后端服務器上,在 nginx 中我們可以通過構建虛擬主機(server)的概念來將這些不同的服務配置隔離。
server {
    listen       80;
    server_name  host1;
    root   html;
    index  index.html index.htm;
}
server {
    listen       80;
    server_name  host2;
    root   /data/www/html;
    index  index.html index.htm;
}

這里的 listen 指監聽端口,server_name 用來指定IP或域名,多個域名對應統一規則可以空格分開,index 用于設定訪問的默認首頁地址,root 指令用于指定虛擬主機的網頁跟目錄,這個地方可以是相對地址也可以是絕對地址。
但是當 server 超過2個時,建議將不同對虛擬主機的配置放在另一個文件中,然后通過在主配置文件 nginx.conf 加上 include 指令包含進來。更便于管理。

include vhosts/*.conf;

由于DNS的存在,我們可以使用一個IP對應多個域名,比如 www.a.comwww.b.com 這個稱之為host,后邊的才是路徑path,Nginx會對HTTP的Request報文做如下處理。

POST /psas/bug/image/confirm HTTP/1.1  <== 第一行才是path
Accept: application/json
Content-Type: text/plain; charset=utf-8
Cookie: JSESSIONID=h72ql6a
Host: www.a.com:8080        <== 這一行是host
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.0) GCDHTTPRequest
Content-Length: 366

接收到請求后去HTTP報文頭拿host字段。
去和server name字段進行匹配,哪個匹配上用哪個處理。
如果沒有匹配上,就用listen了當前端口的默認server處理。
默認server可以自己設置,如果沒有設置,默認配置文件中最靠前是默認。

  • Location
    每個 url 請求都會對應的一個服務,nginx 進行處理轉發或者是本地的一個文件路徑,或者是其他服務器的一個服務路徑。而這個路徑的匹配是通過 location 來進行的。我們可以將 server 當做對應一個域名進行的配置,而 location 是在一個域名下對更精細的路徑進行配置。如果有多個匹配的location塊,則nginx選擇最長前綴的那個。/的location塊的前綴只有一個字符,是最短的,因此只有當其它location都匹配失敗時,這個location才會被選擇。
    匹配例子:
location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何請求,因為所有請求都是以"/"開始
  # 但是更長字符匹配或者正則表達式匹配會優先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 開始的請求,并停止匹配 其它location
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg結尾的請求. 
  # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
  [ configuration D ] 
}

請求:

/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D

具體可參考:Location配置詳細

服務靜態內容:
web服務器的一個重要任務是對外輸出文件,比如圖片和靜態網頁。你會實現一個這樣的例子:根據不同的請求,文件會從不同的本地目錄,如: /data/www (html) 和 /data/images 被輸出。這需要修改配置文件并且在http塊指令中建立帶有兩個location塊的server塊。
首先,創建/data/www的目錄并且放置一個index.html的文件,然后創建/data/images目錄并放置一些圖片
下面的例子中它會匹配以/images/開始的請求(location / 也會匹配這個請求,但它的前綴更短) 。如,server塊指令看起來就像這樣

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

這個配置已經可以工作了,它監聽在標準的80端口上,并且可以在本機上通過http://localhost/ 訪問。為了響應以/images/開頭的URI,服務器會從/data/images目錄中發送文件。比如:為了響應http://localhost/images/example.png ,nginx會發送/data/images/example.png這個文件,如果不存在這樣的文件,nginx就會發送404錯誤。而不以/images/開頭的請求則被映射到/data/www目錄,比如:http://localhost/some/example.html 被映射到/data/www/some/example.html文件。

建立簡單的代理服務器:
nginx一個最常見的用途就是用作代理服務器,也就是把收到的請求傳遞給被代理的服務器,并從被代理服務器中取回響應,再將其發送給客戶端。
我們會配置一個基本的代理服務器,對于圖片文件的請求,從本地目錄中發送文件,而對于其它的請求,則把請求轉發給另一個被代理服務器。在這個例子里,兩個服務器都會在一個單一的nginx實例中被定義。
首先,通過添加一個塊指令定義一個被代理服務器:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

這是一個監聽在8080端口的簡單服務器(之前我們定義的server塊不聲明listen指令是因為使用了標準的80端口)并且會把所有請求映射到本地的 /data/upl 文件夾。創建這個文件夾并且放入一個index.html文件。注意,這里的root指令被放在了server上下文中。當有一個location被選擇了而它的內部卻沒有root指令時,它就會使用server中的這個root指令。
接下來,修改在前一節中的server配置使它變為一個代理服務器的配置。在第一個location塊中,添加proxy_pass指令,它的參數是被代理服務器的協議,名稱和端口。(本例中,參數是 http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

我們現在修改第二個location塊,使它由原先的匹配/images/前綴變為匹配典型的圖片文件擴展名。修改后的location如下:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

這個參數是一個匹配所有以.gif,.jpg或.png結尾的URI的正則表達式。~ 應該被寫在正則表達式前面。

當nginx選擇一個location時,它先檢查前綴,并且記錄匹配的location(最長前綴),然后nginx再檢查正則表達式,如果有一個正則表達式匹配,它就選擇這個location,否則,選擇之前記錄的location。
最終的代理服務器配置:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

現在,這個服務器可以將以.gif,.jpg或.png結尾的請求映射到本機目錄,將其它所有請求發送到被代理服務器。為了使配置生效,要發送reload信號。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 編譯自:installing-nginx-open-source 目錄 選擇 Stable 還是 Mainline...
    C86guli閱讀 3,867評論 0 21
  • 配置運行Nginx服務器用戶(組) 用于配置運行Nginx服務器用戶(組)的指令是user,其語法格式為: use...
    吃瓜的東閱讀 4,524評論 0 41
  • 01. 崔曼舒,是我在大學里認識的第一個朋友。她在大一的時候去華南理工大學找她的高中好友,在她陪那個高中好友去參加...
    另一個陳易閱讀 1,210評論 32 46
  • 曾憶微風起,吹散少年心。再相見已難,執筆書舊情。 【一】小時候最喜歡梔子花,又白又香。每到梔子花開的季節,總會很希...
    稚小子閱讀 389評論 2 3