使用Nginx部署靜態(tài)頁面的方法

Nginx 介紹

創(chuàng)新互聯(lián)公司擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十多年,專業(yè)且經(jīng)驗(yàn)豐富。十多年網(wǎng)站優(yōu)化營銷經(jīng)驗(yàn),我們已為成百上千中小企業(yè)提供了做網(wǎng)站、成都網(wǎng)站制作解決方案,按需網(wǎng)站策劃,設(shè)計(jì)滿意,售后服務(wù)無憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!

Nginx 是俄羅斯人編寫的十分輕量級(jí)的 HTTP 服務(wù)器, Nginx,它的發(fā)音為 “ engine X ”,是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,同時(shí)也是一個(gè) IMAP/ POP3/ SMTP 代理服務(wù)器。Nginx 是由俄羅斯人 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點(diǎn)開發(fā)的,它已經(jīng)在該站點(diǎn)運(yùn)行超過兩年半了。Igor Sysoev 在建立的項(xiàng)目時(shí),使用基于 BSD 許可。

英文主頁:http://nginx.net。

Nginx 作為 HTTP 服務(wù)器,有以下幾項(xiàng)基本特性:

  1. 處理靜態(tài)文件,索引文件以及自動(dòng)索引;打開文件描述符緩沖。
  2. 無緩存的反向代理加速,簡單的負(fù)載均衡和容錯(cuò)。
  3. FastCGI,簡單的負(fù)載均衡和容錯(cuò)。
  4. 模塊化的結(jié)構(gòu)。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 Fast CGI 或其它代理服務(wù)器處理單頁中存在的多個(gè) SSI,則這項(xiàng)處理可以并行運(yùn)行,而不需要相互等待。
  5. 支持 SSL 和 TLSSNI。

即 Nginx 的優(yōu)點(diǎn):輕量、高性能、并發(fā)能力強(qiáng)。用來部署靜態(tài)頁面也是相當(dāng)便捷。

這種高性能得益于 Nginx 的框架。在 Nginx 啟動(dòng)后,會(huì)有一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程。master 進(jìn)程主要用來管理 worker 進(jìn)程,包含:接收來自外界的信號(hào),向各 worker 進(jìn)程發(fā)送信號(hào),監(jiān)控 worker 進(jìn)程的運(yùn)行狀態(tài),當(dāng) worker 進(jìn)程退出后(異常情況下),會(huì)自動(dòng)重新啟動(dòng)新的 worker 進(jìn)程。而基本的網(wǎng)絡(luò)事件,則是放在 worker 進(jìn)程中來處理的。多個(gè) worker 進(jìn)程之間是對(duì)等的,他們同等競爭來自客戶端的請求,各進(jìn)程互相之間是獨(dú)立的。一個(gè)請求,只可能在一個(gè) worker 進(jìn)程中處理,一個(gè) worker 進(jìn)程,不可能處理其它進(jìn)程的請求。worker 進(jìn)程的個(gè)數(shù)是可以設(shè)置的,一般我們會(huì)設(shè)置與機(jī)器 cpu 核數(shù)一致,這與 Nginx 的進(jìn)程模型以及事件處理模型有關(guān)。

為何選用 Nginx

說到 Nginx,可能第一反應(yīng)就是 反向代理 和 負(fù)載均衡 了。那么什么是 反向代理,什么又是 負(fù)載均衡 呢?

反向代理

首先了解一下什么是 前向代理 。代理 (Proxy) 也稱網(wǎng)絡(luò)代理,是一種特殊的網(wǎng)絡(luò)服務(wù),通俗來講,就是在客戶端和目標(biāo)服務(wù)器之間的充當(dāng)中間人,接收客戶端的請求,再根據(jù)客戶端請求向目標(biāo)服務(wù)器發(fā)起相應(yīng)的請求,從目標(biāo)服務(wù)器獲得指定資源后返回給客戶端。且代理服務(wù)器可以對(duì)目標(biāo)服務(wù)器的資源下載至本地緩存,如果客戶端所要獲取的資源在代理服務(wù)器的緩存之中,則代理服務(wù)器并不會(huì)再向目標(biāo)服務(wù)器發(fā)起請求,而是直接返回緩存的資源。

其實(shí)代理服務(wù)器非常常見,就比如因?yàn)?GWF 而存在的一些科學(xué)上網(wǎng)的代理商,就是利用國外服務(wù)器作為代理服務(wù)器,從而正確解析域名來實(shí)現(xiàn)科學(xué)上網(wǎng)。代理服務(wù)器也可以實(shí)現(xiàn)隱藏真實(shí) IP,比如著名的 Tor (洋蔥路由器)就是通過多重代理和一些加密技術(shù)來實(shí)現(xiàn)匿名交流。

而 反向代理 則是在服務(wù)器端作為代理使用,而不是客戶端。也就是說,前向代理 是代理內(nèi)部網(wǎng)絡(luò)用戶訪問 Internet 上服務(wù)器的連接請求,反向代理 是以代理服務(wù)器來接受 Internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 Internet 上請求連接的客戶端,此時(shí)的代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。

負(fù)載均衡

反向代理負(fù)載均衡技術(shù)是把將來自 Internet 上的連接請求以反向代理的方式動(dòng)態(tài)地轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的多臺(tái)服務(wù)器進(jìn)行處理,從而達(dá)到負(fù)載均衡的目的。

真巧, Nginx 都做到了

Nginx 作為一個(gè)優(yōu)秀的代理服務(wù)器,反向代理和負(fù)載均衡必然是都具備的。想要更詳細(xì)得了解這方面的知識(shí)和使用方法,可參見文末給出的參考資料: Nginx 入門指南。

Nginx 安裝

本人使用的是騰訊云的服務(wù)器,版本為: Ubuntu Server 14.04.1 LTS 32 位。

$ apt-get install nginx

Mac OS 系統(tǒng)參考這篇文章:Installing Nginx in Mac OS X

Nginx 配置

簡單地配置 Nginx 的配置文件,以便在啟動(dòng) Nginx 時(shí)去啟用這些配置。而本文的重點(diǎn)也是于此。

Nginx 的配置系統(tǒng)由一個(gè)主配置文件和其他一些輔助的配置文件構(gòu)成。這些配置文件均是純文本文件,一般地,我們只需要配置主配置文件就行了。例如在我的服務(wù)器上是在:/etc/nginx/nginx.conf

指令上下文

nginx.conf 中的配置信息,根據(jù)其邏輯上的意義,對(duì)它們進(jìn)行了分類,也就是分成了多個(gè)作用域,或者稱之為配置指令上下文。不同的作用域含有一個(gè)或者多個(gè)配置項(xiàng)。

其中每個(gè)配置項(xiàng)由配置指令和指令參數(shù)構(gòu)成,形成一個(gè)鍵值對(duì),# 后面地為注釋,理解起來也非常容易。

一般配置文件的結(jié)構(gòu)和通用配置如下:

user www-data;  # 運(yùn)行 nginx 的所屬組和所有者
worker_processes 1;  # 開啟一個(gè) nginx 工作進(jìn)程,一般 CPU 幾核就寫幾
pid /run/nginx.pid;  # pid 路徑

events {
    worker_connections 768;  # 一個(gè)進(jìn)程能同時(shí)處理 768 個(gè)請求
    # multi_accept on;
}

# 與提供 http 服務(wù)相關(guān)的配置參數(shù),一般默認(rèn)配置就可以,主要配置在于 http 上下文里的 server 上下文
http {
    ##
    # Basic Settings
    ##

    ... 此處省略通用默認(rèn)配置

    ##
    # Logging Settings
    ##
    ... 此處省略通用默認(rèn)配置

    ##
    # Gzip Settings
    ##

    ... 此處省略通用默認(rèn)配置

    ##
    # nginx-naxsi config
    ##

    ... 此處省略通用默認(rèn)配置

    ##
    # nginx-passenger config
    ##

    ... 此處省略通用默認(rèn)配置

    ##
    # Virtual Host Configs
    ##

    ... 此處省略通用默認(rèn)配置

    # 此時(shí),在此添加 server 上下文,開始配置一個(gè)域名,一個(gè) server 配置段一般對(duì)應(yīng)一個(gè)域名
    server {
        listen 80;        # 監(jiān)聽本機(jī)所有 ip 上的 80 端口
        server_name _;      # 域名:www.example.com 這里 "_" 代表獲取匹配所有
        root /home/filename/;  # 站點(diǎn)根目錄

        location / {       # 可有多個(gè) location 用于配置路由地址
            try_files index.html =404;
        }
}

# 郵箱的配置,因?yàn)橛貌坏?,所以把這個(gè) mail 上下文給注釋掉
#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#    
#    # auth_http localhost/auth.php;
#    # pop3_capabilities "TOP" "USER";
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";
#   
#    server {
#        listen   localhost:110;
#        protocol  pop3;
#        proxy    on;
#    }
#
#    server {
#        listen   localhost:143;
#        protocol  imap;
#        proxy    on;
#    }
#}

這里需要注意的是 http 上下文里的 server 上下文。

server {
    listen 80;        # 監(jiān)聽本機(jī)所有 ip 上的 80 端口
    server_name _;      # 域名:www.example.com 這里 "_" 代表獲取匹配所有
    root /home/filename/;  # 站點(diǎn)根目錄

    location / {       # 可有多個(gè) location 用于配置路由地址
      try_files index.html =404;
    }
}

這里的 root 字段最好寫在 location 字段的外邊,防止出現(xiàn)無法加載 css、js 的情況。因?yàn)?css、js 的加載并不是自動(dòng)的,nginx 無法執(zhí)行,需要額外的配置來返回資源,所以,對(duì)于靜態(tài)頁面的部署,這樣做是最為方便的。

這里對(duì) root 作進(jìn)一步解釋,例如在服務(wù)器上有 /home/zhihu/ 目錄,其下有 index.html 文件和 css/ 以及 img/ , root /home/zhihu/; 就將指定服務(wù)器加載資源時(shí)是在 /home/zhihu/ 下查找。

其次, location 后的匹配分多種,其各類匹配方式優(yōu)先級(jí)也各不相同。這里列舉一精確匹配例子:

server {
    listen 80;        
    server_name _;      
    root /home/zhihu/;  

    location = /zhihu {
      rewrite ^/.* / break;
      try_files index.html =404;
    }
}

此時(shí),訪問 www.example.com/zhihu 就會(huì)加載 zhihu.html 出來了。由于 location 的精確匹配,只有訪問 www.example.com/zhihu 這個(gè)路由時(shí)才會(huì)正確響應(yīng),而且此時(shí)要通過 rewrite 正則匹配,把 /zhihu 解析替換成原來的 / 。關(guān)于更多 location 字段用法,可以在文章最后給出的參考資料中查看。

關(guān)于使用 nginx 部署靜態(tài)頁面,最簡單便捷的配置方法

上面說了挺多關(guān)于配置的說明,下面推薦一種個(gè)人認(rèn)為最為便捷的配置方法。(特此感謝 guyskk 學(xué)長的答疑解惑)

首先創(chuàng)建一個(gè)目錄,例如: /home/ubuntu/website 然后在這個(gè) website 文件夾下可以放置你需要部署的靜態(tài)頁面文件,例如 website 下我有 google、zhihu、fenghuang 這三個(gè)文件夾,其中 server 字段配置如下:

server {
    listen 80;
    server_name _;
    root /home/ubuntu/website;
    index index.html;
}

這里每個(gè)文件夾下面的靜態(tài)頁面文件名都是 index.html ,我以前有個(gè)很不好的習(xí)慣,比如 zhihu 頁面就喜歡命名為 zhihu.html ,但就從前端來看,這也是不符合規(guī)范的。

這樣配置的話,例如當(dāng)你訪問 www.showzeng.cn/google/ 時(shí),nginx 就會(huì)去 website 目錄下的 google 文件夾下尋找到 index.html 并把 google 頁面返回,同理,訪問 www.showzeng.cn/zhihu/ 時(shí),會(huì)尋找到 zhihu 文件夾下的 index.html 并把 zhihu 頁面返回。

而在 zhihu、google 、fenghuang 文件夾的同級(jí)目錄上,再添加你的域名首頁 index.html 時(shí),訪問 www.example.com 時(shí)就會(huì)返回了。

這里唯一美中不足的是,訪問域名中 www.showzeng.cn/zhihu 末尾會(huì)自動(dòng)加上 / ,在瀏覽器中按 F12 調(diào)試會(huì)發(fā)現(xiàn) www.showzeng.cn/zhihu 為 301 狀態(tài)碼,因?yàn)?index.html 是在 zhihu/ 文件夾下,所以在搜索過程中會(huì)重定向到 www.showzeng.cn/zhihu/ ,起初我是接受不了的,那一 / 看起來太難受了,但是只要一想到要一個(gè)一個(gè) location 字段去匹配,我一下子就接受了。不知道你怎么看,反正我是接受了。

Nginx 啟動(dòng)運(yùn)行

$ sudo nginx -s reload

使用 reload 方法不用重啟服務(wù),直接重新加載配置文件,客戶端感覺不到服務(wù)異常,實(shí)現(xiàn)平滑切換。當(dāng)然你也可以重新啟動(dòng) nginx 服務(wù)。

$ sudo service nginx restart

Nginx 停止運(yùn)行

$ sudo nginx -s stop

參考資料

Nginx 入門指南

Nginx for Developers: An Introduction (譯文)

nginx 配置 location 總結(jié)及 rewrite 規(guī)則寫法

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)站題目:使用Nginx部署靜態(tài)頁面的方法
網(wǎng)頁URL:http://bm7419.com/article0/geghoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版網(wǎng)頁設(shè)計(jì)公司、、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)