Nginx 詳細配置

原文出處:https://blog.csdn.net/david_xtd/article/details/16967837
譯者注:不知道其他開發(fā)者是否和我一樣菱阵,參與或者寫了很多Web項目疑苔,但是卻沒有真正的去完整的部署應用立哑,很多時候都是交給ops即運維的同學幫忙來做。而作為一個有節(jié)操的開發(fā)者来候,我認為了解一些服務器方面的知識是很有必要的,讀了這篇文章之后,自己對nginx也有了一個初步的認識蛔溃,對自己很有幫助,不敢獨享篱蝇,遂譯之贺待。

如果你是一名Web開發(fā)人員,那么你很有可能聽過nginx(讀音聽起來像engine-x). Nginx是一款速度快零截,功能強大的http以及反向代理服務器麸塞,經(jīng)過簡單的配置之后即可以用來托管頁面。

不幸的是涧衙,和很多其他系統(tǒng)管理工具一樣哪工,相關(guān)的原理教程和配置說明文檔都很少。雖然官方提供了一個wiki,但是內(nèi)容多且復雜弧哎,卻沒有真正的介紹那些你可能真正需要的東西雁比。在自己糾結(jié)這個wiki一段時間之后,我終于掌握了使用nginx的一些基礎(chǔ)知識撤嫩,并把它們在這里與其他開發(fā)者分享出來章贞,希望你們能夠更加快速的去掌握這些知識。

下面進入正題。針對本教程鸭限,你需要一個VPS(虛擬主機)蜕径,最好是剛剛建立的,這樣可以避免與先前的配置產(chǎn)生沖突败京。

初始化安裝

現(xiàn)在假設(shè)你已經(jīng)擁有一個運行ubuntu的虛擬主機(比如說托管于 digital ocean),配置好登錄選項并更新好 apt 之后兜喻,運行 apt-get install nginx 安裝nginx.在瀏覽器訪問你的IP地址,你會看到頁面顯示“welcome to ngnix”信息赡麦。OK,一切正常朴皆。

查找nginx目錄

在我們通過 apt 安裝完nginx后,它為我們提供了一個基本的結(jié)構(gòu)泛粹,幫助我們迅速設(shè)置好配置文件遂铡。所有的nginx配置文件都在 /etc/nginx下(譯者注:Mac OS X環(huán)境下使用homebrew路徑與linux有區(qū)別,文章結(jié)尾部分提供mac下解決方案)晶姊,輸入 cd 進入該目錄扒接。你需要添加新配置選項的地方位于 sites-enabled 文件夾。如果你打開這個文件夾们衙,你會發(fā)現(xiàn)一個名為 default 的txt文檔钾怔,打開后你就會找到nginx的配置選項以及 “welcome to nginx"歡迎選項的代碼。接下來我們開始建立屬于我們自己的配置文件用于顯示一個頁面蒙挑。在sites-enabled目錄下新建一個空白文件并命名為 test,用你自己喜歡的文本編輯器進行編輯宗侦。

注意: 在該目錄下會發(fā)現(xiàn)一個 /etc/nginx/sites-available 的文件夾。這個文件夾一般在你需要建立和管理多個站點的時候非常有用忆蚀,可以幫助你更好的組織不同的項目矾利。你需要在這里添加你的nginx配置文案并將他們鏈接至 sites-enabled 目錄下。命令如下:

ln -s /etc/nginx/sites-available/dotcom /etc/nginx/sites-enabled/dotcom

只有在 sites-enabled 目錄下的配置文件才能夠真正被用戶訪問馋袜。但是你同樣可以將文件放在 sites-available 目錄下用來存檔或者生成鏈接男旗。

配置靜態(tài)服務器

Nginx配置文件有自己的格式,好消息是文件的格式相當簡單桃焕,看起來特別像CSS文件剑肯,先指定變量名,然后在花括號內(nèi)編寫指令观堂。最頂層是 server ,代碼為:

server {

}

在花括號內(nèi)让网,我們?nèi)匀豢梢韵駮鴮慍SS一樣,鍵值對后接分號师痕,或者說更像sass的語法溃睹,并添加嵌套代碼塊。后面兩種風格的代碼我們都會用到胰坟,也很容易理解因篇。

這里可以添加的鍵值對和代碼塊(在本教程的后面我們把它稱為指令)有很多種,你可以轉(zhuǎn)到官方文檔去具體查看。對于基本的服務器設(shè)置其實只用掌握一些重要的指令即可竞滓。我會給后面的每個指令鏈接官方的ngnix文檔咐吼。官方文檔是你深入理解nginx的唯一渠道,因此你必須掌握如何更好的去使用它商佑。

listen

聲明服務器監(jiān)聽的端口號锯茄。如果你了解rails,你一定知道本地服務器的默認端口是3000. Roots運行在1111端口。SSL在443端口茶没〖∮模互聯(lián)網(wǎng)的默認端口是80,因此在url中未定義端口的話一般默認為80抓半。因為你很有可能是去運行一個線上的服務器喂急,因此最好定義成80端口。代碼如下:

server {
    listen 80;    
}

注意默認端口嚴格來講不是必要的笛求,但是為了能夠保證你對整個流程足夠了解最好加上廊移。完成了第一步,我們進入下一步server_name.

server_name

server_name主要用來匹配url地址涣易。任意請求通過nginx時画机,它會查看url并尋找 server_name 片段冶伞。如果你的站點地址為 http://xvfeng.me, 那么你的 server_name 應當也為 xvfeng.me . 如果你在域名解析時使用了A記錄并通過服務器指向 http://snargles.com , 你可以添加另外一個 server 代碼新症,將 server_name 指向 snargles.com, 這段代碼就會匹配來自于這個域名的請求。

這個特性非常強大响禽。這意味著你可以在單個nginx配置文件里托管無數(shù)個站點徒爹,甚至包括不同域名的網(wǎng)站。你需要做的只是將設(shè)置A記錄并指向虛擬機所在的IP, 之后設(shè)置其他的nginx服務器配置芋类。

針對 server_name 還有兩點值得關(guān)注隆嗅。首先是你可以設(shè)置子域名。如果你想匹配http://test.example.com ,設(shè)置相當簡單侯繁,甚至還可以指向一個完全不同的應用胖喳。第二點,你可以使用通配符, 即 * 或者正則來匹配路由贮竟。這個功能絕對強大丽焊。下面我們簡單的配置一下server_name到example.com .

server {
    listen 80;
    server_name example.com;
}

Nice.接下來再加一些配置就可以讓服務器運轉(zhuǎn)了。

root

這個是托管靜態(tài)站點最關(guān)鍵的部分咕别。如果你只是想用它來托管一些html和css文件技健,root部分要定義的就是這些文件存放的路徑。我喜歡把文件放在 /var/www 目錄下惰拱,因此我們在這里建立一個文件夾雌贱。使用 mkdir 創(chuàng)建 /var/www/example 目錄,建立一個空白的 index.html 文件,隨便添加一些段落輸出hello world之類的內(nèi)容。代碼如下:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
}

基本變量設(shè)置完畢欣孤,下一步配置路由馋没。

location

Location接受兩個參數(shù),一個字符串或者正則和一段代碼降传。字符串或者正則用于匹配某個特定目錄披泪。如果你想讓用戶在訪問 example.com/whaterver 時訪問某個特定頁面,你需要將 whatever 設(shè)置為uri地址搬瑰。在這里我們只需要訪問root目錄款票,因此只需要加上 / 即可,內(nèi)容暫時為空泽论,后面再做解釋艾少。

server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    location / {

    }
}

第一參數(shù)可以有很多種寫法,你可以參考上面給出的鏈接翼悴。在以上區(qū)塊內(nèi)缚够,我們需要路由指向結(jié)果頁面。注意 / 會匹配所有的url地址鹦赎,因為在這里它被解釋為一個正則谍椅。如果你只想匹配某個準確的字符串,只需要在前面加上一個等號古话,寫法如下:

location = / { ... }

現(xiàn)在我們需要完成之前的代碼雏吭。我們可以在區(qū)塊內(nèi)添加另外一段指令,用于加載名為 try_files 的文件陪踩。Try fiels接受了一組文件名或者正則杖们,用于在根目錄下查找,并會加載查找到的第一個結(jié)果肩狂。對于我們的靜態(tài)服務器來講摘完,我們希望找到一個在 / 之后緊跟著whatever的文件,例如 whatever.html. 如果在斜線后面沒有任何內(nèi)容傻谁,則會尋找 index.html. 在上面給出的文檔鏈接中你可以找到更多的關(guān)于如何設(shè)置該選項的吸納關(guān)系介紹孝治,這里我們只寫一些簡單的配置:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    location / {
        try_files $uri $uri/ /index.html;    
    }
}

你可能會奇怪上面的 $url 是從哪里來的?其實是nginx所提供的审磁。每次有請求時谈飒,nginx會生成一系列變量,這些變量存儲了請求的相關(guān)信息力图。這里的uri就是我們將要了解的內(nèi)容之一步绸。

  • 來自 http://example.com 的請求進入。
  • nginx找到server片段代碼吃媒,其中 server_nameexample.com 瓤介,并使用它來處理請求
  • nginx匹配任意請求吕喘。因為這里的 / 會匹配根域名下的任意內(nèi)容。
  • 在匹配到的location代碼中刑桑,nginx開始試圖加載一個文件氯质。首先尋找一個未命名的文件,因為這里的uri匹配的就是沒有名稱的文件祠斧,所以無法找到闻察。接著開始查找未命名的目錄,結(jié)果還是找不到琢锋。最后開始查找并加載根目錄下 /index.html 辕漂。

接下來想象一下如果你添加一個名為 test.html 的文件到根目錄下并訪問 http://example.com/test.html.自己試一下你就知道了。

你可以任意的去嘗試改變這里的配置環(huán)境吴超。例如钉嘹,在carrot.is這個網(wǎng)站里,但用戶訪問某個文件并且沒有加上 .html 后綴時鲸阻,try_files同樣會查找 $uri.html 并匹配相應結(jié)果跋涣。因此在你訪問http://carrot.is.abouthttp://carrot.is/about.html 時你會得到相同的文件。你可以充分發(fā)揮你的想象力去設(shè)置你的配置文件鸟悴。

啟動服務

總結(jié)一下我們所做的事情陈辱。首先添加了 server 選項,在nginx運行時细诸,會查找 /etc/sites-enabled 目錄下的所有配置文件用于顯示對應內(nèi)容沛贪。但是請等一下,你可能無法馬上得到結(jié)果-因為nginx并不知道你所作的這些改動揍堰。為了讓nginx真正讀取新配置文件鹏浅,你需要重啟服務器嗅义,運行以下命令:

service nginx reload

注意:這里的 service 命令實際上是調(diào)用了配置文件里內(nèi)容屏歹,這些都在使用 apt 時被生成。這里調(diào)用的實際上是 /etc/init.d/nginx reload .

接下來就是訪問服務器IP地址便可得到你想要的頁面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末之碗,一起剝皮案震驚了整個濱河市蝙眶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褪那,老刑警劉巖幽纷,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異博敬,居然都是意外死亡友浸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門偏窝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來收恢,“玉大人武学,你說我怎么就攤上這事÷滓猓” “怎么了火窒?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驮肉。 經(jīng)常有香客問我熏矿,道長,這世上最難降的妖魔是什么离钝? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任票编,我火速辦了婚禮,結(jié)果婚禮上卵渴,老公的妹妹穿的比我還像新娘栏妖。我一直安慰自己,他們只是感情好奖恰,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布吊趾。 她就那樣靜靜地躺著,像睡著了一般瑟啃。 火紅的嫁衣襯著肌膚如雪论泛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天蛹屿,我揣著相機與錄音屁奏,去河邊找鬼。 笑死错负,一個胖子當著我的面吹牛坟瓢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播犹撒,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼折联,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了识颊?” 一聲冷哼從身側(cè)響起诚镰,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祥款,沒想到半個月后清笨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡刃跛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年抠艾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桨昙。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡检号,死狀恐怖首懈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谨敛,我是刑警寧澤究履,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站脸狸,受9級特大地震影響最仑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炊甲,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一泥彤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卿啡,春花似錦吟吝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至官辽,卻和暖如春蛹磺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背同仆。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工萤捆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俗批。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓俗或,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岁忘。 傳聞我的和親對象是個殘疾皇子辛慰,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)臭觉,斷路器昆雀,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 配置運行Nginx服務器用戶(組) 用于配置運行Nginx服務器用戶(組)的指令是user,其語法格式為: use...
    吃瓜的東閱讀 4,486評論 0 41
  • 本文所介紹的環(huán)境是:操作系統(tǒng):CenOS-7-x86_64環(huán)境:虛擬機Nginx 版本:1.6.3 一蝠筑、Nginx...
    FlySheep_ly閱讀 8,910評論 1 40
  • ??本周學習了一些有關(guān)bash shell腳本的知識,單純的去講理論不易于腳本知識的理解揩懒,這里為大家展示幾個腳本實...
    KingFighting閱讀 1,973評論 0 1
  • vb
    Piscine閱讀 269評論 0 0