nginx编译安装,nginx静态资源访问和负载均衡的使用!
一、前言
今天這篇文章呢,主要是總結(jié)一下過年期間復(fù)習(xí)的nginx負(fù)載均衡一些配置簡單的實(shí)戰(zhàn)演示!
二、nginx的常見使用
這里我主要演示nginx的源碼安裝以及相應(yīng)的模塊安裝,然后講解一下負(fù)載均衡的原理并通過實(shí)戰(zhàn)來簡單演示,還有靜態(tài)資源的訪問(比如說圖片和視頻的訪問),關(guān)于什么是nginx,它是干什么用的,網(wǎng)上有很多介紹,這里我就不啰嗦了,我挑重點(diǎn)實(shí)戰(zhàn)來分享!
1、nginx以及相關(guān)模塊源碼安裝:
我們先進(jìn)行源碼所需要的模塊
-- nginx-1.13.7.tar.gz
-- openssl-1.1.0g.tar.gz
-- pcre-8.41.tar.gz
-- zlib-1.2.11.tar.gz
對應(yīng)下載地址:
(1)解壓nginx:
(2)解壓openssl:
(3)解壓pcre:
(4)解壓zlib:
(5)進(jìn)行配置,先進(jìn)入到nginx里面去,然后執(zhí)行下面語句:
./configure?--prefix=/usr/local/nginx? --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_secure_link_module? --with-http_stub_status_module --with-stream --with-pcre=/home/txp/share/nginx/pcre-8.41 --with-zlib=/home/txp/share/nginx/zlib-1.2.11? --with-openssl=/home/txp/share/nginx/openssl-1.1.0g然后直接make:
然后接著再sudo make install:
最終我們可以看到在/usr/local/nginx/目錄下看到安裝的nginx:
現(xiàn)在我們可以試著來運(yùn)行nginx,并進(jìn)行訪問(下面的訪問成功):
這里小結(jié)一下:
很多開源軟件的安裝步驟大概都差不多是下面這樣的套路(比如等下我們下面要安裝的模塊,也是這樣安裝的思路,所以這里就不造輪子了)
-- ./cofigure
-- make
--sudo make install
2、自己寫conf文件
在平時(shí)的開發(fā)過程中,主要我們要去配置它的conf文件夾下的nginx.conf文件
root@ubuntu:/usr/local/nginx#?ls client_body_temp??conf??fastcgi_temp? html??logs??proxy_temp??sbin??scgi_temp? uwsgi_temp這個(gè)文件原本內(nèi)容是:
#user??nobody; worker_processes??1;#error_log??logs/error.log; #error_log??logs/error.log??notice; #error_log??logs/error.log??info;#pid????????logs/nginx.pid;events?{worker_connections??1024; }http?{include???????mime.types;default_type??application/octet-stream;#log_format??main??'$remote_addr?-?$remote_user?[$time_local]?"$request"?'#??????????????????'$status?$body_bytes_sent?"$http_referer"?'#??????????????????'"$http_user_agent"?"$http_x_forwarded_for"';#access_log??logs/access.log??main;sendfile????????on;#tcp_nopush?????on;#keepalive_timeout??0;keepalive_timeout??65;#gzip??on;server?{listen???????80;server_name??localhost;#charset?koi8-r;#access_log??logs/host.access.log??main;location?/?{root???html;index??index.html?index.htm;}#error_page??404??????????????/404.html;#?redirect?server?error?pages?to?the?static?page?/50x.html#error_page???500?502?503?504??/50x.html;location?=?/50x.html?{root???html;}#?proxy?the?PHP?scripts?to?Apache?listening?on?127.0.0.1:80##location?~?\.php$?{#????proxy_pass???http://127.0.0.1;#}#?pass?the?PHP?scripts?to?FastCGI?server?listening?on?127.0.0.1:9000##location?~?\.php$?{#????root???????????html;#????fastcgi_pass???127.0.0.1:9000;#????fastcgi_index??index.php;#????fastcgi_param??SCRIPT_FILENAME??/scripts$fastcgi_script_name;#????include????????fastcgi_params;#}#?deny?access?to?.htaccess?files,?if?Apache's?document?root#?concurs?with?nginx's?one##location?~?/\.ht?{#????deny??all;#}}#?another?virtual?host?using?mix?of?IP-,?name-,?and?port-based?configuration##server?{#????listen???????8000;#????listen???????somename:8080;#????server_name??somename??alias??another.alias;#????location?/?{#????????root???html;#????????index??index.html?index.htm;#????}#}#?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;#????}#}}這里內(nèi)容比較多,我們現(xiàn)在自己來寫一個(gè)配置文件來實(shí)現(xiàn)nginx的訪問:
txp@ubuntu:/usr/local/nginx$?sudo?mkdir?demo_conf txp@ubuntu:/usr/local/nginx$?cd?demo_conf/ txp@ubuntu:/usr/local/nginx$?vim?demo_conf/demo.conf worker_processes?4;#進(jìn)程數(shù)量events{worker_connections?1024;#并發(fā)訪問數(shù)量} http{server?{listen?8888;#監(jiān)聽端口server_name?localhost;#服務(wù)器名稱client_max_body_size?100m;#訪問的數(shù)量大小location?/?{root?/usr/local/nginx/html/?#訪問這個(gè)本地服務(wù)器里面的這個(gè)html頁面}}}現(xiàn)在我們來看一下我們自己配置的是否成功,先把之前的nginx關(guān)閉掉:
./sbin/nginx?-s?stop然后再執(zhí)行這個(gè)配置文件:
./sbin/nginx?-c?demo_conf/demo.conf這里擴(kuò)展一下基礎(chǔ)知識(shí)點(diǎn):
Nginx 由配置文件中指定的指令控制的模塊組成。指令分為簡單指令和塊指令。一個(gè)簡單的指令由空格分隔的名稱和參數(shù)組成,并以分號(;)結(jié)尾。塊指令具有與簡單指令相同的結(jié)構(gòu),但不是以分號結(jié)尾,而是以大括號({和})包圍的一組附加指令結(jié)束。如果塊指令可以在大括號內(nèi)部有其他指令,則稱為上下文(例如:events,http,server 和 location)。配置文件中放置在任何上下文之外的偽指令都被認(rèn)為是主上下文。events 和 http 指令駐留在主上下文中,server 在 http 中的,而 location 在 http 塊中。
3、負(fù)載均衡、反向代理和靜態(tài)資源的訪問演示:
--反向代理原理(ReverseProxy):它是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,簡單來說就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,想要訪問必須通過代理,如下圖所示:
上圖中有兩個(gè)網(wǎng)關(guān),一個(gè)是nginx應(yīng)用層網(wǎng)關(guān),一個(gè)路由器硬件網(wǎng)關(guān),nginx和各服務(wù)器都是在同一個(gè)局域網(wǎng)里面;路由器它做了一個(gè)端口映射(nat)直接訪問到nginx,給人的感覺nginx就在公網(wǎng)上面;
注意這里的服務(wù)器對外不提供服務(wù)的,通過nginx代理來向外提供服務(wù);外面訪問的是公網(wǎng)ip,然后通過端口映射找到nginx
現(xiàn)在我們用nginx做代理配置(比如說我這里用143的這臺(tái)機(jī)器代理141這臺(tái)機(jī)器):
worker_processes?4;events{worker_connections?1024;} http{server?{listen?8888;server_name?localhost;client_max_body_size?100m;location?/?{root?/usr/local/nginx/html/;proxy_pass?http://192.168.29.141;}}}注意:141的那臺(tái)機(jī)器也安裝nginx了,然后當(dāng)我訪問143這臺(tái)機(jī)器的時(shí)候,其實(shí)訪問的是141這臺(tái)機(jī)器的內(nèi)容,這就是代理的使用了:
-- 負(fù)載均衡:從負(fù)載均衡四個(gè)字來看,肯定是用來減輕服務(wù)器的訪問壓力的;比如說當(dāng)一臺(tái)服務(wù)器的單位時(shí)間內(nèi)的訪問量越大時(shí),服務(wù)器壓力就越大,大到超過自身承受能力時(shí),服務(wù)器就會(huì)崩潰(比如每年雙十一活動(dòng),淘寶就使用了nginx的負(fù)載均衡的功能,不然當(dāng)天那么多的用戶活躍在淘寶上,服務(wù)器肯定吃不消啊!)。因此為了避免服務(wù)器崩潰,讓用戶有更好的體驗(yàn),我們通過負(fù)載均衡的方式來分擔(dān)服務(wù)器壓力。我們可以建立很多很多服務(wù)器,組成一個(gè)服務(wù)器集群,當(dāng)用戶訪問網(wǎng)站時(shí),先訪問一個(gè)中間服務(wù)器(也就是我們的nginx),在讓這個(gè)中間服務(wù)器在服務(wù)器集群中選擇一個(gè)壓力較小的服務(wù)器,然后將該訪問請求引入該服務(wù)器。如此以來,用戶的每次訪問,都會(huì)保證服務(wù)器集群中的每個(gè)服務(wù)器壓力趨于平衡,分擔(dān)了服務(wù)器壓力,避免了服務(wù)器崩潰的情況。
下面我演示負(fù)載均衡案例:
worker_processes?4;events{worker_connections?1024;} http{upstream?backend{server?192.168.29.142?weight=2;//weight表示權(quán)重server?192.168.29.141?weight=1;}server?{listen?8888;server_name?localhost;client_max_body_size?100m;location?/?{#???root?/usr/local/nginx/html/;#???????proxy_pass?http://192.168.29.141;proxy_pass?http://backend;}}}注意:權(quán)重表示被訪問的更多,這里由于我三臺(tái)機(jī)器都安裝了nginx,所以內(nèi)容顯示看不出什么不同之處來,其實(shí)142的機(jī)器被訪問了2次,141的機(jī)器被訪問了1次,我這里有三臺(tái)機(jī)器:141、142、143:
-- 訪問靜態(tài)資源(圖片和視頻)
這里我在143的機(jī)器上放了幾張圖片,然后在/usr/local/nginx目錄下創(chuàng)建了一個(gè)images文件夾,然后把143機(jī)器上的圖片copy到images下面來:
root@ubuntu:/usr/local/nginx#?ls client_body_temp??fastcgi_temp??images??proxy_temp??scgi_temp???vip_conf conf??????????????html??????????logs????sbin????????uwsgi_temproot@ubuntu:/usr/local/nginx#?mv?/home/txp/share/nginx/*.png?images/ root@ubuntu:/usr/local/nginx#?ls client_body_temp??fastcgi_temp??images??proxy_temp??scgi_temp???vip_conf conf??????????????html??????????logs????sbin????????uwsgi_temp root@ubuntu:/usr/local/nginx#?cd?images/ root@ubuntu:/usr/local/nginx/images#?ls 1.png??2.png??3.png然后進(jìn)行conf文件配置:
worker_processes?4;events{worker_connections?1024;} http{upstream?backend{server?192.168.29.142?weight=2;server?192.168.29.141?weight=1;}server?{listen?8888;server_name?localhost;client_max_body_size?100m;location?/?{#???root?/usr/local/nginx/html/;#???????proxy_pass?http://192.168.29.141;proxy_pass?http://backend;}location?/images/?{root?/usr/local/nginx/;}} }實(shí)現(xiàn)結(jié)果如下:
下面我在演示一下視頻訪問,同樣,我創(chuàng)建一個(gè)media目錄,然后把143機(jī)器上的test.mp4copy到media目錄來:
root@ubuntu:/usr/local/nginx#?mv?/home/txp/share/nginx/test.mp4??media/ root@ubuntu:/usr/local/nginx#?cd?media/ root@ubuntu:/usr/local/nginx/media#?ls test.mp4conf文件配置:
worker_processes?4;events{worker_connections?1024;} http{upstream?backend{server?192.168.29.142?weight=2;server?192.168.29.141?weight=1;}server?{listen?8888;server_name?localhost;client_max_body_size?100m;location?/?{#???root?/usr/local/nginx/html/;#???????proxy_pass?http://192.168.29.141;proxy_pass?http://backend;}location?/images/?{root?/usr/local/nginx/;}location?~\.(mp3|mp4)?#這里利用了正則表達(dá)式root?/usr/local/nginx/media/;}} }結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的nginx编译安装,nginx静态资源访问和负载均衡的使用!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【工具】音乐播放相关工具,音乐文件格式转
- 下一篇: 【进展】温度监测报警器(系统)作品项目快