1. 程式人生 > >Nginx靜態伺服器配置與homestead

Nginx靜態伺服器配置與homestead

nginx靜態伺服器配置
目的:採用nginx做為靜態頁面伺服器.

1.nginx安裝

在 Ubuntu 下,可以捨去編譯安裝的過程,直接 apt-get

sudo apt-get install nginx
sudo service nginx start

2.nginx初始配置

nginx 的預設配置檔案位於

/etc/nginx/nginx.conf

在配置檔案中有一行:

include /etc/nginx/sites-enabled/*;

這行負責載入外部配置檔案,檢視sites-enabled目錄,該目錄下只有一個default檔案,這個外部的配置檔案就是負責我們 nginx 的預設代理。這個配置檔案的主要內容如下:

server {
    server_name localhost;
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
    try_files $uri $uri/ =404;
    }
}

引數說明:

server_name:一個大型的網站通常會有很多下屬的站點,有各自的伺服器提供相應的服務,在 nginx 中我們可以通過一個叫虛擬主機的概念來將這些不同的服務配置隔離,這就是上面配置中的 server 的含義。舉例來說 google 旗下有翻譯和學術兩款產品我們就可以在 nginx 的配置檔案中配置兩個 server,servername 分別為 translate.google.com 和 scholar.google.com,這樣的話不同的 url 請求就會對應到 nginx 相應的設定,轉發到不同的後端伺服器上。這裡的 servername 是和客戶端 http 請求中的 host 行進行匹配的。本例中 server_name 為 localhost,這就是為什麼我們可以在瀏覽器通過 localhost 訪問到頁面的配置。

listen:分別對應了 ipv4 和 ipv6 下的監聽埠如果設為 8080,那麼我們就只能通過 localhost:8080 來訪問到預設頁面了。其中引數default_server的含義是指如果有其他 http 請求的 host 在 nginx 中不存在設定的話那麼就用這個 server 的配置來處理。比如我們去訪問 127.0.0.1 那麼也會落到這個 server 來處理。

location:每個 url 請求都會對應的一個服務,nginx 進行處理轉發或者是本地的一個檔案路徑,或者是其他伺服器的一個服務路徑。而這個路徑的匹配是通過 location 來進行的。我們可以將 server 當做對應一個域名進行的配置,而 location 是在一個域名下對更精細的路徑進行配置。在這裡 location 匹配 / 開始的所有請求,即 localhost 下的 /xxx 或者 /yyy 都要走下面的配置,除了這種簡單粗暴的匹配,nginx 也支援正則和完全相等及其他的精細匹配方式。而 tryfiles 意思是 nginx 會按照接下來的順序去訪問檔案,將第一個匹配的返回。比如你去請求 localhost/test,他會去尋找 /test 檔案,找不到再去找 /test/ 再找不到就返回一個 404。此外我們還可以在 location 的配置裡用 proxypass 實現反向代理和負載均衡,不過這個最簡單的配置並沒有涉及。

root:是指將本地的一個資料夾作為所有 url 請求的根路徑。比如使用者請求了一個 localhost/test,那麼 nginx 就會去需找 /usr/share/nginx/html 資料夾下的 test 檔案返回。

index:就是預設的訪問頁面了,當我們訪問 localhost 時,他會自動按順序尋找 root 檔案路徑下的 index.html 和 index.htm 將第一個找到的結果返回。

此處需要對default檔案進行修改,修改root引數配置指向本地靜態資料夾,修改如下
這裡寫圖片描述

3.配置生效

執行如下語句,可以不用重啟服務讓配置生效:

下面的很重要,之前就是這個搞了兩個小時!!!!!!

sudo service nginx reload

今天看一個專案需要配置Nginx的nginx.conf,但是隻要新增配置之後就報錯,不知道是不是使用homestead的原因,最後還是按照配置檔案中的include配置在sites-enabled檔案裡就好了!

參考:連結