Nginx是俄羅斯的程序設計師Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的開源伺服器軟體,Nginx完全使用C語言編寫,可以作為一臺高性能的web伺服器、反向代理伺服器和郵件代理伺服器使用。
在高連接並發的場合,Nginx是Apache商業伺服器不錯的替代品。
Nginx的優點很多,總結起來就是:高並發下響應請求更快、低耦合設計帶來的高可擴展性、高可靠性、低內存消耗、高並發連接數、不間斷服務的熱部署、開放源碼等。
Nginx使用起來比較簡單,經過簡單的配置文件的修改,就可以將主機配置成一臺web伺服器、一臺反向代理伺服器或者是一臺郵件代理伺服器。
在配置Nginx反向代理伺服器之前,還是先來說說什麼是反向代理伺服器吧。
其實,反向代理伺服器可以類比為租房市場上的中介,客戶端或者瀏覽器就是房客,而web伺服器就是房東,當房客想找房的時候,由於種種原因,沒有直接去找房東,而是向中介諮詢,然後中介把手裡面合適的房源推給房客。
反向代理伺服器也是這樣,反向代理伺服器代理了多臺提供相同服務的web伺服器(web伺服器集群以提高伺服器的處理能力),當客戶端或者瀏覽器向web伺服器發送請求時,請求被發送到了反向代理伺服器上,反向代理伺服器再把請求轉發給代理的web伺服器中的某一臺,為客戶端服務。
為什麼叫反向代理呢?其實可以簡單理解為:反向代理伺服器為web伺服器服務的,典型用途是將防火牆後面的伺服器提供給Internet用戶訪問,還可以為後端的多臺伺服器提供負載平衡,或為後端較慢的伺服器提供緩衝服務;而代理是為客戶端服務的,典型用途是為在防火牆內的區域網客戶端提供訪問Internet的途徑,比如常見的VPN代理,還可以使用緩衝特性減少網絡使用率。
反向代理伺服器就是客戶端請求的調度者,對負載(工作任務,請求)進行平衡、分攤到每個Web伺服器,從而協同完成工作任務,這個過程就被稱之為負載均衡。通過配置Nginx反向代理伺服器,就能自然地實現負載均衡。
在正式安裝Nginx之前,還需要安裝Nginx的三個依賴庫:OpenSSL、PCRE和ZLib。其中,OpenSSL用於數據的加密,PCRE用於解析正則表達式,而ZLib用來進行文件的壓縮和解壓縮。gcc\g++編譯器用來進行編譯安裝也是必備的。
tips:這些庫的安裝包都可以在官網下載,其中有些連結試了wget用不了,需要的可以微信公眾號【德古拉的雜貨鋪】後臺發送「Nginx等安裝包」獲取。
1、gcc\g++編譯器安裝
sudo apt-get install gccsudo apt-get install g++sudo apt-get install build-essentialsudo apt-get install libtool2、PCRE庫源碼安裝
tar -zxvf pcre-8.39.tar.gzcd pcre-8.39/./configuremakesudo make install3、ZLib庫源碼安裝
tar -zxvf zlib-1.2.8.tar.gzcd zlib-1.2.8/./configuremakesudo make install4、OpenSSL庫源碼安裝
tar -zxvf openssl-1.0.1t.tar.gzcd openssl-1.0.1t/./configmakesudo make install5、Nginx源碼安裝
tar -zxvf nginx-1.10.1.tar.gzcd nginx-1.10.1/./configuremakesudo make install安裝好了之後就可以測試一下Nginx是否正確安裝了,默認情況下Nginx被安裝在目錄/usr/local/nginx下。
其中Nginx的配置文件存放在conf/nginx.conf中,bin命令是/sbin目錄下的nginx文件。
sudo /usr/local/nginx/sbin/nginx這時,Nginx會自動讀取配置文件/usr/loacl/nginx/conf/nginx.conf,並運行;
在瀏覽器搜索欄輸入本機的IP,就能看到「Welcome to nginx」,表示Nginx已經安裝並運行成功,此時默認配置為一臺簡單的web伺服器。
sudo /usr/local/nginx/sbin/nginx -s stopsudo /usr/local/nginx/sbin/nginx -s quitsudo /usr/local/nginx/sbin/nginx -s reload
Nginx反向代理伺服器的配置
配置反向代理伺服器需要修改Nginx的配置文件,配置文件中的層次關係大致如下:
main中主要是Nginx在運行時與具體業務功能無關的參數,比如工作進程數、運行身份等;
http提供http服務相關的參數,比如keepalive、gzip等;
server是http服務上支持若干虛擬機,每個虛擬機一個對應的server配置項,配置項裡包含該虛擬機相關的配置;
location是http服務中,某些特定的URL對應的一系列配置項;
mail是實現email相關的SMTP/IMAP/POP3代理時,共享的一些配置項,在這裡就不談了。
用上圖這樣一個配置實例來簡單介紹一下反向代理伺服器的配置方法。
反向代理伺服器代理了兩臺web伺服器,這兩臺web伺服器也可以使用Nginx進行配置,這裡就不談了,主要說一下反向代理伺服器的配置流程。
server_name對應的是瀏覽器訪問的域名:localhost;
當有用戶請求該域名時,代理伺服器會去location /中去尋找;
在location中設置代理:proxy url;
這裡的url可以是隨意的一個連結,通過這個url,代理伺服器去upstream模塊尋找web伺服器;
所有的web伺服器的地址都在upstream裡邊,默認情況下每個web伺服器被請求的機會均等,也可以設置權重weight修改訪問機率。
這樣,一臺Nginx反向代理伺服器就配置好了,當部署完成之後,通過瀏覽器訪問「localhost」,實際替瀏覽器服務的,會是兩臺web伺服器中隨機的一臺,機會均等。