阿里雲伺服器ecs配置之安裝nginx
一、簡介
Nginx是一款輕量級的網頁伺服器、反向代理伺服器。相較於Apache、lighttpd具有佔有記憶體少,穩定性高等優勢。它最常的用途是提供反向代理服務。
二 、安裝
1、準備工作
Nginx的安裝依賴於以下三個包,意思就是在安裝Nginx之前首先必須安裝一下的三個包,注意安裝順序如下:
1 SSL功能需要openssl庫,直接通過yum安裝: #yum install openssl
2 gzip模組需要zlib庫,直接通過yum安裝: #yum install zlib
3 rewrite模組需要pcre庫,直接通過yum安裝: #yum install pcre
2、安裝Nginx依賴項和Nginx
1 使用yum安裝nginx需要包括Nginx的庫,安裝Nginx的庫
#rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2 使用下面命令安裝nginx
#yum install nginx
3 啟動Nginx
#service nginx start
3、直接瀏覽器訪問localhost就會出現Nginx的歡迎介面表示你安裝成功了,否則就是安裝失敗了
檢視已開放的埠:firewall-cmd --list-ports
預設80埠加入防火牆訪問白名單中:firewall-cmd --permanent --zone=public --add-port=80/tcp
使用firewall-cmd --reload命令使其生效,之後可以再檢視下開放的埠。訪問ip:80埠,如下則表示安裝成功
4、配置Nginx
CentOS安裝Nginx後,安裝在了 /etc/nginx/目錄下,你可以開啟/etc/nginx/conf.d/default/conf檢視裡面的配置,包括監聽埠,域名和nginx訪問的根目錄
三、配置
以上安裝方法nginx的配置檔案位於
/usr/local/nginx/conf/nginx.conf
Nginx配置檔案常見結構的從外到內依次是「http」「server」「location」等等,預設的繼承關係是從外到內,也就是說內層塊會自動獲取外層塊的值作為預設值。
Server
接收請求的伺服器需要將不同的請求按規則轉發到不同的後端伺服器上,在 nginx 中我們可以通過構建虛擬主機(server)的概念來將這些不同的服務配置隔離。
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
}
例如我們筆戈玩下的兩個子專案 passport 和 wan 就可以通過在 nginx 的配置檔案中配置兩個 server,servername 分別為 passport.bigertech.com 和 wan.bigertech.com。這樣的話不同的 url 請求就會對應到 nginx 相應的設定,轉發到不同的後端伺服器上。
這裡的listen指監聽埠,server_name用來指定IP或域名,多個域名對應統一規則可以空格分開,index用於設定訪問的預設首頁地址,root指令用於指定虛擬主機的網頁跟目錄,這個地方可以是相對地址也可以是絕對地址。
通常情況下我們可以在 nginx.conf 中配置多個server,對不同的請求進行設定。就像這樣:
server {
listen 80;
server_name host1;
root html;
index index.html index.htm;
}
server {
listen 80;
server_name host2;
root /data/www/html;
index index.html index.htm;
}
但是當 server 超過2個時,建議將不同對虛擬主機的配置放在另一個檔案中,然後通過在主配置檔案 nginx.conf 加上 include 指令包含進來。更便於管理。
include vhosts/*.conf;
就可以把vhosts的檔案都包含進去啦。
Localtion
每個 url 請求都會對應的一個服務,nginx 進行處理轉發或者是本地的一個檔案路徑,或者是其他伺服器的一個服務路徑。而這個路徑的匹配是通過 location 來進行的。我們可以將 server 當做對應一個域名進行的配置,而 location 是在一個域名下對更精細的路徑進行配置。
以上面的例子,可以將root和index指令放到一個location中,那麼只有在匹配到這個location時才會訪問root後的內容:
location / {
root /data/www/host2;
index index.html index.htm;
}
location 匹配規則
~ 波浪線表示執行一個正則匹配,區分大小寫
~* 表示執行一個正則匹配,不區分大小寫
^~ ^~表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
= 進行普通字元精確匹配
匹配例子:
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何請求,因為所有請求都是以"/"開始
# 但是更長字元匹配或者正則表示式匹配會優先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開始的請求,並停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg結尾的請求.
# 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.
[ configuration D ]
}
請求:
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
靜態檔案對映
訪問檔案的配置主要有root 和 aliasp's 兩個指令。這兩個指令的區別容易弄混:
alias
alias後跟的指定目錄是準確的,並且末尾必須加 /。
location /c/ {
alias /a/;
}
如果訪問站點http://location/c訪問的就是/a/目錄下的站點資訊。
root
root後跟的指定目錄是上級目錄,並且該上級目錄下要含有和location後指定名稱的同名目錄才行。
location /c/ {
root /a/;
}
這時訪問站點http://location/c訪問的就是/a/c目錄下的站點資訊。
如果你需要將這個目錄展開,在這個location的末尾加上「autoindex on; 」就可以了
轉發
配置起來很簡單比如我要將所有的請求到轉移到真正提供服務的一臺機器的 8001 埠,只要這樣:
location / {
proxy_pass 172.16.1.1:8001;
}
這樣訪問host時,就都被轉發到 172.16.1.1的8001埠去了。
負載均衡
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;
}
我們在 upstream 中指定了一組機器,並將這個組命名為 myserver,這樣在 proxypass 中只要將請求轉移到 myserver 這個 upstream 中我們就實現了在四臺機器的反向代理加負載均衡。其中的 ip_hash 指明瞭我們均衡的方式是按照使用者的 ip 地址進行分配。另外還有輪詢、指定權重輪詢、fair、url_hash幾種排程演算法。
附註:配置完之後可以使用測試命令驗證下配置是否正確
nginx -t
或者
nginx -tc [nginx檔案地址]