nignx
1.?? 什么是nginx
Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬并發鏈接,并且cpu、內存等資源消耗卻非常低,運行非常穩定。
2.?? 應用場景
1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
2、虛擬主機??梢詫崿F在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。
3.?? nginx安裝
下載nginx:
?
官方網站:
http://nginx.org/
使用的版本是1.8.0版本。
?
Nginx提供的源碼。
1.1. 要求的安裝環境
1、需要安裝gcc的環境。yum install gcc-c++
2、第三方的開發包。
n? PCRE
?????? PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。
n? zlib
?????? zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
yum install -y zlib zlib-devel
?
n? openssl
?????? OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。
?????? nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
yum install -y openssl openssl-devel
?
1.2. 安裝步驟
?
第一步:把nginx的源碼包上傳到linux系統
第二步:解壓縮
[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz
第三步:使用configure命令創建一makeFile文件。
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/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
注意:啟動nginx之前,上邊將臨時文件目錄指定為/var/temp/nginx,需要在/var下創建temp及nginx目錄
[root@localhost sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
?
?
1.3. 啟動nginx
進入sbin目錄
[root@localhost sbin]# ./nginx
?
關閉nginx:
[root@localhost sbin]# ./nginx -s stop
推薦使用:
[root@localhost sbin]# ./nginx -s quit
?
重啟nginx:
1、先關閉后啟動。
2、刷新配置文件:
[root@localhost sbin]# ./nginx -s reload
?
1.4. 訪問nginx
?
默認是80端口。
注意:是否關閉防火墻。
?
2.?? 配置虛擬主機
就是在一臺服務器啟動多個網站。
如何區分不同的網站:
1、域名不同
2、端口不同
?
2.1. 通過端口區分不同虛擬機
Nginx的配置文件:
/usr/local/nginx/conf/nginx.conf
?
| ? #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; ?#Html是nginx安裝目錄下的html目錄 ??????? location / { ??????????? root?? html; ??????????? index? index.html index.htm; ??????? } ??? } } ? |
可以配置多個server,配置了多個虛擬主機。
?
添加虛擬主機:
| ? #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; ??????? } ??? } ??? server { ??????? listen????? ?81; ??????? server_name? localhost; ? ??????? #charset koi8-r; ? ??????? #access_log? logs/host.access.log? main; ? ??????? location / { ????????? ??root? ?html-81; ??????????? index? index.html index.htm; ??????? } ??? } } ? |
重新加載配置文件
[root@localhost nginx]# sbin/nginx -s reload
?
?
2.2. 通過域名區分虛擬主機
2.2.1.??? 什么是域名
域名就是網站。
www.baidu.com
www.taobao.com
www.jd.com
Tcp/ip
?
Dns服務器:把域名解析為ip地址。保存的就是域名和ip的映射關系。
一級域名:
Baidu.com
Taobao.com
Jd.com
二級域名:
www.baidu.com
Image.baidu.com
Item.baidu.com
三級域名:
1.Image.baidu.com
Aaa.image.baidu.com
?
一個域名對應一個ip地址,一個ip地址可以被多個域名綁定。
?
本地測試可以修改hosts文件。
修改window的hosts文件:(C:\Windows\System32\drivers\etc)
可以配置域名和ip的映射關系,如果hosts文件中配置了域名和ip的對應關系,不需要走dns服務器。
?
4.??? Nginx的配置
#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;}}server {listen 81;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html-81;index index.html index.htm;}}server {listen 80;server_name www.taobao.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html-taobao;index index.html index.htm;}}server {listen 80;server_name www.baidu.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html-baidu;index index.html index.htm;}} }?
?
5. 什么是反向代理
正向代理
反向代理
返回代理服務器不提供服務器。也是請求的轉發。
?
6. Nginx實現反向代理
兩個域名指向同一臺nginx服務器,用戶訪問不同的域名顯示不同的網頁內容。
兩個域名是www.sian.com.cn和www.sohu.com
nginx服務器使用虛擬機192.168.101.3?
?
?
?
第一步:安裝兩個tomcat,分別運行在8080和8081端口。
第二步:啟動兩個tomcat。
第三步:反向代理服務器的配置
upstream tomcat1 {server 192.168.25.148:8080;}server {listen 80;server_name www.sina.com.cn;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://tomcat1; index index.html index.htm;}}upstream tomcat2 {server 192.168.25.148:8081;}server {listen 80;server_name www.sohu.com;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://tomcat2; index index.html index.htm;}}第四步:nginx重新加載配置文件
第五步:配置域名
在hosts文件中添加域名和ip的映射關系
192.168.25.148 www.sina.com.cn
192.168.25.148 www.sohu.com
7.?? 負載均衡
?
如果一個服務由多條服務器提供,需要把負載分配到不同的服務器處理,需要負載均衡。
?upstream tomcat2 {
?????? server 192.168.25.148:8081;
?????? server 192.168.25.148:8082;
? }
?
可以根據服務器的實際情況調整服務器權重。權重越高分配的請求越多,權重越低,請求越少。默認是都是1
?
?
upstream tomcat2 {server 192.168.25.148:8081;server 192.168.25.148:8082 weight=2;}?
?
8.?? Nginx的高可用(了解)
要實現nginx的高可用,需要實現備份機。
?
1.1. 什么是負載均衡高可用
?????? nginx作為負載均衡器,所有請求都到了nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。
?????? 為了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監控程序,通過傳送諸如“I am alive”這樣的信息來監控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP并繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。
?
?
?
1.2. keepalived+nginx實現主備
1.2.1.??? 什么是keepalived
?????? keepalived是集群管理中保證集群高可用的一個服務軟件,用來防止單點故障。
????? Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,并將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。
?
1.2.2.??? keepalived工作原理
?????? keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。
?????? 虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(VIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
?????? keepalived主要有三個模塊,分別是core、check和VRRP。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現VRRP協議的。
?
詳細參考:Keepalived權威指南中文.pdf
?
1.2.3.??? keepalived+nginx實現主備過程
?
初始狀態
?
主機宕機
?
主機恢復
?
1.2.4.??? 高可用環境
兩臺nginx,一主一備:192.168.101.3和192.168.101.4
兩臺tomcat服務器:192.168.101.5、192.168.101.6
?
?
1.2.5.??? 安裝keepalived
?
?????? 分別在主備nginx上安裝keepalived,參考“安裝手冊”進行安裝:
?
轉載于:https://www.cnblogs.com/huangjuncong/p/8034523.html
總結
- 上一篇: [CentOS7] 常用工具 之 差异备
- 下一篇: 函数atof,atoi,atol,str