nginx:菜鳥手冊

          以下講記述的,是為nginx入門級新人和打算學習nginx的人而準備的。

          首先,nginx(讀作:engine x)是一個反向代理服務器。這里順便闡述一下相關的概念,來幫助概念不清楚的朋友來獲得最佳的學習體驗。
          服務器可以按照不同標準劃分為很多種,那么這里討論的就是其中的一種,代理服務器。代理服務器可以再次細分,分為正向代理服務器和反向代理服務器,這兩者是相對于目標服務器而言的。當我們(O)希望訪問某一臺服務器(T,是具體的服務器),但是由于種種原因,我們不能去直接的訪問T,但是我們可以直接訪問另一臺服務器(P),而P卻可以訪問T,那么正好,我們拜托P去訪問T,將獲得的信息返回給我們,這個過程中,我們始終知道要訪問的那一臺服務器,所以,這個代理過程稱為正向代理;那么與之相對,如果我們知道要訪問的站點,但是該站點可能同時部署在多個服務器上,不過最終我們獲得了目標站點的內容,這個過程中,我們不知道具體訪問過哪一臺服務器,所以,這個代理過程稱為反向代理。

          那么nginx就是近些年來使用率不斷攀升的代理服務器,你可以查看一下中間件的使用情況,這里給出一個調查,點我查看

          好了,我們開始吧。我不管你什么系統,但是我假定你已經安裝好了nginx,排除那些系統上操作的差異,我們來感受一下最基本的操作。
          nginx的啟動停止重新加載配置文件
          在控制臺中定位到nginx所在的目錄,使用nginx -s signal操作nginx,signal可以是以下參數
          • stop — 立刻停止(不會等待當前工作結束)
          • quit — 延遲停止(會等待當前工作結束)
          • reload — 重新加載配置文件(會優先檢查新配置文件的格式,通過校驗則啟用新配置,不通過則沿用舊配置)
          • reopen — 重新打開日志文件
          好了,知道了基本操作之后,我們就看一下配置文件,看懂了配置文件,我們就能讓nginx按照我們的需要來運作。打開nginx.cnf文件
          #user  nobody;
          #我左邊有個“#”號,這說明這一行都是注釋
          #下面的這個,看起來像一對鍵值對,這么理解也可以,官方給出的解釋是“簡單指令”
          worker_processes  1;

          #error_log  logs/error.log;
          #error_log  logs/error.log  notice;
          #error_log  logs/error.log  info;

          #pid        logs/nginx.pid;

          #與簡單指令相對,下面的event以及一對花括號,稱作“塊指令”;含有其他指令的“塊指令”,我們稱作“上下文”
          #同時,我們把不被包含在任何其他上下文中的上下文稱作主上下文
          #所以,“events”和“http”就是主上下文,“server”和“location”就不是主上下文
          events {
              worker_connections  1024;
          }

          http {
              include       mime.types;
              default_type  application/octet-stream;

              #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
              #                  '$status $body_bytes_sent "$http_referer" '
              #                  '"$http_user_agent" "$http_x_forwarded_for"';

              #access_log  logs/access.log  main;

              sendfile        on;
              #tcp_nopush     on;

              #keepalive_timeout  0;
              keepalive_timeout  65;

              #gzip  on;
           
              #好了,我們需要配置一個服務器最基本的功能,給出請求相應結果
              #看到下面這個server上下文,它看上去但是也的確是用來配制服務器的
              server {
                  #這個server上下文監聽的端口以及域名
                  listen       80;
                  server_name  localhost;

                  #charset koi8-r;

                  #access_log  logs/host.access.log  main;

                  #這里就是路由規則了,location加空格再加匹配項,這里的匹配項是“/”,也就是說所有以“/”開頭的請求都符合這個路由規則
                  #但是需要注意一點,nginx在匹配路由的時候有一個最長前綴匹配規則,看到下一個路由規則
                  location / {
                      #這里的root指的是響應資源所在的目錄,這是指明,資源在nginx目錄下的index目錄里
                      root   html;
                      #index指令會響應指定的頁面,按次序進行查找,找到了就返回
                      index  index.html index.htm;
                  }
                  
                  #這location的匹配項是“/demo”,那么當一個請求是“/demo/get”的時候,這個請求會匹配之前的“/”和這里的“/demo”,但是
                  #nginx會選擇前綴較長的匹配項來匹配,所以nginx會使用/demo路由的相應內容
                  location /demo {
                      #這里又重新設定了root的值,表示用nginx目錄demo目錄下的資源響應
                      #如果root在主上下文之外設定,那么相當于一個全局的設定,在其他上下文中沒有被覆蓋的話,則使用全局設定
                      root   demo;
                  }

                  #截止到為目前的配置,nginx都是用來響應靜態的資源,比如我們訪問localhost/demo/show.html,那么nginx會返回nginx目錄下
                  #demo目錄下show.html的內容,所以,我們經常會把nginx當做一個靜態內容緩存來使用,來緩解后續服務器的響應壓力

                  #對于location來說,常用的還有正則匹配
                  #靜態資源配置,當然也可以來響應動態請求,不過這里有一點需要注意,當使用正則匹配時,如果請求匹配了當前的路由規則,那么
                  #會以正則的匹配內容為主并返回,不會使用非正則的匹配項內容返回,以“~”開頭,就表示匹配項是一個正則表達式,當然,還有其
                  #他不同規則的前綴都表示正則,后續再展開
                      location ~ .*\.(css|js)(.*) {
                       proxy_set_header Host $host;
                       proxy_cache_valid 200 302 1h;
                       proxy_cache_valid 301 1d;
                       proxy_cache_valid any 1m;
                       expires 7d;
                  }

                  #對于代理服務器來說,最基本的功能代理是必不可少的,而且配置也非常簡單
                  #端口轉發配置,做出如下配置之后,符合匹配項的請求會原封不動的轉發到otherhost域名下
                  location /proxy{
                   proxy_pass http://otherhost;
                  }

                  #下面的配置顯而易見,是錯誤頁面的配置
                  #error_page  404              /404.html;

                  # redirect server error pages to the static page /50x.html
                  #
                  error_page   500 502 503 504  /50x.html;
                  location = /50x.html {
                      root   html;
                  }
              }
          }
          有了這套最基本的配置,就可以試著開啟nginx,感受一下它的功能

          posted on 2015-12-01 17:32 都較瘦 閱讀(238) 評論(0)  編輯  收藏 所屬分類: 中間件相關問題積累


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2015年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 霸州市| 雅江县| 义乌市| 岑溪市| 凭祥市| 巢湖市| 澳门| 婺源县| 定襄县| 衡阳县| 阳城县| 峨眉山市| 黄骅市| 龙井市| 美姑县| 平武县| 彰化市| 大新县| 澜沧| 广元市| 英德市| 衡水市| 湘潭县| 于都县| 临清市| 莱阳市| 和顺县| 阿克| 大新县| 中牟县| 铁岭县| 体育| 革吉县| 河南省| 莎车县| 抚宁县| 鄂州市| 清水县| 濮阳县| 衡阳县| 广河县|