一、安裝
在centos下,yum源不提供Nginx的安裝,可以通過切換yum源的方法獲取安裝。也可以通過直接下載安裝包的方法,**以下命令均需root權限執(zhí)行**:
首先安裝必要的庫(nginx 中gzip模塊需要 zlib 庫,rewrite模塊需要 pcre 庫,ssl 功能需要openssl庫)。選定**/usr/local**為安裝目錄,以下具體版本號根據(jù)實際改變。
1.1 安裝gcc gcc-c++(如新環(huán)境,未安裝請先安裝)
- 1.1 $ yum install -y gcc gcc-c++
1.2.安裝PCRE庫
- $ cd /usr/local/
- $ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
- $ tar -zxvf pcre-8.36.tar.gz
- $ cd pcre-8.36
- $ ./configure
- $ make && make install
- 如報錯:configure: error: You need a C++ compiler for C++ support
- 解決:yum install -y gcc gcc-c++
1.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
1.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
1.5.安裝nginx
- 5.1 $ cd /usr/local/
1.5.2 $ wget http://nginx.org/download/nginx-1.8.0.tar.gz
1.5.3 $ tar -zxvf nginx-1.8.0.tar.gz
1.5.4 $ cd nginx-1.8.0
1.5.5 $ ./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
1.5.6 (注: --with-http_ssl_module:這個不加后面在nginx.conf配置ssl:on后,啟動會報nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常)
1.5.7 $ make && make install
1.5.8 時提示以下錯誤:
./configure: error: SSL modules require the OpenSSL library.
支持此命令:
yum -y install openssl openssl-devel
1.5.9 報錯:./configure: error: the HTTP gzip module requires the zlib library
在–prefix后面接以下命令:
--with-pcre=/usr/local/pcre-8.36 指的是pcre-8.36 的源碼路徑。--with-zlib=/usr/local/zlib-1.2.8 指的是zlib-1.2.8 的源碼路徑。
1.6.啟動
$ /usr/local/nginx/sbin/nginx
檢查是否啟動成功:
打開瀏覽器訪問此機器的 IP,如果瀏覽器出現(xiàn) Welcome to nginx! 則表示 Nginx 已經(jīng)安裝并運行成功。
部分命令如下:
重啟:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
測試配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t
強制關閉:
$ pkill nginx
1.7配置
以上安裝方法nginx的配置文件位于
/usr/local/nginx/conf/nginx.confNginx配置文件常見結構的從外到內依次是「http」「server」「location」等等,缺省的繼承關系是從外到內,也就是說內層塊會自動獲取外層塊的值作為缺省值。
1.7.1 Server
接收請求的服務器需要將不同的請求按規(guī)則轉發(fā)到不同的后端服務器上,在 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 相應的設置,轉發(fā)到不同的后端服務器上。
這里的 listen 指監(jiān)聽端口,server_name 用來指定IP或域名,多個域名對應統(tǒng)一規(guī)則可以空格分開,index 用于設定訪問的默認首頁地址,root 指令用于指定虛擬主機的網(wǎng)頁跟目錄,這個地方可以是相對地址也可以是絕對地址。
通常情況下我們可以在 nginx.conf 中配置多個server,對不同的請求進行設置。就像這樣:
server {listen 80;server_name host1;root html;index index.htmlindex.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的文件都包含進去啦。
1.7.2 Localtion
每個 url 請求都會對應的一個服務,nginx 進行處理轉發(fā)或者是本地的一個文件路徑,或者是其他服務器的一個服務路徑。而這個路徑的匹配是通過 location 來進行的。我們可以將 server 當做對應一個域名進行的配置,而 location 是在一個域名下對更精細的路徑進行配置。
以上面的例子,可以將root和index指令放到一個location中,那么只有在匹配到這個location時才會訪問root后的內容:
location / {
- root /data/www/host2;
- index index.html index.htm;
}
1.7.3 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結尾的請求.# 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.[ configuration D ]}請求:/ -> 符合configuration A/documents/document.html -> 符合configuration B/images/1.gif -> 符合configuration C/documents/1.jpg ->符合 configuration D
1.7.4 靜態(tài)文件映射
訪問文件的配置主要有 root 和 aliasp’s 兩個指令。這兩個指令的區(qū)別容易弄混:
alias
alias后跟的指定目錄是準確的,并且末尾必須加 /。
location /c/ {alias /a/;}
root
root后跟的指定目錄是上級目錄,并且該上級目錄下要含有和location后指定名稱的同名目錄才行。
location /c/ {root /a/;}
如果你需要將這個目錄展開,在這個location的末尾加上「autoindex on; 」就可以了
轉發(fā)
配置起來很簡單比如我要將所有的請求到轉移到真正提供服務的一臺機器的 8001 端口,只要這樣:
location / {proxy_pass 172.16.1.1:8001;}
這樣訪問host時,就都被轉發(fā)到 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 中我們就實現(xiàn)了在四臺機器的反向代理加負載均衡。其中的 ip_hash 指明了我們均衡的方式是按照用戶的 ip 地址進行分配。另外還有輪詢、指定權重輪詢、fair、url_hash幾種調度算法。
1.7.5 總結
以上是最簡單的通過 nginx 實現(xiàn)靜態(tài)文件轉發(fā)、反向代理和負載均衡的配置。在 nginx 中所有的功能都是通過模塊來實現(xiàn)的,比如當我們配置 upstream 時是用 upstream 模塊,而 server 和 location 是在 http core 模塊,其他的還有流控的 limt 模塊,郵件的 mail 模塊,https 的 ssl 模塊。他們的配置都是類似的可以再 nginx 的模塊文檔中找到詳細的配置說明。
安裝所需環(huán)境
Nginx 是 C語言 開發(fā),建議在 linux 上運行,當然,也可以安裝 windows 版本,本篇則使用 CentOS 7 作為安裝環(huán)境。
一. gcc 安裝
安裝 nginx 需要先將官網(wǎng)下載的源碼進行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:
yum install gcc-c++
二. PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫。nginx也需要此庫。命令:
yum install -y pcre pcre-devel
三. zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。
yum install -y zlib zlib-devel
四. OpenSSL 安裝
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應用程序供測試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。
yum install -y openssl openssl-devel
官網(wǎng)下載
1.直接下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
2.使用wget命令下載(推薦)。確保系統(tǒng)已經(jīng)安裝了wget,如果沒有安裝,執(zhí)行 yum install wget 安裝。
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
我下載的是1.12.0版本,這個是目前的穩(wěn)定版。
解壓
依然是直接命令:
tar -zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0
配置
其實在 nginx-1.12.0 版本中你就不需要去配置相關東西,默認就可以了。當然,如果你要自己配置目錄也是可以的。
1.使用默認配置
./configure
2.自定義配置(不推薦)
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/conf/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi
注:將臨時文件目錄指定為/var/temp/nginx,需要在/var下創(chuàng)建temp及nginx目錄
編譯安裝
make make install
查找安裝路徑:
whereis nginx
啟動、停止nginx
cd /usr/local/nginx/sbin/ ./nginx ./nginx -s stop ./nginx -s quit ./nginx -s reload 啟動時報80端口被占用: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
解決辦法:1、安裝net-tool 包:yum install net-tools
./nginx -s quit:此方式停止步驟是待nginx進程處理任務完畢進行停止。./nginx -s stop:此方式相當于先查出nginx進程id再使用kill命令強制殺掉進程。
查詢nginx進程:
ps aux|grep nginx
重啟 nginx
1.先停止再啟動(推薦):
對 nginx 進行重啟相當于先停止再啟動,即先執(zhí)行停止命令再執(zhí)行啟動命令。如下:
./nginx -s quit ./nginx
2.重新加載配置文件:
當 ngin x的配置文件 nginx.conf 修改后,要想讓配置生效需要重啟 nginx,使用-s reload不用先停止 ngin x再啟動 nginx 即可將配置信息在 nginx 中生效,如下:
./nginx -s reload
啟動成功后,在瀏覽器可以看到這樣的頁面:
開機自啟動
即在rc.local增加啟動代碼就可以了。
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
設置執(zhí)行權限:
chmod 755 rc.local
到這里,nginx就安裝完畢了,啟動、停止、重啟操作也都完成了,當然,你也可以添加為系統(tǒng)服務,我這里就不在演示了。