<em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

<progress id="1rarx"><tr id="1rarx"></tr></progress>
<sup id="1rarx"><menu id="1rarx"></menu></sup>
<menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

    <sup id="1rarx"><menu id="1rarx"></menu></sup>
    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
      <em id="1rarx"></em>

          首頁 > nginx > nginx配置入門

          nginx配置入門

          2012年12月24日 發表評論 閱讀評論

          之前的nginx配置是對nginx配置文件的具體含義進行講解,不過對于nginx的新手可能一頭霧水。

          今天看到個文檔不錯,翻譯過來分享給大家,可以讓新手更詳細地了解nginx配置,可以說是nginx配置入門必備。

          Nginx是一個輕量級高性能的web服務器,它是為快速響應大量靜態文件請求和高效利用系統資源而設計的。與apache使用面向進程或線程的方式處理請求不同,nginx使用異步事件驅動模型在負載下性能更突出。

          雖然nginx能高效地服務靜態文件,但也有人認為nginx處理動態內容并不理想。不像apache服務器,nginx沒用使用內嵌解釋器的方式來處理動態內容。相反,動態內容被丟給cgi,fastcgi或者像apache這樣的web服務器,然后把處理結果返回給nginx,nginx在返給瀏覽器。這種方式就導致部署起來會更復雜一些。出于這些原因,使用和配置nginx可能會晦澀。nginx的配置感覺更復雜或者不直接。

          本文的前提是你使用nginx安裝來安裝nginx,如果你使用其它方法或者系統自帶包安裝,那么你的配置文件的位置和下面講的配置文件位置可能不同。

          nginx的強大都是靠配置文件來實現,nginx就是一個二進制文件nginx讀入一個配置文件nginx.conf(nginx.conf可能include包含若干子配置文件)來實現各種各樣的功能。

          ?管理配置文件

          nginx使用嵌套的花括號語法來定義選項。安裝完成后nginx的主配置文件被放在/usr/local/nginx/nginx.conf。同時一個默認的備份配置文件存在/usr/local/nginx/nginx.conf.default。其它子配置文件同樣有一個.default結尾的備份配置文件。.default的作用是當你修改配置文件錯誤的時候,你可以快速回到上一個好用的狀態。建議大家經常對配置好的功能的配置文件做備份,可以以日期文件做結尾。比如你可以使用如下指令完成,修改日期為你所備份的日期。

          每次修改完nginx.conf都要重新加載配置文件

          全局配置

          我們分片段一點點的介紹默認的配置文件

          這些是配置文件開始的默認行。通常的環境下,你不需要修改這些選項。這一部分有幾個方面需要我們注意:

          • 所有以#號開的行是注釋,nginx不會解析。默認的配置文件有許多說明解釋的注釋塊
          • 指令是以一個變量名開頭(例如,worker_processes或pid),然后包含一個參數(例如,1或 logs/nginx.pid)或者多個參數(例如,"logs/error.log notice")
          • 所有指令以分號結尾
          • 某些指令,像上面的events可以包含多個子指令作為參數。這些子指令以花括號包圍。
          • 雖然nginx不解析空白符(例如tab,空格,和換行符),但是良好的縮進能提高你維護長期運行配置文件的效率。良好的縮進使配置文件讀起來更流暢,能讓你很容易明白配置的策略,即使幾個月前。

          下面我們繼續讀配置文件

          "http { }"塊的開頭像配置文件的開頭一樣都是標準配置不需要修改。這里我們需要把注意力放在這些元素上:

          • 這部分內容的開始"include"語句包含/usr/loca/nginx/mime.types文件到nginx.conf文件include語句所在位置。include對ningx.conf文件的可讀性和組織性很有用。
          • 不能過多使用include,如果太多遞歸地include文件會產生混亂,所以需要合理有限制地使用include來保證配置文件的清晰和可管理。
          • 你可以去掉log_format指令前的注釋并修改這幾行設置的變量為你想記錄的信息。
          • gzip指令告訴nginx使用gzip壓縮的方式來降低帶寬使用和加快傳輸速度。如果想使用gzip壓縮,需要添加如下配置到配置文件的gzip位置。

          使用gizp壓縮并不是沒有代價的。在降低帶寬的同時也增加了CPU的使用。gzip_cop_level的參數取值范圍1-9,9代表最用CPU和1代表最少用CPU,其默認值是1.

           

          另外,請注意上面的片段 "http { " 是http的前半部分,其余部分解下面繼續,直到匹配的"}"。

          虛擬機server配置

          我們家是nginx.conf接下來的配置文件是這樣

          我們可以看到http{ }塊到此結束。

          server指令塊,像上面例子中那個一樣,是我們nginx用戶主要配置自己虛擬主機的地方。在server塊里有許多重要的指令。listen指令告訴nginx在一個特定的hostname,ip或者tcp端口監聽連接。默認,http服務運行在80端口。一下這些listen指令都是有效的:

          在這些例子中,我們可以看到很多不同表達方式:

          • 第一組2個指令指明服務器監聽在127.0.0.1或localhost的80端口,localhost通常定義在/etc/hosts指向127.0.0.1
          • 第二組除了端口號監聽在8080而不是80外,與第一組相同。
          • 第三組例子定義服務器監聽在192.168.3.105的80和8080端口
          • 第四組例子是在所有地址上監聽特定的端口。listen 80與listen *:80相同,listen 8080與listen *:80相同。
          • 最后一組例子設置服務器只監聽在12.34.56.77/78/79的80端口上的請求。

          server_name指令可以設置基于域名的虛擬主機,根據請求頭部的內容,一個ip的服務器可以配置多個域名。下面這些server_name的參數是有效的:

          多個域名之間以空格分隔。nginx允許一個虛擬主機有一個或多個名字,也可以使用通配符"*"來設置虛擬主機的名字。上面的例子我們看到了很多特殊的地方:

          • 第一組例子,首先定義server_name為nginx.cn,那么來自http://nginx.cn的請求就會發到該主機上。第二個例子配置了nginx.cn和www.4693749.com,那么http://nginx.cn和http://www.4693749.com的請求會發到這個主機上。
          • *.nginx.cn和.nginx.cn是等同的配置,設置該主機處理所有來自nginx.cn的子域名,比如www.4693749.com,blog.nginx.cn等
          • 第二組server_name配置nginx.*,配置服務器處理所有以nginx.開頭的請求。例如,nginx.com,nginx.cn,nginx.net,nginx.baidu.com
          • 接下來一組第一個server_name配置,設置主機處理來自三個域名的請求。nginx允許設置不是有效域名的名字。比如接下來這個配置我們可以看到三個不是有效域名的例子,localhost,litchfiled和bledington。nginx只查找請求的HTTP頭中的域名但并不判斷域名是否有效,這個例子中這些主機名可以配制在/etc/hosts中。當你在本機調試時使用非域名的主機名有時候更適合些。
          • 最后一組例子,server_name設置為空的雙引號,它告訴nginx捕捉所有沒有hostname的請求,或者hostname沒有在其它server_name中指定的。

           

          我們繼續分析接下來的server指令塊,看看access_log指令。

          第一個例子,日志使用相對路徑,log文件放在與配置文件同級的目錄中,也就是日志存儲在/usr/local/nginx/logs/nginx.access.log;接下來的兩個例子定義了完整的絕對路徑;最后一個例子是關閉access log,不會記錄訪問日志到文件。

          server塊的最后部分是location指令塊,對于client的不同請求目標,location是用來配置服務器的不同響應。

          就像server_name指令配置nginx處理請求使用包含在請求中的信息一樣,location指令配置如何響應不同位置資源的請求。例如:

          前五個例子是按字面逐字匹配,匹配請求url域名后面開始的部分。假設一個請求http://www.4693749.com,我們假設server_name已經匹配www.4693749.com,那么"location /"指令將捕獲這個請求。nginx使用匹配度最高的location。比如http://ducklington.org/planet/blog/和http://ducklington.org/planet/blog/about/會匹配"location /planet/blog",而不是"location /planet/"

          ?location配置

          對于特定的請求,一旦nginx匹配一個location來處理。那么這個請求的響應內容就會由這個location塊中的指令決定。我們先來看一個最基本的locaiton配置塊。

          在這個例子中文檔根(doucument root)位于html/目錄。根據nginx的安裝目錄/usr/local/nginx,這個location的完整路徑是/usr/local/nginx/html。假設一個請求訪問位于/blog/includes/styles.css文件同時沒有別的location塊匹配,那么nginx會用位于文件系統的/usr/local/nginx/html/blog/includes/styles.css響應。當然你也可以用絕對路徑設置root指令。

          index指令會告訴nginx使用哪個資源如果請求中沒有文件名。因此,如果請求http://.ducklington.org/將會補全資源位置為/usr/local/nginx/html/index.html。如果index配置了多個文件,nginx會按順序處理直到找到第一個存在的補全資源。如果index.html在相關目錄中沒有,那么將使用index.htm。如果兩個都不存在,會返回404錯誤。

          讓我們看另外一個location指令的例子,這些location指令都在ducklington.org的server指令塊里。

          在這個例子中,所有以.php結尾的請求都被第二個location塊處理。第二個語句塊對所有請求指定了一個fastcgi句柄。其它的請求,nginx會使用第一個location塊來處理。

          請求http://ducklington.org/將會返回/srv/www/ducklington.org/public_html/index.html如果存在的話,如果不存在這返回/srv/www/ducklington.org/public_html/index.htm,如果兩個都不存在則返回404錯誤。

          請求?http://ducklington.org/blog/將會返回/srv/www/ducklington.org/public_html/blog/index.html如果存在的話,如果不存在則返回/srv/www/ducklington.org/public_html/blog/index.htm,如果兩個都不存在則返回404錯誤。

          請求http://ducklington.org/tasks.php將會被發給fastcgi去執行位于/srv/www/ducklington.org/public_html/tasks.php的文件

          請求?http://ducklington.org/squire/roster.php也將使用fastcgi句柄執行位于?/srv/www/ducklington.org/public_html/squire/roster.pl的文件,并返回結果。

          具體的location匹配規則這就不說了,不明白的可以看這里nginx location匹配

          最佳實踐

          上面這些例子和解釋應該足夠讓你能夠配置自己的nginx server了。下面列出配置nginx server最佳實踐。

          首先,把具體某一個要配置的server指令塊的所有指令放在一個文件中,然后使用include語句把它包含到配置文件中。

          例如綁定ducklington.org域名,首先把ducklington.org的 server指令塊配置放在/srv/www/ducklington.org/nginx.conf。然后增加指令include /srv/www/ducklington.org/nginx.conf;到配置文件的http塊中。像這樣:

          除非注明,本站文章均為: nginx.cn原創,轉載請注明本文地址: http://www.4693749.com/591.html

          --完--

          分類: nginx 標簽: , , ,
          1. 2015年11月10日17:44 | #1

            謝謝,早了一天了就是這種例子

          2. 2015年9月17日15:16 | #2

            大贊!非常感謝!

          3. monica
            2015年9月9日11:03 | #3

            贊一個!!

          4. 2015年6月24日14:58 | #4

            之前配置過,現在看著加深理解!使用ngnix做文件服務器,修改nginx訪問的根目錄:nginx.conf -> http -> server -> location -> root; 修改為你自己創建的目錄(/home/data),訪問 localhost/test.png 就相當于訪問 /home/data/test.png

          5. 2015年3月18日16:55 | #6

            very nice.
            p.s.有些地方有筆誤,可能是翻譯過來的緣故,比如roster.pl,應該是roster.php。還有像【另外,請注意上面的片段"http { "并不包含結尾"}",其余部分解下面繼續。】這句話不易理解,我也是看了很久結合上下文才了解作者想要表達什么,建議修改一下。

            • 2015年3月18日22:26 | #7

              是有些不好理解,意思是上面說了http段的前半部分,http還有一些部分內容,要到匹配的}才結束。

          6. 2013年1月25日09:46 | #8

            有些語句筆誤, 虛擬機server配置上面一行字“另外,請主機上面的片段"http { "并不包含結尾"}",其余部分下面繼續。”虛擬機server配置 下面“listen指令告訴nginx在一個特定的hostname.

          7. jason
            2012年12月25日17:46 | #10

            支持,最后要是有個例子效果說明就更好了,比如:這樣配置實現的效果就是:*******

          1. 2017年6月15日18:41 | #1
          2. 2017年10月29日07:28 | #2

          印度快乐8官网
          <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

          <progress id="1rarx"><tr id="1rarx"></tr></progress>
          <sup id="1rarx"><menu id="1rarx"></menu></sup>
          <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

            <sup id="1rarx"><menu id="1rarx"></menu></sup>
            <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
              <em id="1rarx"></em>

                  <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

                  <progress id="1rarx"><tr id="1rarx"></tr></progress>
                  <sup id="1rarx"><menu id="1rarx"></menu></sup>
                  <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

                    <sup id="1rarx"><menu id="1rarx"></menu></sup>
                    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
                      <em id="1rarx"></em>