阿里云 CentOS 環(huán)境搭建[3] -- Nginx

 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.jsTomcat程序監(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ì)的配置說明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容