使用nginx製作一個靜態web服務器
1. 理解配置文件語法
conf目錄中存放了nginx相關的配置文件
nginx主配置文件爲nginx.conf
可以使用sed命令
去掉配置文件中的註釋,這樣可以更方便的查看與操作:
sed -i '/^[[:space:]]*#/'d nginx.conf
其中的語法爲:
http {
...
...
server {
...
...
location ... {
...
...
}
}
server {
...
...
}
}
從上述語法配置示例可以看出:上述示例可以分爲幾個邏輯部分,http部分、server部分、location部分。
或者說,上述示例可以分爲幾個邏輯塊:http塊、server塊、location塊,每個"配塊"都是使用大括號{ }
作爲分界線的。
而且從縮進可以看出,它們是有層級關係的。http中可以配量多個server,一個server中可以配多個location。
我們知道,nginx最基礎的功能就是用來提供http服務,所以跟http有關的公共配置,可以放在http塊中,http塊中又可以配置多個server
- 那麼server代表了什麼呢?我們在一臺主機中安裝了nginx,那麼能不能讓這臺nginx主機同時提供多個web服務呢?答案是肯定的。每一個server就代表一個http服務,我們可以同時配多個server,以便同時提供多個http服務,不同的server可以使用不同的配置,寫入到某個server塊中的配只對對應的http服務生效,如果多個server存在共同的公用配置,則可以將共同的配寫在http塊中,以便多個server共享這些配置,一個server塊中又可以有一個或多個location。
- location又是什麼意思呢?當我們訪問一個網絡上的資源時,都是通過url訪問的。你可以把location當做url的一部分。那麼當我們訪問"http://172.25.1.1/"這個urI時,這個url的最後一個
"/"
其實就是location
- location塊中有兩條配通指令,它們分別是root和index
root配置指令的意思是:當前location所對應的文檔根目錄是哪裏,root html;
表示當前location的文檔根目錄是htmI目錄。 - 那麼"文檔根目錄"又是什麼意思呢?說白了,文檔根目錄的意思就是當有人訪問"/"這個路徑時,去服務器的哪個目錄中找對應的資源
舉個例子:
如果我在htmI目錄中放了一張圖片,圖片名爲a.jpg,那麼我就能通過"http://172.25.254.1/a.jpg"訪問到這張圖片
url中的"/"對應了"location /“配置段,而"location/“又對應到了服務器的htmI目錄,所以url中的”/“就與服務器的html目錄建立了對應關係
當我們訪問"http://172.25.0.1/a.jpg"這個地址時,其實訪問的是服務器上htmI目錄中的a.jpg
再換句話說,htmI目錄就是當前location的資源目錄。
注意:上例中的htmI路徑是一個相對路徑,表示nginx安裝目錄中的html目錄,因爲我將nginx安裝到了/usr/local/nginx目錄中
所以上例中的html目錄的絕對路徑就是”/usr/local/nginx/html/”
2. 製作靜態web服務器
注意:這個實驗需要虛擬機server1和server2,其中server1作爲nginx服務器,server2安裝apache服務
step1 修改配置文件
在server1中:
cd /usr/local/nginx
cd conf/
vim nginx.conf
http {
include mime.types;
default_type application/octet-stream;
upstream kane {
server 172.25.1.2:80;
}
server{
listen 80;
server_name www.kane.org;
location / {
proxy_pass http://kane;
}
}
nginx -t #語法檢測
nginx -s reload #在不暫停服務的情況下重新加載
step2 寫默認發佈頁面
在server2中:
yum install httpd -y
vim /var/www/html/index.html
systemctl restart httpd
step3 添加解析
在客戶端(真機)中:
vim /etc/hosts
172.25.254.1 www.kane.org
step4 測試
curl www.kane.org