文章目錄
1. nginx簡介
nginx的主要功能:
- 負載均衡
- 反向代理
2.配置文件的結構
分爲 simple directives(簡單指令) 和 block directives(塊指令)。前者爲空格隔開的鍵值對,後者爲{}
包裹的語句。如果一個塊指令可以在括號內包含其他指令,則稱爲context(上下文)
。
nginx 中的context
有 events
,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的理解