6.Nginx-server虛擬主機模塊

server虛擬主機模塊

server 模塊需要配置在 http 模塊中

http {
    server {  
        #監聽端口 80  
        listen 80;   
        #監聽域名dh.com;  
        server_name dh.com www.dh.com;
        access_log logs/sever.log combined;
        location / {
            # 站點根目錄,即網站程序存放目錄
            # 相對路徑,相對nginx根目錄。也可寫成絕對路徑  
            root /data/dh;  

            # 默認跳轉到index.html頁面  
            index index.html;
            #開啓後會以主目錄下的隨機文件作爲主頁
            #random_index on;
        }  
    }
}

常用配置

  1. listen [PORT]

    # 設定此虛擬主機爲默認的虛擬主機
    ## 會優先匹配虛擬主機
    listen 80 default_server;
    
  2. server_name [name…]

    虛擬主機的名稱。可以添加多個,空格分隔;還可以匹配正則表達式

    匹配優先級:

    • 精確匹配:

      server_name daiadrian.github.io
      
    • 左側*通配符:

      server_name *.github.io
      
    • 右側*通配符:

      server_name daiadrian.github.*
      
    • 正則表達式:

      server_name ~^.*\.github\.io$
      
    • default_server

  3. tcp_nodelay [on|off]

    • off指延遲發送,即如果一個會話中有多個請求,會合並之後再發送
    • on指不延遲發送,來一個請求就處理一個

    ​ 一般爲了用戶體驗最好設置成on,如果爲了服務器的資源得到更好的使用可以設置爲off

  4. server_tokens [on|off|build|string]

    是否在響應報文的server首部顯示nginx版本

    HTTP/1.1 304 Not Modified
    Server: nginx/1.15.7
    Date: Thu, 09 May 2019 03:33:04 GMT
    Last-Modified: Tue, 09 Apr 2019 14:26:15 GMT
    
    設置爲on,則在server會顯示nginx版本
    推薦設置爲 off 或者修改源碼使其可用 string 選項
    (string是商業版纔有)
    
  5. error_page code [=[response]] uri

    定義錯誤頁面,可以以指定的響應狀態碼進行響應

    error_page 404 /404.html
    # =200 即如果是404的錯誤,響應的狀態碼返回給客戶端是200的狀態
    ## 可以指定響應狀態碼,可以防止360等流氓瀏覽器將404的頁面強行轉到360自帶的404頁面去
    error_page 404 =200 /404.html
    
    location = /404.html {
        alias /web/error;
    }
    

訪問日誌配置

​ 通常web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,通過 $remote_add 拿到的IP地址是反向代理服務器的iP地址

​ 反向代理服務器在轉發請求的 http 頭信息中,可以增加 x_forwarded_for 信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址

#日誌格式設定
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#定義本虛擬主機的訪問日誌
access_log  /usr/local/nginx/logs/host.access.log  main;
access_log  /usr/local/nginx/logs/host.access.404.log  log404;
  • $remote_addr$http_x_forwarded_for 用以記錄客戶端的 ip 地址
  • $remote_user:用來記錄客戶端用戶名稱
  • $time_local: 用來記錄訪問時間與時區
  • $request: 用來記錄請求的url與http協議
  • $status: 用來記錄請求狀態;成功是200
  • $body_bytes_sent :記錄發送給客戶端文件主體內容大小
  • $http_referer:用來記錄從那個頁面鏈接訪問過來的
  • $http_user_agent:記錄客戶瀏覽器的相關信息

詳細配置

http {
    #虛擬主機的配置
    server {
        #監聽端口
        listen 80;

        #域名可以有多個,用空格隔開
        server_name www.dh.com dh.cn;
        index index.html index.htm index.php;
        root /data/dh;
         
        #圖片緩存時間設置
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            #緩存時間
            expires 10d;
        }
         
        #JS和CSS緩存時間設置
        location ~ .*.(js|css)?$
        {
            expires 1h;
        }
         
        log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" $http_x_forwarded_for';
         
        #定義本虛擬主機的訪問日誌
        access_log  /usr/local/nginx/logs/host.access.log  main;
        access_log  /usr/local/nginx/logs/host.access.404.log  log404;
         
        #對 "/" 啓用反向代理
        location / {
            proxy_pass http://127.0.0.1:88;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
             
            #後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             
            #以下是一些反向代理的配置,可選。
            proxy_set_header Host $host;

            #允許客戶端請求的最大單文件字節數
            client_max_body_size 10m;

            #緩衝區代理緩衝用戶端請求的最大字節數,
            #如果把它設置爲比較大的數值,例如256k,那麼,無論使用firefox還是IE瀏覽器,來提交任意小於256k的圖片,都很正常。如果註釋該指令,使用默認的client_body_buffer_size設置,也就是操作系統頁面大小的兩倍,8k或者16k,問題就出現了。
            #無論使用firefox4.0還是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤
            client_body_buffer_size 128k;

            #表示使nginx阻止HTTP應答代碼爲400或者更高的應答。
            proxy_intercept_errors on;

            #後端服務器連接的超時時間_發起握手等候響應超時時間
            #nginx跟後端服務器連接超時時間(代理連接超時)
            proxy_connect_timeout 90;

            #後端服務器數據回傳時間(代理髮送超時)
            #後端服務器數據回傳時間_就是在規定時間之內後端服務器必須傳完所有的數據
            proxy_send_timeout 90;

            #連接成功後,後端服務器響應時間(代理接收超時)
            #連接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之中等候處理(也可以說是後端服務器處理請求的時間)
            proxy_read_timeout 90;

            #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
            #設置從被代理服務器讀取的第一部分應答的緩衝區大小,通常情況下這部分應答中包含一個小的應答頭,默認情況下這個值的大小爲指令proxy_buffers中指定的一個緩衝區的大小,不過可以將其設置爲更小
            proxy_buffer_size 4k;

            #proxy_buffers緩衝區,網頁平均在32k以下的設置
            #設置用於讀取應答(來自被代理服務器)的緩衝區數目和大小,默認情況也爲分頁大小,根據操作系統的不同可能是4k或者8k
            proxy_buffers 4 32k;

            #高負荷下緩衝大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k;

            #設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長
            #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
            proxy_temp_file_write_size 64k;
        }
         
         
        #設定查看Nginx狀態的地址
        location /NginxStatus {
            #開啓查看Nginx狀態模塊
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file confpasswd;
            #htpasswd文件的內容可以用apache提供的htpasswd工具來產生。
        }
         
        #本地動靜分離反向代理配置
        #所有jsp的頁面均交由tomcat或resin處理
        location ~ .(jsp|jspx|do)?$ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080;
        }
         
        #所有靜態文件由nginx直接讀取不經過tomcat或resin
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|
        pdf|xls|mp3|wma)$
        {
            #緩存時間
            expires 15d; 
        }
         
        location ~ .*.(js|css)?$
        {
            expires 1h;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章