咱們生活的世界中,有的時候須要上網。咱們能夠瀏覽不少不少的網頁,這些網頁都是由一系列的程序組成,可是咱們是否想過,這些程序存儲在什麼地方呢?沒錯,這些程序都是存儲在一種名叫服務器的硬件上,好比咱們的電腦也是一種服務器,只不過咱們的我的電腦做爲服務器的話性能會比較低。咱們的網頁程序存儲在服務器硬件上,是否能夠隨意存儲呢?不是的,咱們須要在服務器硬件的操做系統中搭建一個服務器軟件,那麼這樣,有服務器軟件跟服務器硬件配合,才造成一個完整的服務器。服務器軟件有很是多,好比Apache、tomcat等等都是服務器軟件,而咱們今天要學習的Nginx也是一種服務器軟件之一。html
Nginx是一種服務器軟件,故而其最主要、最基本的功能固然是能夠與服務器硬件結合,讓程序員能夠將程序放在Nginx服務器上,將程序發佈出去,讓成千上萬的網民能夠瀏覽。除此以外,Nginx是一種高性能的HTTP和反向代理服務器,同時也是一個代理郵件服務器。也就是說,咱們Nginx上能夠發佈網站,也能夠實現負載均衡的功能,還能夠做爲郵件服務器實現收發郵件等功能。所謂的負載均衡是指,當同時有N多用戶訪問咱們服務器的時候,爲了減小服務器壓力,咱們須要將用戶分別引入各服務器,分擔服務器的壓力。java
首先說IIS, IIS服務器只能在Windows上運行,Windows服務器性能不如Linux— 類服務器。其次說Tomcat,Tomcat服務器面向的是Java語言,是一種重量級的服 務器,而Nginx是輕量級服務器,Tomcat與Nginx不具有可比性。最後,咱們講一 下Apache,Apache優勢很是多,好比穩定、幵源、跨平臺等等,可是Apache不支 持高併發。Nginx能支持處理百萬級的TCP鏈接,10萬以上的併發鏈接,而且是一 個很好的跨平臺服務器。linux
Nginx的主要優勢有能夠實現高併發、部署簡單、內存消耗少、成本低等等。nginx
Nginx的主要缺點有rewrite功能不夠強大,模塊沒有Apache的多。c++
本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。如果文章有不足之處,歡迎關注微信公衆號私信與我進行交流!程序員
新建壓縮包下載位置(可選)web
新建目錄 mkdir /usr/local/nginx_down 切換目錄 cd /usr/local/nginx_down
下載解壓 Nginx正則表達式
下載 wget http://nginx.org/download/nginx-1.14.0.tar.gz 解壓 tar -zxvf nginx-1.14.0.tar.gz 切換目錄 cd nginx-1.14.0
配置 Nginx算法
./configure --with-http_ssl_module
這樣會默認安裝nginx在 /usr/local/nginx 目錄,可使用--prefix=/usr/local/nginx
指定安裝位置。後端
若是須要HTTPS(SSL)的支持,須要指定參數--with-http_ssl_module
。
若是提示錯誤,那麼須要其它環境,請參考下面
安裝 make
yum -y install gcc automake autoconf libtool make
安裝 g++
yum -y install gcc gcc-c++
安裝 PCRE庫
yum -y install pcre pcre-devel
安裝 Zlib
yum -y install zlib zlib-devel
安裝 GD library
yum -y install gd-devel
安裝 openssl
yum -y install openssl openssl-devel
-y:跳過全部手動確認輸入
若是./configure
安裝成功,只須要再執行兩個命令:
make
make install
查看是否安裝成功
cd /usr/local/nginx
若是安裝成功,則會出現下列目錄:
conf html logs sbin
切換到sbin目錄
cd /sbin
啓動程序
./nginx
追加參數 -c
能夠指定配置文件。
在Linux操做系統下搭建Nginx服務器,不少時候會出現不一樣的錯誤,在此,咱們對搭建過程當中出現的錯誤進行一些總結。主要有這些類型:
防火牆問題,缺乏gc++,缺乏pcre、zlib等庫。
咱們有時候,用本身的計算機A想訪問國外的某個網站B,可是訪問不了,此時,有一臺中間服務器C能夠訪問國外的網站B,那麼,咱們能夠用本身的電腦訪問服務器C,經過C來訪問B這個網站。那麼這個時候,服務器C稱爲代理服務器,這種訪問方式叫作正向代理。正向代理有一個特色,就是咱們明確知道要訪問哪一個網站。再如,當咱們有一個服務器集中,而且服務器集羣中的每臺服務器的內容同樣的時候,一樣咱們要直接從我的電腦訪問到服務器集中的服務器的時候沒法訪問,且此時第三方服務器能訪問集羣,這個時候,我捫經過第三方服務器訪問服務器集羣的內容,可是此吋咱們並不知道是哪一臺服務器提供的內容,此時的代理方式稱爲反向代理。
當一臺服務器的單位時間內的訪問量越大的時候,服務器的壓力會越大。當一臺服務器壓力大得超過自身的承受能力的時候,服務器會崩潰。爲了不服務器崩潰,讓用戶有更好地體驗,咱們一般經過負載均衡的方式來分擔服務器的壓力。那麼什麼是負載均衡呢?是這樣,咱們能夠創建不少不少個服務器,這些服務器組成一個服務器集羣,而後,當用戶訪問咱們網站的時候,先訪問一箇中間服務器,再讓這個中間服務器在服務器集羣中選擇一個壓力較小的服務器,而後將該訪問請求引入該選擇的服務器。這樣,用戶的每次訪問,都會保證服務器集羣中的每一個服務器的壓力趨於平衡,分擔了服務器壓力,避免了服務器崩潰的狀況。
基於反向代理的原理實現負載均衡
Nginx 是一款能夠經過反向代理實現負載均衡的服務器,使用 Nginx 服務實現負載均衡的時候,用戶的訪問首先會訪問到 Nginx 服務器,而後 Nginx 服務器再從服務器集羣表中選擇壓力較小的服務器,而後將該訪問請求引向該服務器。若服務器集羣中的某個服務器崩潰,那麼從待選服務器列表中將該服務器刪除,也就是說一個服務器假如崩潰了,那麼 Nginx 就確定不會將訪問請求引入該服務器了。那麼下面,咱們經過實例來說解一下 Nginx 負載均衡的實現。
默認配置文件nginx.conf
很重要,咱們通常是新建一個配置文件,在啓動時指定加載。
[root@hostname conf]# ls //查看目錄 fastcgi.conf koi-win scgi_params fastcgi.conf.default mime.types scgi_params.default fastcgi_params mime.types.default uwsgi_params fastcgi_params.default nginx.conf uwsgi_params.default koi-utf nginx.conf.default win-utf [root@hostname conf]# touch fzjh.conf //新建負載均衡配置文件
編輯fzjh.conf
配置文件
vi fzjh.conf
worker_processes 1;#工做進程的個數,通常與計算機的cpu核數一致 events { worker_connections 1024;#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數) 併發 } http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream;#默認文件類型 sendfile on;#開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。 keepalive_timeout 65; #長鏈接超時時間,單位是秒 gzip on;#啓用Gizp壓縮 #服務器的集羣 upstream myproject { #服務器集羣名字 server 220.181.111.188:80 weight=1;#服務器配置 weight是權重的意思,權重越大,分配的機率越大。 server 42.121.252.58:80 weight=2; } #當前的Nginx的配置 server { listen 80; #監聽80端口,能夠改爲其餘端口 server_name localhost; ############## 當前服務的域名 location / { ##配置路徑/下實現負載均衡 proxy_pass http://myproject; ##對應哪一個服務器集羣 proxy_redirect default; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; #根目錄 } } }
咱們在nginx目錄下執行命令,啓動負載均衡
./sbin/nginx -c ./conf/fzjh.conf
而後嘗試訪問你的服務器,多訪問幾回,你會發現它會訪問2次csdn網站,1次百度。說明咱們的負載均衡已經部署完畢。
【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。如果文章有不足之處,歡迎關注微信公衆號私信與我進行交流!】
./sbin/nginx -s reload
1.查看nginx進程號
ps -ef|grep nginx
2.kill掉進程便可 (1709是第二列的進程號)
kill 1709
或者
killall -9 nginx
Upstream 模塊是 Nginx 服務器的一個重要模塊。 Upstream 模塊實如今輪詢和客戶端 iP 之間實現後端的負載均衡。經常使用的指令有 ip_hash指令、 server 指令和 upstream 指令等,下面咱們分別來說一下。
在負載均衡系統中,假如用戶在某臺服務器上登陸,那麼若是該用戶第二次請求的時候,由於咱們是負載均衡系統,每次請求都會從新定位到服務器集羣中的一個服務器,那麼此時若是將已經登陸服務器A的用戶再定位到其餘服務器,顯然不妥。故而,咱們能夠採用 ip_hash指令解決這個問題,若是客戶端請求已經訪問了服務器A並登陸,那麼第二次請求的時候,會將該請求經過哈希算法自動定位到該後端服務器中。下面咱們經過實例講解。
實例
此時不該該使用weight權重。
tp { .... upstream myproject { ip_hash; #實現會話跟蹤 server 140.205.140.234; server 61.135.169.125; } ....
upstream 指令主要是用於設置一組能夠在 proxy_pass 和 fastcgi_pass 指令中使用代理服務器,默認負載均衡方式爲輪詢。
負載均衡的實現方法除了可使用 Nginx服務器實現外,還能夠經過不少種方法來實現。負載均衡的核心就是創建一個服務器集羣,而後用戶首先訪問到第三方代理服務器,而後由代理服務器選擇一個集羣中的服務器,而後將請求引入選定的服務器。那麼代理服務器可使用多種方式來充當,故而實現負載均衡的方式也是多種。總的來講,負載均衡實現的方式分爲軟件實現和硬件實現兩種,若是中間的代理機構是硬件,那麼就是經過硬件設備來實現負載均衡的方式,若是中間的代理機構爲軟件,就是軟件實現負載均衡的方式。而其中,軟件又能夠是服務器軟件、系統軟件以及應用軟件等充當。
下面咱們簡單總結一下負載均衡不一樣實現方式的優缺點:
假如使用硬件的方式實現負載均衡,那麼中間的轉發機構就是硬件,這個時候運行的效率很是高,可是對應的成本也很是高。若是咱們採用軟件的方式來實現負載均衡,那麼中間的轉發機構就是軟件,這個時候,運行效率不如硬件,可是成本相對來講低得多。而使用Nginx服務器實現負載均衡,那麼就是經過軟件的方式來實現負載均衡,而且 Nginx自己支持高併發等。故而使用 Nginx服務器實現負載均衡,能大大節約企業的成本,而且因爲 Nginx是服務器軟件,其執行效率也是很是高。
location = /uri =開頭表示精確匹配,只有徹底匹配上才能生效。
location ^~ /uri ^~ 開頭對URL路徑進行前綴匹配,而且在正則以前。
location ~ pattern ~開頭表示區分大小寫的正則匹配。
location ~* pattern ~*開頭表示不區分大小寫的正則匹配。
location /uri 不帶任何修飾符,也表示前綴匹配,可是在正則匹配以後。
location / 通用匹配,任何未匹配到其它location的請求都會匹配到,至關於switch中的default。
1.獲取證書
得到SSL證書文件 1_www.domain.com_bundle.crt 和私鑰文件 2_www.domain.com.key
2.證書安裝
將域名 www.domain.com 的證書文件1_www.domain.com_bundle.crt 、私鑰文件2_www.domain.com.key保存到同一個目錄,例如/usr/local/nginx/conf目錄下。
3.配置conf
打開nginx.conf文件,找到nginx.conf的下段配置內容:
# HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
打開註釋,修改server_name爲綁定證書的域名(如:www.domain.com),修改ssl_certificate 爲 1_www.domain.com_bundle.crt,修改 ssl_certificate_key 爲 2_www.domain.com.key 便可。
4.HTTP自動跳轉HTTPS
對於用戶不知道網站能夠進行https訪問的狀況下,讓服務器自動把http的請求重定向到https。 在服務器這邊的話配置的話,能夠在頁面里加js腳本,也能夠在後端程序裏寫重定向,固然也能夠在web服務器來實現跳轉。
Nginx是支持rewrite的(只要在編譯的時候沒有去掉pcre) 在http的server裏增長rewrite ^(.*) https://$host$1 permanent;
這樣就能夠實現80進來的請求,重定向爲https了。
仍是在此配置文件中,加入下面一句:
server { listen 80; server_name localhost; rewrite ^(.*) https://$host$1 permanent; ...
本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。如果文章有不足之處,歡迎關注微信公衆號私信與我進行交流!