Nginx配置2-http塊配置


Nginx配置2-http塊配置

http配置塊

http配置塊包括http-全局塊、http-server塊、upstream 塊兒。可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。

http-全局塊

mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等

http {
      #設定mime類型,類型由mime.type文件定義
      include    mime.types;
      #默認文件類型
      default_type application/octet-stream; 

      #設定日志格式(自定義)
      log_format ownformat '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';
      access_log  /home/nginx/log/http_access.log ownformat;
                   
      #對於普通應用,設為on可以減少文件拷貝次數,如果圖片顯示不正常把這個改成off。
      sendfile     on;	      #off模式拷貝路徑:硬盤—>內核fs緩沖區—>用戶空間—>內核socket緩沖區—>協議引擎
			      # on模式拷貝路徑1: 硬盤—>內核fs緩沖區—>內核socket緩沖區—>協議引擎
			      # on模式拷貝路徑2: 硬盤—>內核fs緩沖區—>協議引擎
						
      tcp_nopush on	      #在linux/Unix系統中優化tcp數據傳輸,僅在sendfile開啟時有效
      #tcp_nodelay on;	      #TCP_NODELAY選項來禁用Nagle的緩沖算法,並在數據可用時立即發送與tcp_nopush互斥

	
      keepalive_timeout 120; 		#長連接超時時間,單位是秒
      send_timeout 30;			#指定客戶端的響應超時時間
	
	
      gzip on;			      #開啟gzip壓縮輸出
      gzip_http_version 1.0; 	      #壓縮版本
      gzip_comp_level 2;	      #壓縮級別,1-10,數字越大壓縮的越好
      gzip_min_length 1k;	      #設置允許壓縮的頁面最小字節數
      gzip_types text/plain application/x-javascript text/css application/xml;  #壓縮類型
      gzip_disable "MSIE [1-6].";      #IE6及以下禁止壓縮
}

#日志格式(自定義)
        #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
        #$remote_user:用來記錄客戶端用戶名稱;
        #$time_local: 用來記錄訪問時間與時區;
        #$request: 用來記錄請求的url與http協議;
        #$status: 用來記錄請求狀態;成功是200,
        #$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
        #$http_referer:用來記錄從那個頁面鏈接訪問過來的;
        #$http_user_agent:記錄客戶瀏覽器的相關信息;
 #通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
  

http-server塊

配置虛擬主機的相關參數,包含server全局塊和location塊

server全局塊

server {
        listen 80;			#描述虛擬主機接受連接的地址和端口
        server_name localhost;          #內網:主機名,外網:域名 可以是多個域名,用空格隔開
        access_log   /home/nginx/log/server_localhost_access.log ownformat;
        index index.html index.htm index.jsp;         #默認訪問主頁
	root /nginx/www/webapps; 	              #主目錄
}
	

server {
    listen      192.168.1.101:8080;		# 監聽具體IP和具體端口上的連接
    ...
}

server {
    listen      80;						
    server_name example.com www.example.com;	#基於域名的虛擬主機(server_name)
}

server {
    listen      80;						
    server_name example.com www.example.com;	#基於域名的虛擬主機(server_name)
}

server {
    listen      192.168.1.1:80;
    server_name example.net www.example.net;	#基於域名和IP混合的虛擬主機
}

#nginx支持三種類型的虛擬主機配置
#- 基於ip的虛擬主機(一塊物理服務器綁定多個ip地址)
#- 基於域名的虛擬主機(server_name)
#- 基於端口的虛擬主機(listen不寫ip,端口模式)

location塊

為具體的請求URI配置請求路由,可以實現默認主頁、錯誤提示頁面、靜態文件處理、反向代理等功能

location = / {			#注意URL最好為具體路徑。 uri嚴格匹配指定的路徑,不包括子路徑
    [ configuration A ]
}

location / {			#對當前路徑及子路徑下的所有對象都生效;
    [ configuration B ]
}

location ~ URI {} {		#~區分字符大小寫
    [ configuration C ]
}

location ^~ /images/ {	#禁用正則表達式
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {	#~*不區分字符大小寫
    [ configuration E ]
}

#默認請求
location / {
#定義首頁索引文件的名稱
index index.php index.html index.htm;   
}

# 定義錯誤提示頁面
error_page   500 502 503 504 /50x.html;
  location = /50x.html {
}
error_page   400 402 403 404 /40x.html;
  location = /40x.html {
}

#靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
    #過期30天,靜態文件不怎么更新,過期可以設大一點,
    expires 30d;
}

#所有jsp的頁面均交由tomcat或weblogic處理
location ~ .(jsp|jspx|do)?$ {
	#指向weblogic服務器
 	proxy_pass http://127.0.0.1:700;
    #將主機跟真實IP寫入HTTP頭中
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

upstream 塊兒

#upstream可以實現負載均衡
upstream httpds {
    server 127.0.0.1:8050       weight=10 down;
    server 127.0.0.1:8060       weight=1;
    server 127.0.0.1:8060       weight=1 backup;
}
#- down:表示當前的server暫時不參與負載 
#- weight:默認為1.weight越大,負載的權重就越大。 
#- backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。

#負載均衡算法:
#1、輪詢(默認)
#每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。

#2、weight
#指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。

#3、ip_hash
#每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。

#4、fair(第三方)
#按后端服務器的響應時間來分配請求,響應時間短的優先分配。

#5、url_hash(第三方)
#按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。

參考

Nginx sendfile原理詳解

TCP_NODELAY 和 TCP_NOPUSH的解釋


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM