nginx之:基本配置

1.nginx經常使用功能

1)反向代理

首先咱們先了解一下什麼是正向代理,以下圖所示正向代理,代理的是客戶端的對服務器方發起的訪問,能夠起到隱藏客戶端IP等信息的做用。javascript

反向代理則表示代理的是服務器端內容,web服務器並無直接暴露到公網上而是經過代理服務才能訪問到真正的web服務器。php

2)負載均衡

nginx的負載均衡策略有兩種,一種是內置策略,還有一種是擴展策略。其中內置策略分爲輪詢、加權輪詢、IP hash。css

內置策略:html

輪詢:是指在因此提供服務的服務器作輪詢提供服務。java

加權輪詢:根據全部提供服務的服務器權重進行輪詢。nginx

ip hash:對客戶端請求ip進行hash操做, 而後根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,能夠解決session不共享的問題。 web

3)web緩存

Nginx能夠對不一樣的文件作不一樣的緩存處理,配置靈活,而且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容能夠的進行增刪管理 。後端

2.nginx文件結構

conf文件夾的nginx.conf文件,Nginx服務器的基礎配置,默認的配置也存放在此。瀏覽器

#user  nobody;   配置用戶或用戶組,一般爲啓動nginx的用戶組
worker_processes  1; #容許生成的線程數量,一般配置成與cpu數量相同

#error_log  logs/error.log  info; 指定錯誤日誌路徑和級別,debug|info|notice|warn|error|crit|alert|emerg

#pid        logs/nginx.pid;  #指定nginx進程運行pid


events {
    accept_mutex on;   #設置網路鏈接序列化,防止驚羣現象發生,默認爲on;驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能。
	
    multi_accept on;  #設置一個進程是否同時接受多個網絡鏈接,默認爲off
    use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024; #單個worker_processes進程的最大鏈接數,默認爲512
    #最大鏈接數爲worker_processes與worker_connections乘積,在設置了反向代理的狀況下最大鏈接數爲前面乘積以後除以4(經驗值)。
    #設置最大連接數時不該大於系統內打開的最大文件數,系統能打開的最大文件數和系統內存成正比,通常狀況下1G內存大約能夠打開的文件數爲10萬左右。
	
}

http {
    include       mime.types;    #文件擴展名與文件類型映射表
    default_type  application/octet-stream; #默認文件類型,默認爲text/plain

	#自定義日誌格式
     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 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
     #對於普通應用,必須設爲 on,
     #若是用來進行下載等應用磁盤IO重負載應用,可設置爲 off
     sendfile   on;
     sendfile_max_chunk 100k;  #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。
	
     #tcp_nopush     on;

     keepalive_timeout  65;   #鏈接超時時間,默認爲75s

     #gzip  on;  #開啓gzip壓縮
    
     #負載均衡配置示例默認是以輪詢
     upstream backend {    
	 #ip_hash; 
         server 192.168.1.101:8090;
         server 192.168.1.101:8080;
     }
     #虛擬主機配置
     server {
        listen       80; #監聽80端口
        server_name  www.nginx.cn;

        #charset koi8-r;
		
        #access_log  logs/host.access.log  main;#該虛擬機下請求日誌

	#監聽根路勁
        location / {
	    proxy_pass http://backend;
        }

        error_page   500 502 503 504  /50x.html; #錯誤頁面
		
        location = /50x.html {
            root   html;
        }
        
	#靜態文件,nginx本身處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ { 
            #過時30天,靜態文件不怎麼更新,過時能夠設大一點,
            #若是頻繁更新,則能夠設置得小一點。
            expires 30d;
        }
		
	#禁止訪問 .htxxx 文件
        location ~ /.ht {    #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。
            deny all;
        }
    }
}

1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;緩存

2.$remote_user :用來記錄客戶端用戶名稱;

3.$time_local : 用來記錄訪問時間與時區;

4.$request : 用來記錄請求的url與http協議;

5.$status : 用來記錄請求狀態,成功是200;    

6.$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;

7.$http_referer :用來記錄從那個頁面連接訪問過來的;

8.$http_user_agent :記錄客戶端瀏覽器的相關信息;

3.Location基礎配置

1)語法規則

location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}

通用匹配:「/」

精確匹配:「=」

字符串匹配:字符串匹配開頭「 ^~ 」

正則匹配:區分大小寫匹配「~」;不區分大小寫匹配「~*」;區分大小寫不匹配「!~」;不區分大小寫不匹配「!~*」。

2)匹配優先級

精確匹配 > 字符串匹配( 長 > 短 [ 注: ^~ 匹配則中止匹配 ]) > 正則匹配( 上 > 下 )

精確匹配只能命中1個

字符串匹配使用匹配最長的匹配結果

正則匹配按照location定義的順序進行匹配,先定義具備高優先級

3)實際應用中經常使用的幾個規則

#直接匹配網站根,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。
#這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁
# 第一個必選規則
location = / {
proxy_pass http://tomcat:8080/index
}
 
# 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項
# 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用
location ^~ /static/ {
# 請求/static/a.txt 將被映射到實際目錄文件: /webroot/res/static/a.txt
root /webroot/res/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
 
#第三個規則就是通用規則,用來轉發動態請求到後端應用服務器
#非靜態文件請求就默認是動態請求,本身根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了
location / {
proxy_pass http://tomcat:8080/
}
相關文章
相關標籤/搜索