簡單介紹 nginx 配置

1. nginx簡介

nginx的主要功能:

  • 負載均衡
  • 反向代理

2.配置文件的結構

分爲 simple directives(簡單指令) 和 block directives(塊指令)。前者爲空格隔開的鍵值對,後者爲{}包裹的語句。如果一個塊指令可以在括號內包含其他指令,則稱爲context(上下文)

nginx 中的contextevents,http, server, 和 location

events 和 http是同一級別,屬於main contenxt

http包裹server,server 包裹 location

註釋使用#,這點與python一樣。

# simple directives
listen 9000;
server_name www.baidu.com;

# block directives
event {
......
}
http {
	......
	server {
		......
		location {
			......
		}
	}
}

3. 提供靜態文件

通常,配置文件可以包括幾個server block,這些server block通過它們偵聽的port和server_name名稱來區分。 一旦nginx決定了哪個服務器處理請求,它就會根據server block內定義的location指令的參數測試請求頭中指定的URI。

http {
	server {
		listen 8080; # 監聽8080端口
		server_name www.baidu.com; # 服務器名,也可以是ip地址
		root /home/your/test

		location /images/ {
			root /home/your/project; # 根據此路徑在本地找images目錄,常爲請求的圖片文件
		}

		location /static/ {
			root /home/your/project; # 根據此路徑在本地找static目錄,常爲請求的html靜態文件。
		}
		
		location / {

		}
	}

	server {
		listen 8081;
		server_name www.baidu.com;
				
		location / {

		}
	}

	server {
		listen 8080;
		server_name www.google.com;
				
		location / {

		}
	}
}

URL的構造通常爲protocol://host:port/path?query_params

首先,根據host和port找到對應的server block

例如:

http://www.baidu.com:8080 會走第一個server block
http://www.baidu.com:8081 會走第二個server block
http://www.google.com:8080 會走第三個server block

然後,根據path找到對應的location

根據請求URL中的host和port找到對應的server block,進入對應的 server block 之後,根據請求的URL中的path部分找到對應location block,

例如:
http://www.baidu.com:8080/staic/index.html 則會進入/static這個location block中,然後將path和拼接,得到了本地文件路徑,/home/your/project/static/index.html

http://www.baidu.com:8080/images/balabala.png 則會進入/images這個location block中,然後將path和拼接,得到了本地文件路徑,/home/your/project/images/balabala.png

其他的對此server block的請求都會進入/localtion block。

注意:如果有多個location block都匹配上了,則會選擇匹配中前綴最長的那個location block。而例子中的/這個location block只有在其他location block都沒匹配上時,纔會匹配。

4.設置簡單的代理服務器

server block 中的root 和 location block 中的root

若server block 中的 location block 沒有指明root的值,則當URL匹配到此location block之後,在查找本地目錄文件時,會在此root的值下找,否則就使用 location block 自己指明的root的值。

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
    
	location ~ \.(gif|jpg|png)$ {
    	root /data/images;
	}
} 

~\.(gif|jpg|png)$是一個正則表達式,它匹配所有以.gif,.jpg或.png結尾的URL。 正則表達式應以 ~ 開頭。 將相應的請求將映射到/ data / images目錄。

5. 設置FastCGI代理

nginx可用於將請求路由到FastCGI服務器,該服務器運行使用各種框架和編程語言(例如PHP)構建的應用程序。

什麼是FastCGI?

待補充

CGI(Common Gateway Interface)全稱是“通用網關接口”,是一種讓客戶端(web瀏覽器)與Web服務器(nginx等)程序進行通信(數據傳輸)的協議
CGI可以用任何一種具有標準輸入、輸出和環境變量的語言編寫,如php、perl、tcl等。
不同類型語言寫的程序只要符合cgi標準,就能作爲一個cgi程序與web服務器交互,早期的cgi大多都是c或c++編寫的。
一般說的CGI指的是用各種語言編寫的能實現該功能的程序。

FastCGI(Fast Common Gateway Interface)全稱是“快速通用網關接口
是通用網關接口(CGI)的增強版本,由CGI發展改進而來,主要用來提高CGI程序性能,
類似於CGI,FastCGI也是一種讓交互程序與Web服務器通信的協議
FastCGI致力於減少網頁服務器與CGI程序之間互動的開銷,從而使服務器可以同時處理更多的網頁請求(提高併發訪問)。
同樣的,一般說的FastCGI指的也是用各種語言編寫的能實現該功能的程序。

在設置FastCGI代理的配置時,不再使用proxy_pass這一類的指令,而是使用fastcgi_pass這一類的指令。

fastcgi_pass 用來指明被代理的服務器的host和port。
fastcig_param 用來指明要傳遞給被代理的服務器的參數。

參考文獻

[1] nginx官方文檔
[2] 深入理解nginx 推薦有時間的看看這本書,真的很好
[3] 關於CGI和FastCGI的理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章