出自:https://blog.csdn.net/wxyjuly/article/details/79443432
Nginx是一款輕量級的網頁伺服器、反向代理伺服器。相較于Apache、lighttpd具有占有記憶體少,穩定性高等優勢。**它最常的用途是提供反向代理服務。**
安裝
- 在Centos下,yum源不提供nginx的安裝,可以通過切換yum源的方法擷取安裝。也可以通過直接下載下傳安裝包的方法,**以下指令均需root權限執行**:
- 首先安裝必要的庫(nginx 中gzip子產品需要 zlib 庫,rewrite子產品需要 pcre 庫,ssl 功能需要openssl庫)。標明**/usr/ local**為安裝目錄,以下具體版本号根據實際改變。
1.安裝gcc gcc-c++(如新環境,未安裝請先安裝)
-
$ yum install -y gcc gcc-c++
2.安裝PCRE庫
-
$ cd /usr/local/
-
$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-.tar.gz
-
$ tar -zxvf pcre-.tar.gz
-
$ cd pcre-
-
$ ./configure
-
$ make && make install
-
如報錯:configure: error: You need a C++ compiler for C++ support
-
解決:yum install -y gcc gcc-c++
3.安裝SSL庫
- $ cd /usr/ local/
- $ wget http://www.openssl.org/ source/openssl-1.0.1j.tar.gz
- $ tar -zxvf openssl-1.0.1j.tar.gz
- $ cd openssl-1.0.1j
- $ ./config
- $ make && make install
- 4.安裝zlib庫存
$ cd /usr/local/
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ ./configure
$ make && make install
4.安裝nginx
-
$ cd /usr/local/
-
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
-
$ tar -zxvf nginx.tar.gz
-
$ cd nginx
-
$ ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
-
(注: --with-http_ssl_module:這個不加後面在nginx.conf配置ssl:on後,啟動會報nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常)
-
$ make && make install
-
報錯:./configure: error: the HTTP gzip module requires the zlib library
在–prefix後面接以下指令:
-
--with-pcre=/usr/local/pcre 指的是pcre 的源碼路徑。--with-zlib=/usr/local/zlib 指的是zlib 的源碼路徑。
點選此處下載下傳安裝腳本
5.啟動
$ /usr/local/nginx/sbin/nginx
檢查是否啟動成功:
打開浏覽器通路此機器的 IP,如果浏覽器出現 Welcome to nginx! 則表示 Nginx 已經安裝并運作成功。
部分指令如下:
重新開機:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
測試配置檔案是否正常:
$ /usr/local/nginx/sbin/nginx –t
強制關閉:
-
$ pkill 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/;
}
root
root後跟的指定目錄是上級目錄,并且該上級目錄下要含有和location後指定名稱的同名目錄才行。
location /c/ {
root /a/;
}
如果你需要将這個目錄展開,在這個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 實作靜态檔案轉發、反向代理和負載均衡的配置。在 nginx 中所有的功能都是通過子產品來實作的,比如當我們配置 upstream 時是用 upstream 子產品,而 server 和 location 是在 http core 子產品,其他的還有流控的 limt 子產品,郵件的 mail 子產品,https 的 ssl 子產品。他們的配置都是類似的可以再 nginx 的子產品文檔中找到詳細的配置說明。
Nginx是一款輕量級的網頁伺服器、反向代理伺服器。相較于Apache、lighttpd具有占有記憶體少,穩定性高等優勢。**它最常的用途是提供反向代理服務。**
安裝
- 在Centos下,yum源不提供nginx的安裝,可以通過切換yum源的方法擷取安裝。也可以通過直接下載下傳安裝包的方法,**以下指令均需root權限執行**:
- 首先安裝必要的庫(nginx 中gzip子產品需要 zlib 庫,rewrite子產品需要 pcre 庫,ssl 功能需要openssl庫)。標明**/usr/ local**為安裝目錄,以下具體版本号根據實際改變。
1.安裝gcc gcc-c++(如新環境,未安裝請先安裝)
-
$ yum install -y gcc gcc-c++
2.安裝PCRE庫
-
$ cd /usr/local/
-
$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-.tar.gz
-
$ tar -zxvf pcre-.tar.gz
-
$ cd pcre-
-
$ ./configure
-
$ make && make install
-
如報錯:configure: error: You need a C++ compiler for C++ support
-
解決:yum install -y gcc gcc-c++
3.安裝SSL庫
- $ cd /usr/ local/
- $ wget http://www.openssl.org/ source/openssl-1.0.1j.tar.gz
- $ tar -zxvf openssl-1.0.1j.tar.gz
- $ cd openssl-1.0.1j
- $ ./config
- $ make && make install
- 4.安裝zlib庫存
$ cd /usr/local/
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ ./configure
$ make && make install
4.安裝nginx
-
$ cd /usr/local/
-
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
-
$ tar -zxvf nginx.tar.gz
-
$ cd nginx
-
$ ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
-
(注: --with-http_ssl_module:這個不加後面在nginx.conf配置ssl:on後,啟動會報nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常)
-
$ make && make install
-
報錯:./configure: error: the HTTP gzip module requires the zlib library
在–prefix後面接以下指令:
-
--with-pcre=/usr/local/pcre 指的是pcre 的源碼路徑。--with-zlib=/usr/local/zlib 指的是zlib 的源碼路徑。
點選此處下載下傳安裝腳本
5.啟動
$ /usr/local/nginx/sbin/nginx
檢查是否啟動成功:
打開浏覽器通路此機器的 IP,如果浏覽器出現 Welcome to nginx! 則表示 Nginx 已經安裝并運作成功。
部分指令如下:
重新開機:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
測試配置檔案是否正常:
$ /usr/local/nginx/sbin/nginx –t
強制關閉:
-
$ pkill 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/;
}
root
root後跟的指定目錄是上級目錄,并且該上級目錄下要含有和location後指定名稱的同名目錄才行。
location /c/ {
root /a/;
}
如果你需要将這個目錄展開,在這個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 實作靜态檔案轉發、反向代理和負載均衡的配置。在 nginx 中所有的功能都是通過子產品來實作的,比如當我們配置 upstream 時是用 upstream 子產品,而 server 和 location 是在 http core 子產品,其他的還有流控的 limt 子產品,郵件的 mail 子產品,https 的 ssl 子產品。他們的配置都是類似的可以再 nginx 的子產品文檔中找到詳細的配置說明。