Note:任何形式的轉(zhuǎn)載請注明原文
本文指令都是按管理員權(quán)限執(zhí)行,如果遇到權(quán)限問題請
sudo
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務(wù)器,Nginx,它的發(fā)音為“engine X”,是一個高性能的HTTP和反向代理服務(wù)器,同時也是一個IMAP/POP3/SMTP 代理服務(wù)器。
HTTP請求是80端口,但是在Linux上非root權(quán)限是無法使用1024以下端口的,并且因為安全原因,最好不要使用root權(quán)限登錄服務(wù)器,所以無法直接用
node.js或Tomcat程序監(jiān)聽80端口。因此我們需要使用Nginx給我們的程序做反向代理,將80端口指向應(yīng)用程序監(jiān)聽的端口(如node.js默認(rèn)3000端口,Tomcat 默認(rèn)8080端口)。
安裝Nginx
配置Nginx源
vim /etc/yum.repos.d/nginx.repo
敲擊i輸入下面代碼,按Esc并輸入:wq!保存退出
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
通過yum安裝Nginx
yum install nginx
啟動 / 重啟 Nginx
systemctl start nginx
systemctl restart nginx
修改配置文件
樣例配置
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
location /favicon.ico {
root html;
}
}
這里的
listen指監(jiān)聽端口,server_name用來指定IP或域名,多個域名對應(yīng)統(tǒng)一規(guī)則可以空格分開,index用于設(shè)定訪問的默認(rèn)首頁地址,root指令用于指定虛擬主機的網(wǎng)頁跟目錄,這個地方可以是相對地址也可以是絕對地址。
當(dāng)用戶訪問localhost/favicon.ico時,會尋找nginx安裝目錄
/html/favicon.ico
通常情況下我們可以在 nginx.conf 中配置多個server,對不同的請求進行設(shè)置。
server {
listen 80;
server_name www.a.com;
charset utf-8;
access_log /home/a.com.access.log main;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
server {
listen 80;
server_name www.b.com;
charset utf-8;
access_log /home/b.com.access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
但是當(dāng) server 超過2個時,建議將不同對虛擬主機的配置放在另一個文件中,然后通過在主配置文件 nginx.conf 加上 include 指令包含進來。更便于管理。
include vhosts/*.conf;
location 匹配規(guī)則
~ 波浪線表示執(zhí)行一個正則匹配,區(qū)分大小寫
~* 表示執(zhí)行一個正則匹配,不區(qū)分大小寫
^~ ^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
= 進行普通字符精確匹配
具體匹配例子
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何請求,因為所有請求都是以"/"開始
# 但是更長字符匹配或者正則表達式匹配會優(yōu)先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開始的請求,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg結(jié)尾的請求.
# 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.
[ configuration D ]
}
請求:
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
靜態(tài)文件映射
訪問文件的配置主要有 root 和 aliasp's 兩個指令。
alias
alias后跟的指定目錄是準(zhǔn)確的,并且末尾必須加 /。
location /c/ {
alias /a/;
}
root
root后跟的指定目錄是上級目錄,并且該上級目錄下要含有和location后指定名稱的同名目錄才行。
location /c/ {
root /a/;
}
這時訪問站點http://location/c訪問的就是/a/c目錄下的站點信息。
如果你需要將這個目錄展開,在這個location的末尾加上「autoindex on; 」就可以了
轉(zhuǎn)發(fā)
這個很簡單,指定IP和端口直接轉(zhuǎn)發(fā)過去就可以了.譬如轉(zhuǎn)發(fā)到localhost的3000端口
location / {
proxy_pass localhost:3000;
}
負(fù)載均衡
我們在 upstream 中指定了一組機器,并將這個組命名為 myserver,這樣在 proxypass 中只要將請求轉(zhuǎn)移到 myserver 這個 upstream 中我們就實現(xiàn)了在四臺機器的反向代理加負(fù)載均衡。其中的 ip_hash 指明了我們均衡的方式是按照用戶的 ip 地址進行分配。另外還有輪詢、指定權(quán)重輪詢、fair、url_hash幾種調(diào)度算法。
upstream myserver; {
ip_hash;
server 172.16.1.1:8001;
server 172.16.1.2:8002;
server 172.16.1.3;
server 172.16.1.4;
}
location / {
proxy_pass http://myserver;
}
結(jié)束語
以上是最簡單的通過 nginx 實現(xiàn)靜態(tài)文件轉(zhuǎn)發(fā)、反向代理和負(fù)載均衡的配置。在 nginx 中所有的功能都是通過模塊來實現(xiàn)的,比如當(dāng)我們配置 upstream 時是用 upstream 模塊,而 server 和 location 是在 http core 模塊,其他的還有流控的 limt 模塊,郵件的 mail 模塊,https 的 ssl 模塊。他們的配置都是類似的可以再 nginx 的模塊文檔中找到詳細(xì)的配置說明。