1. 程式人生 > 實用技巧 >nginx入門之基礎配置

nginx入門之基礎配置

1、配置檔案

nginx 的配置檔案是 /etc/nginx/nginx.conf,其目錄結構大致為:

main     #全域性配置,對全域性生效
events { #nginx工作模式配置,配置影響 Nginx 伺服器或與使用者的網路連線
}
http {   #http設定,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置
    ....
    server {    #伺服器主機配置,配置虛擬主機的相關引數,一個 http 塊中可以有多個 server 塊
        ....
        location { # 路由配置server塊可以包含多個location塊,location指令用於匹配uri
            ....
        }
        location path {
            ....
        }
        location otherpath {
            ....
        }
    }
    server {
        ....

        location {
            ....
        }
    }
    upstream name {                    # 負載均衡配置
        ....
    }
}

配置語法:

  1. 每條配置以分號結尾;
  2. 指令快用 {} 將多條指令集合在一起;
  3. 可以使用 include 語句引進其它配置檔案;
  4. 使用 # 添加註釋;
  5. 視同 $ 使用變數;
  6. 部分指令引數支援正則;

2、典型配置

# 每個指令必須有分號結束
user administrator administrators;  #配置使用者或者組,預設為nobody nobody。
worker_processes 2;  #允許生成的程序數,預設為1,一般設定和cpu核數一樣
pid /nginx/pid/nginx.pid;   #指定nginx程序執行檔案存放地址
#制定日誌路徑,級別。這個設定可以放入全域性塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
error_log log/error.log debug; 
events {
    accept_mutex on;   #設定網路連線序列化,防止驚群現象發生,預設為on
    multi_accept on;   #設定一個程序是否同時接受多個網路連線,預設為off
    #use epoll;        #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大連線數,預設為512
}
http {
    include       mime.types;   #副檔名與檔案型別對映表
    default_type  application/octet-stream; #預設檔案型別,預設為text/plain
    #access_log off; #取消服務日誌    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
    access_log log/access.log myFormat;  #combined為日誌格式的預設值
    sendfile on;   #允許sendfile方式傳輸檔案,預設為off,可以在http塊,server塊,location塊。
    sendfile_max_chunk 100k;  #每個程序每次呼叫傳輸數量不能大於設定的值,預設為0,即不設上限。
    keepalive_timeout 65;  #連線超時時間,預設為75s,可以在http,server,location塊。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #熱備
    }
    error_page 404 https://www.baidu.com; #錯誤頁
    server {
        keepalive_requests 120; #單連線請求上限次數。
        listen       4545;   #監聽埠
        server_name  127.0.0.1;   #監聽地址       
        location  ~*^.+$ {       #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。
           #root path;  #根目錄
           #index vv.txt;  #設定預設頁
           proxy_pass  http://mysvr;  #請求轉向mysvr 定義的伺服器列表
           deny 127.0.0.1;  #拒絕的ip
           allow 172.18.5.54; #允許的ip           
        } 
    }
}

2.1、server配置

需要注意 server 裡面的 listen 和 server_name 的用法

  1. listen 並不是埠,可以使用ip接埠,但是這樣就只能單一的匹配了,所以一般只寫埠;
  2. 如果listen配置域名加埠,則 server_name 配置無意義;
  3. server_name 配置域名(ip),支援多個域名;

初學者可能會有疑問,為什麼需要支援多個域名/IP,反正進入到nginx裡面的,肯定是伺服器的IP。

因為

  1. 一臺伺服器是可以配置多個IP的;
  2. 一個ip是可以繫結多個域名的;

3、全域性變數

nginx 有一些常用的全域性變數,可以在配置檔案中的任意位置使用

全域性變數 描述
$host 請求資訊中的HOST,如果沒有,則等於設定的伺服器名,不包含埠
$request_method 客戶端請求型別,GET/POST等
$remote_addr 客戶端IP
$args 請求中的引數
$arg_PARAMETER GET請求中變數PARAMETER引數值
如$http_user_agent(Uaer-Agent值)
$content_length 請求頭中的 Content-length 欄位
$http_user_agent 客戶端agent資訊
$http_cookie 客戶端cookie資訊
$remote_addr 客戶端的IP地址
$remote_port 客戶端的埠
$server_protocol 請求使用的協議,如HTTP/1.0
$server_addr 伺服器地址
$server_name 伺服器名稱
$server_port 伺服器埠
$scheme HTTP方法(如http、https)

4、配置代理

server {
	listen       8081;
	server_name  localhost;

	location / {
		proxy_pass http://192.168.54.139;
	}
}

上例中,如果請求的ip和埠匹配到,則請求會轉發到 http://192.168.54.139

4.1、反向代理配置

兩個域名指向同一臺nginx伺服器,使用者訪問不同的路徑,顯示不同的內容

server {
	listen       8081;
	server_name  localhost;

	location ~ /edu/ {
		proxy_pass http://www.baidu.com;
	}
	location ~ /vod/ {
		proxy_pass http://www.qq.com;
	}
}

上例中,localhost:8081/edu 和 localhost/8081/vod 請求分別轉達到不同的伺服器

當然,也可以配置多個server

upstream tomcat1{
	server 192.168.10.182:80;
}
server {
	listen       80;
	server_name  www.123.com;

	location / {
		proxy_pass http://tomcat1;
	}
}
upstream tomcat1{
	server 192.168.10.182:81;
}
server {
	listen       80;
	server_name  www.456.com;

	location / {
		proxy_pass http://tomcat2;
	}
}

上例中,可以修改host檔案實現域名和ip的對映

5、負載均衡

5.1、輪詢

upstream tomcat2 {
	server 192.168.10.182:8081;
	server 192.168.10.182:8082;
	server 192.168.10.182:8083;
}
server {
	listen			80;
	server_name		www.123.com;
	
	location / {
		proxy_pass	http://tomcat2;
	}
}

輪詢預設權重都是1,伺服器請求的預設順序是123123123

5.2、加權輪詢

upstream tomcat2 {
	server 192.168.10.182:8081;
	server 192.168.10.182:8082 weight=2;
	server 192.168.10.182:8083;
}

上例中,為一個服務提供了三臺伺服器來實現負載均衡

可根據伺服器的配置情況調整權重,不配置則預設1,權重越低,請求越少。

5.3、熱備

upstream tomcat2 {
	server 192.168.10.182:8081;
	server 192.168.10.182:8082 backup;
}

當第一臺伺服器出問題時,啟用第二臺伺服器,順序是1111111,1掛了,22222

5.4、ip_hash

upstream tomcat2 {
	server 192.168.10.182:8081;
	server 192.168.10.182:8082;
	ip_hash;
}

nginx 會讓相同客戶端ip請求相同的伺服器

5.5、其它引數

nginx的負載均衡還有一些其它狀態引數詳解,比如:

  1. down:表示當前的server暫時不參與負載均衡;
  2. backup:預留的備份及其,其它非備份及其出現故障或者忙的時候,才會請求備份及其,因此,此及其壓力最輕;
  3. max_fails:允許請求失敗的次數,預設為1,當超過最大次數時,返回proxy_next_upstream模組定義的錯誤;
  4. fail_timeout:在經歷了max_fails次失敗之後,暫停服務的時間,max_fails可以和fail_timeout一起使用;

示例:

upstream tomcat2 {
	server 192.168.10.182:8081 weight=2 max_fails=2 fail_timeout=2;
	server 192.168.10.182:8082 weight=1 max_fails=2 fail_timeout=1;
}