一、執行下面的命令安裝Nginx
sudo apt-get nginx
二、初試 Nginx
啟動 Nginx
執行下面的命令啟動Nginx
sudo service nginx start
啟動之后,我們看一下 Nginx 是否處于運行狀態。
sudo service nginx status
看到下面的結果,就說明正在運行 ↓
查看版本信息
可以查看下本實驗環境下的 Nginx 版本和配置參數信息等。
nginx -V
要注意,是大寫的 V,不然你只能看到一行輸出信息。
但是輸出好像密密麻麻的,密集恐懼癥都要犯了。別擔心,使用重定向、管道和 sed 來處理一下輸出。
nginx -V 2>&1 | sed 's/ /\n/g'
2>&1 的作用是把標準錯誤的輸出重定向到標準輸出(其文件描述符為 1),管道 | 將上一步命令 nginx -V 2>&1 傳遞給 sed 進行處理。處理的方式為 s/ /\n/g,它是一個正則表達式,其含義為將空白替換為換行輸出。不是很明白?不必擔心,這個命令不是我們課程的主線內容,我們只關心輸出是否變得易讀。
執行命令后的輸出是下面這樣,是不是好看多了。
繼續往下拉,非常的整齊。
這里我們需要關心的是這一行:
它表示,Nginx 已經啟用了 模塊,這個模塊的使用將會在本實驗的最后進行介紹。
三、配置文件
Nginx 及其模塊的工作方式是在配置文件中確定的,默認的配置文件(nginx.conf)存放在目錄 /etc/nginx 下。
可以使用下面的命令來查看默認配置文件。
cat /etc/nginx/nginx.conf
內容看上去比較多,但好像很多以 # 開頭的行(其實是注釋),為了看起來更舒服,可以采用下面的方式不顯示注釋和空白行。
cat /etc/nginx/nginx.conf | grep -vE "#|^$"
grep 去除了帶 # 的行和 ^$ (即空白行)。同樣的,我們不用關心 grep 命令的用法,只需要關心輸出是否變得易讀。
最后,只剩下了下面的內容:
注意到倒數第二行和倒數第三行的 ,它表示將 /etc/nginx/conf.d/ 目錄下以 .conf 結尾的文件和目錄 /etc/nginx/site-/ 下的所有文件直接包含進來。你可以理解為將文件的內容直接復制到這里(即 /etc/nginx/nginx.conf 中)。
比如我在 /etc/nginx/conf.d/ 目錄中有一個 test.conf,它的內容是:
server {
#...
}
那么這些內容將替換 /etc/nginx/conf.d/*.conf。nginx.conf 的內容,相當于:
#...
http {
#...
gzip on;
gzip_disable "msie6"
server {
#...
}
include /etc/nginx/sites-enabled/*;
}
一般來說,Nginx 的配置文件的結構可以抽象成如下示意圖:
Main 就是我們的配置文件,配置文件中的 {...} 對應 ,http{...} 對應 Http。
在 nginx.conf 中是不是沒有發現定義的 {}?
原因是:為了方便維護我們 相關配置,不會讓某一個配置文件過于龐大。通常是將所有的虛擬主機配置文件(也就是 配置塊的內容)存放在 /etc/nginx/conf.d/ 或者 /etc/nginx/sites-/ 目錄中,在主配置文件中已經默認聲明了會讀取這兩個文件夾下所有 *.conf 文件。
在我們實際的使用中,主要也是配置 塊的內容,接下來,讓我們通過例子來學習它吧~
四、 和
配置塊
一個典型、完整的靜態 Web 服務器還會包含多個 配置塊,例如 /etc/nginx/sites-/。
我們查看它的方式可以參考之前查看 nginx.conf 的方式。
cd /etc/nginx/sites-enabled/
cat ./default | grep -vE "#|^$"
文件的內容如下:
文件中的配置含義在下面的注釋中(以 # 開頭)。
# 虛擬主機的配置
server {
# 偵聽 80 端口,分別配置了 IPv4 和 IPv6
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# 定義服務器的默認網站根目錄位置

root /usr/share/nginx/html;
# 定義主頁的文件名
index index.html index.htm;
# 定義虛擬服務器的名稱
server_name localhost;
# location 塊
location / {
try_files $uri $uri/ =404;
}
}
在配置文件中可以看到,如果我們想修改 的端口為 8080,那么就可以修改 80 為 8080。訪問網站的時候應該是 網站:8080,其中 :8080 表示訪問 8080 端口。如果是 80 端口配置web服務器實驗報告,可以省略不寫。
如果我們想更改網站文件存放的位置,修改 root 就可以了。
要注意:各個指令都是以分號結尾的!!!記住這一點可以讓你快速找出 “讓實驗樓網站恢復” 挑戰中的錯誤。
配置塊
其中 用于匹配請求的 URI。
URI 表示的是訪問路徑,除域名和協議以外的內容,比如說我訪問了 , 是協議, 是域名,//linux 是 URI。
匹配的方式有多種:
其語法如下:
location [ = | ~ | ~* | ^~ ] pattern {
# ......
# ......
}
其中各個符號的含義:
我們以這樣的實例來進一步理解:
location = / {
# [ 配置 A ]
}
location / {
# [ 配置 B ]
}
location /documents/ {

# [ 配置 C ]
}
location ^~ /images/ {
# [ 配置 D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# [ 配置 E ]
}
當一個 URI 能夠同時配被多 匹配的時候,則按順序被第一個 所匹配。
在 中處理請求的方式有很多,如上文中的 $uri $uri/ =404;,它是一種特別常用的寫法。
我們來分析一下 $uri $uri/ =404;。這里假設我定義的 root 為 /usr/share/nginx/html/,訪問的 URI 是 /hello/。
五、嘗試創建虛擬服務器
看了這么多,我們也來嘗試創建一個虛擬服務器。
準備一下網站文件
首先,我們確定一下網站文件存放在哪里,想來想去,最終決定放在 /var/myweb/。
先使用下面命令創建網站根目錄:
sudo mkdir /var/myweb/
然后我們需要創建一個 index.html
cd /var/myweb/
sudo touch index.html
使用 Vim 編輯器編輯文件。
sudo vim index.html
(若出現
sudo: vim:找不到命令
執行
sudo apt-get vim-gtk
安裝 VIM)
按 i 鍵進入插入模式。
鍵入下面的內容:
my website

Hello, Shiyanlou!
編輯完成后,先按 ECS 鍵(一般在鍵盤的左上角),然后在按 : 鍵(鍵盤上對應為 Shift + ;)進入到末行模式,再輸入 wq 即保存并退出。編輯工作完成。
下面給出了整個過程的演示:
開始配置
準備工作就完成了,接下來需要編輯 Nginx 配置文件,這里我們為了不影響原來的配置文件配置web服務器實驗報告,所以新創建一個。
cd /etc/nginx/sites-enabled/
sudo touch myweb.conf
使用 Vim 編輯器編輯配置文件。
sudo vim myweb.conf
這里,我們監聽本地 8070 端口,root 為 /var/myweb/,所以需要寫入的內容如下:
server {
listen 8070 default_server;
root /var/myweb/;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
可以參考下圖進行操作:
在重啟 Nginx 使配置文件生效之前,我們還應檢查一下是否有語法錯誤:
sudo nginx -t
當看到 OK 字樣后,再重新啟動 Nginx
sudo service nginx restart
最后,打開 Web 瀏覽器輸入 :8070 看一下結果吧,是不是有點小激動!
六、真正的工作者
Nginx 的架構是以高度模塊化為設計的基礎,除了非常少量的核心代碼,其他的一切皆是模塊,高度抽象的模塊接口,結構的設計簡單,使得 Nginx 十分的靈活與高效,默認情況下只會加載默認、必須的模塊,其他的一些功能實現需要加載一些第三方的模塊。
而配置文件中的各個指令配置項其實便是對模塊的一個功能配置。
這里我們以 Nginx 中的 模塊為例子,它主要用于查看 Nginx 的一些狀態信息。它能顯示一個狀態頁,對于想了解 Nginx 的狀態以及監控 Nginx 非常有幫助。
為了后續的 監控,我們需要學習一下如何對它進行配置。
啟用狀態頁
同樣的新建一個 conf 文件
cd /etc/nginx/sites-/
sudo touch .conf
使用 Vim 編輯器進行編輯。
sudo vim .conf
鍵入下面的內容:
{
8080 ;
;
/
{
on;
}
}
它表示監聽 8080 端口,對于 URI /,我們啟用模塊 進行響應。
重啟 Nginx
在重啟 Nginx 使配置文件生效之前,我們還應檢查一下是否有語法錯誤:
sudo nginx -t
當看到 OK 字樣后,再重新啟動 Nginx
sudo nginx
查看
打開瀏覽器查看 :8080/ 頁面。
狀態頁面中一共提供了七個指標:
除了瀏覽器查看,我們還可以通過 curl 工具讀取。
curl localhost:8080/nginx_status
Nginx 的學習就到此結束啦~
其實 Nginx 還是優秀的代理服務器,想深入學習 Nginx 的同學可以了解一下課程:Linux Web 運維(Nginx)實戰。