NGINX的应用整理(虚拟主机+反向代理+负载均衡)

NGINX的综合设置

图片关注上方浩道Linux,回复资料,即可获取海量Linux、Python网络通信、网络安全等学习资料!

前言

大家好,这里是浩道Linux,主要给大家分享Linux、Python、网络通信、网络安全等相关的IT知识平台。

 

浩道Linux
浩道,专注工作与实践的一名IT民工。本号主要分享linux,python,网络通信、安全等相关IT干货。相聚在此,通过分享知识与经验,一起成长。
176篇原创内容

 

今天浩道跟大家分享关于Nginx相关的硬核干货,通过本文,大家可以一次性撸完Nginx相关的知识,本文将会从Nginx理论知识去给大家讲讲其相关概念,其次带大家进行源码安装部署Nginx,最后结合Nginx实用场景去做实验部署演示,加深对其功能的理解,全文涵盖基于IP的多虚拟机主机实战配置、基于域名的多虚拟主机实战配置、基于端口的多虚拟主机实战配置、反向代理实战配置、负载均衡实战配置、动静分离实战配置、高可用实战配置。本文篇幅较长,近2万字,大家还没时间看的话,可以收藏随时学习,当然,大家要是能够点赞,转发支持下,我会高兴一整天的!
一、Nginx介绍
(一)Nginx诞生背景
Nginx (engine x) 是一个高性能的HTTP和反向代理的web服务器,同时也提供了POP3/SMTP/IMAP。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx是一款轻量级的Web 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
(二)Nginx相关概念
1、WEB服务器
WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。
2、HTTPHTTP是超文本传输协议的英文缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。
3、POP3/SMTP/IMAP服务

POP3(Post Offic Protocol 3)邮局协议的第三个版本;

SMTP(Simple Mail Transfer Protocol)简单邮件传输协议;

IMAP(Internet Mail Access Protocol)交互式邮件存取协议;

通过以上协议,不难看出,Nginx也可以作为电子邮件代理服务器。
4、反向代理与反向代理相对立的是正向代理,所以很有必要先搞清楚什么是正向代理,这样才能更好去理解反向代理。
(1)正向代理我们把一个局域网以外的互联网想象成一个巨大的资源库,此时如果局域网中的客户端要访问互联网,则需要通过代理服务器去访问,这种代理服务就称为正向代理。如当前国内用户需要访问谷歌网站,此时就需要在客户端浏览器中设置代理服务器后,通过该代理服务器才能进行谷歌网站的访问。如下拓扑所示:图片1)如拓扑所示,局域网内的用户是作为客户端的代表,如果需要访问局域网外的外部服务器,往往客户端是不能直接访问到的,此时就需要借助一台可以访问外部服务器的服务器进行访问,即要借助图中的代理服务器进行访问。正向代理正常访问流程是:客户端把请求发给代理服务器,由代理服务器将客户端请求转发给外部服务器,外部服务器处理客户端请求后将数据转发给代理服务器,再由代理服务器转发给客户端。可以说整个流程客户端是清楚外部标服务器的地址的,但是外部服务器是不清楚来自客户端的请求,它只知道来自哪个代理服务器,所以正向代理可以说是屏蔽或隐藏客户端的相关信息。
(2)反向代理在反向代理中,我们同样以一个拓扑展开,如下图所示:图片1)如拓扑所示,用户作为客户端,此时对于代理服务器以及真实服务器来说就是外部网络了。客户端对于代理服务器是没有感知的,因为此时客户端不需要任何配置就可以访问所需要访问的资源。反向代理正常访问流程是:客户端将请求发送到代理服务器,由代理服务器去选择目标服务器(真实服务器)获取资源后,再返回给客户端,但是此时代理服务器和真实服务器对客户端来说就是一个整体的服务器,暴露的是代理服务器的地址,隐藏了真实的服务器地址。而nginx就常用做这样的代理服务器,称为反向代理服务器。5、负载均衡我们知道客户端访问服务器资源的大概流程是:客户端发送多个请求到服务器,服务器收到请求后,进行处理相关请求,有一些请求可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。但是我们应该能够想得到,随着业务飞涨,服务器访问量增多、并发量大的时候,就很容易造成服务器由于压力过大,处理不过来,导致服务器崩溃。而如果解决服务器资源紧张的问题,第一个能够想到的无非就是加大服务器的硬件配置,如加大CPU、内存等配置。但是这种方法会造成金钱消耗过大不说,也会随着业务量会不断扩大硬件配置,有这诸多限制。有没有其它方法应对这种情况呢?此时集群的解决方案出来了,单个服务器没有办法处理这么多请求,就增加服务器数量进行处理,即通过将客户端请求转发到多台服务器上进行处理。相对于将客户端请求转发到单台服务器进行处理,这种方法是将客户端请求改为转发到多台服务器上,也就是将负载分发到了不同的服务器,起到了缓解服务器资源的作用,被称为负载均衡。6、动静分离为加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析,这样就加快了解析速度,同样可以降低原来单个服务器的压力。这种把动态资源和静态资源分开部署的方式就称为动静分离。7、高可用(三)Nginx优点大家可以自行去了解对比当前比较主流的WEB服务器,如Apache、Microsoft-IIS、google Servers、Nginx、Tomcat等等,就会得出Nginx具有不可替代的优势。以下是它比较突出的几个优点:1、速度更快、并发更高Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。2、配置简单,扩展性强Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。3、高可靠性Nginx采用的是多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。4、支持热部署当前互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。5、成本低、BSD许可证BSD是一个开源的许可证,世界上的开源许可证有很多,现在比较流行的有六种分别是GPL、BSD、MIT、Mozilla、Apache、LGPL。Nginx本身是开源的,我们不仅可以免费的将Nginx应用在商业领域,而且还可以在项目中直接修改Nginx的源码来定制自己的特殊要求。这些点也都是Nginx为什么能吸引无数开发者继续为Nginx来贡献自己的智慧和青春。OpenRestry [Nginx+Lua] Tengine[淘宝]。
(四)Nginx功能特性及常用功能
Nginx提供的基本功能服务从大体上归纳为:基本HTTP服务、高级HTTP服务、邮件服务等三大类。

1、Nginx功能特性

(1)基于HTTP服务的功能特性

Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。

1)处理静态文件、处理索引文件以及支持自动索引;2)提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载均衡和容错;3)提供对FastCGI、memcached等服务的缓存机制,,同时完成负载均衡和容错;4)使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI以及图像缩放等。其中针对包含多个SSI的页面,经由FastCGI或反向代理,SSI过滤器可以并行处理;5)支持HTTP下的安全套接层安全协议SSL.;

6)支持基于加权和依赖的优先权的HTTP/2;

(2)基于高级HTTP服务的功能特性

1)支持基于名字和IP的虚拟主机设置;2)支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接;3)自定义访问日志格式、带缓存的日志写操作以及快速日志轮转;4)提供3xx~5xx错误代码重定向功能;5)支持重写(Rewrite)模块扩展;6)支持重新加载配置以及在线升级时无需中断正在处理的请求;7)支持网络监控;

8)支持FLV和MP4流媒体传输;

(3)基于邮件服务的功能特性

Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下特性:1)支持IMPA/POP3代理服务功能;

2)支持内部SMTP代理服务功能;

2、Nginx常用功能

(1)静态资源部署
(2)反向代理(3)负载均衡
(4)高可用

(5)WEB缓存

二、Nginx软件安装

(一)环境准备

需要声明为了实验顺利进行,减少排查时间。以下相关实验关闭了防火墙服务进行,大家如果不关防火墙,可以自行添加相关的端口策略。

(二)源码下载

进入Ngnix官方进行相关版本源代码的下载。

官网地址如下:

http://nginx.org

打开官网后,找到download,即可进入到版本下载页面,如下图所示:

 

图片

图片

 

下载方式1:

选择对应版本,点击即可通过浏览器下载。此方式将源代码压缩包下载到电脑本地,然后再通过连接工具传到linux系统。

 

下载方式2:

通过选择对应版本后,右键鼠标,选择“复制链接地址”,然后再linux系统中通过wget命令进行下载。如我这里选择最新的稳定版本nginx-1.20.2源码压缩包进行下载,最终下载命令为:

wget http://nginx.org/download/nginx-1.20.2.tar.gz

 

(三)Nginx软件源码安装进入Ngnix官方进行相关版本源代码的下载。我这里安装的是最新版本的稳定版。1、解决源代码安装时需要的依赖工具,主要包含有gcc编译工具、pcre库、zlib库、openssl库。(1)gcc编译工具Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。(2)pcre库Nginx在编译过程中需要使用到PCRE库(perl Compatible Regular Expressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。(3)zlib库zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel。(4)openssl库OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。

针对以上依赖工具的安装,可以通过yum进行安装即可,具体命令如下所示

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

2、下载Nginx源代码压缩包

上文已经给出具体下载方法,这里不做细说了。我已经成功下载好对应的压缩包。wget命令下载源代码如下:

wget http://nginx.org/download/nginx-1.20.2.tar.gz
下载完整如下:

图片

 

3、进入源代码目录,进行压缩包解压

具体解压命令如下:

tar -xzvf nginx-1.20.2.tar.gz
4、进入源代码解压后的文件目录

命令如下:

cd nginx-1.20.2
5、在源代码解压后的文件目录执行编译前的环境配置,包括安装路径等配置,具体命令如下所示
./configure --prefix=/opt/nginx \--sbin-path=/opt/nginx/sbin/nginx \--modules-path=/opt/nginx/modules \--conf-path=/opt/nginx/conf/nginx.conf \--error-log-path=/opt/nginx/logs/error.log \--http-log-path=/opt/nginx/logs/access.log \--pid-path=/opt/nginx/logs/nginx.pid \--lock-path=/opt/nginx/logs/nginx.lock

如果不知道./configure相关的环境配置参数指定,可以通过./configure --help命令进行查看,以下列出常见的参数意思:

./configure来对编译参数进行设置,需要我们手动来指定。那么都有哪些参数可以进行设置,接下来我们进行一个详细的说明。

PATH:是和路径相关的配置信息;

with:是启动模块,默认是关闭的;

without:是关闭模块,默认是开启的;

 

(1)--prefix=PATH

表示指向Nginx的安装目录,默认值为/usr/local/nginx   

(2)--sbin-path=PATH

表示指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx

(3)--modules-path=PATH

指向Nginx动态模块安装目录,默认值为<prefix>/modules

(4)--conf-path=PATH

表示指向配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf

(5)--error-log-path=PATH 

表示指向错误日志文件的路径,默认值为<prefix>/logs/error.log

(6)--http-log-path=PATH  

表示指向访问日志文件的路径,默认值为<prefix>/logs/access.log

(7)--pid-path=PATH

表示指向Nginx启动后进行ID的文件路径,默认值为<prefix>/logs/nginx.pid

(8)--lock-path=PATH

表示指向Nginx锁文件的存放路径,默认值为<prefix>/logs/nginx.lock

 

6、上步执行完成后,在该目录下进行编译及安装

具体编译及安装命令如下所示:

make && make install
7、进入到安装目录下启动nginx服务

按照上述./configure所配置的,切换到nginx所安装的目录下sbin二进制文件目录下,具体命令如下所示:

cd /opt/nginx/sbin/

执行启动nginx服务,命令如下所示:

./nginx
通过ps -ef |grep nginx 命令查看nginx相关服务进程已经起来,如下图所示:

图片

 

关闭系统防火墙后,可以通过在浏览器地址栏中输入:本机IP:80即可打开nginx默认访问页面,如下图所示:

 

到此已经成功通过源代码安装完成nginx。

 

8、配置nginx的PATH环境变量

(1)通过vi编辑器进行编辑/etc/profile文件,在该文件最后一行加上如下内容,保存。

export PATH=/opt/nginx/sbin:$PATH

注意与实际安装目录对应上即可。

(2)使环境变量生效。

source /etc/profile

 

 

 

 

(3)待环境变量生效后,此时就可以不用到安装目录下执行nginx命令了。

 

(四)Nginx软件yum方式安装1、打开nginx官网,根据官网中的文档指引进行yum源相关配置
打开官网后,进入到documentation菜单,如下图所示:

 

选择进入"Installing nginx"菜单,选择"Installation on Linux"对应栏,点击" packages"进入到linux系统下安装包指引页面,选择对应系统,如我选择"RHEL/CentOS",即可进入到yum源配置指引目录,如下图所示:

 

 

根据以上步骤即可进行yum源配置。最终执行安装命令即可,如下:

yum install -y nginx

这里就不进行安装演示了。

 

(五)Nginx软件卸载这里针对源代码进行安装nginx后卸载操作。具体步骤如下:1、需要将nginx的进程关闭
cd /opt/nginx/sbin/./nginx -s stop
2、将安装的nginx进行删除
rm -rf /opt/nginx

3、将安装包之前编译的环境清除掉,记住是进入到源代码解压后的目录执行以下命令。

make clean

 

通过以上操作即可卸载nginx,这里不进行演示。(六)Nginx常用命令这里针对在/opt/nginx/sbin/下执行相关的常用命令进行举例。具体如下:

1、查看安装的nginx版本命令

./nginx -V

2、启动nginx命令

./nginx

3、关闭nginx服务命令

./nginx -s stop

4、重新加载nginx服务

./nginx -s reload
5、检测nginx配置文件语法
./nginx -t

三、Nginx配置文件介绍

(一)Nginx配置文件结构

Nginx的配置文件位于安装目录下的conf目录中,通过ls -l命令查看,其配置文件结构如下所示:

[root@haodaolinux1 conf]# ls -ltotal 40-rw-r--r-- 1 mysql mysql 1077 Nov 16 22:44 fastcgi.conf-rw-r--r-- 1 mysql mysql 1007 Nov 16 22:44 fastcgi_params-rw-r--r-- 1 mysql mysql 2837 Nov 16 22:44 koi-utf-rw-r--r-- 1 mysql mysql 2223 Nov 16 22:44 koi-win-rw-r--r-- 1 mysql mysql 5231 Nov 16 22:44 mime.types-rw-r--r-- 1 mysql mysql 2656 Nov 16 22:44 nginx.conf-rw-r--r-- 1 mysql mysql  636 Nov 16 22:44 scgi_params-rw-r--r-- 1 mysql mysql  664 Nov 16 22:44 uwsgi_params-rw-r--r-- 1 mysql mysql 3610 Nov 16 22:44 win-utf

1fastcgi.conf:该文件是fastcgi相关配置文件;

2、fastcgi_params:该文件是fastcgi的参数配置文件;

3、koi-utf、koi-win、win-utf:这三个文件都是与编码转换映射相关的 配置文件,用来将一种编码转换成另一种编码;

4、mime.types:该文件记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系;

5、nginx.conf:该文件是Nginx的核心配置文件,这个文件非常重要,几乎nginx的功能实现都是基于该文件进行配置;

6、scgi_params:该文件是scgi的参数配置文件;

7、uwsgi_params:该文件是uwsgi的参数配置文件;(二)Nginx核心配置文件介绍

Nginx的核心配置文件是nginx.conf,如我这里的配置文件具体路径是:

/opt/nginx/conf/nginx.conf

通过cat  /opt/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;
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; # } #}
}
1、nginx.conf核心配置文件结构特点

nginx.conf文件默认内容还是比较长的,但是把#开头的注释行去掉,我们发现其内容也不是很多,并且通过这些内容,可以得出以下一些特点。

(1)全局块配置区域:该区域配置主要设置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;

 

(2)events块配置区域:该区域主要设置Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大,如下内容所示:

events {    worker_connections  1024;}

 

(3)http块配置区域:该区域作为Nginx服务器配置中的重要部分,平时配置的代理、缓存、日志记录、第三方模块等配置都是在该区域中进行。http块中可以配置多个server块,每个server块又可以配置多个location块。如下内容所示:

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; #} }

2、nginx.conf核心配置文件语法

通过nginx.conf配置文件的内容中,大概得出其语法主要是以下几点构成:(1)配置文件以#进行注释;(2)配置文件以指令和指令块组成;(3)配置文件每一行语句由指令和指令值组成,并且要以分号;结束该行语句;(4)配置文件指令块中可以以大括号{}再组织多个指令块;(5)配置文件支持通过$变量值进行变量的引用;(6)配置文件支持通过include语句,引用新建的其它配置文件;(7)配置文件中的部分指令支持正则表达式;

 

五、基于IP的多虚拟主机实战配置
一)虚拟主机概念
虚拟主机指的是一台运行在因特网上的服务器主机分成了多台虚拟的主机,每台虚拟主机是一个独立的站点,虚拟主机可以具有独立的IP,独立的域名,独立的服务端口,具有完整的Intemet服务器功能,如www服务、邮件服务、FTP服务等。而nginx提供了在一台机器上,同时运行多个网站的功能。同一台主机上的虚拟主机之间是完全独立的。从用户来看,每一台虚拟主机和一台独立的主机完全一样。
(二)多虚拟主机应用场景
nginx的多虚拟主机可以基于多IP的形式、基于多域名的形式、多端口的形式。正因为有了nginx的多虚拟主机,我们就可以不用为了运行一个网站服务,而单独配置一个nginx服务器了。大大释放了服务器资源。
(三)基于IP的多虚拟主机实战配置

1、环境准备

(1)如下拓扑所示

             199    ================================  199站点下面内容

       在一台服务器上面实现:         200        ====================                           200站点下面内容

               201        ================                    201站点下面内容

 

1)当用户访问192.168.3.199时,返回的是/haodao_nginx/nginx199站点下的内容;2)当用户访问192.168.3.200时,返回的是/haodao_nginx/python200站点下的内容;3)当用户访问192.168.3.201时,返回的是/haodao_nginx/linux201站点下的内容;

(2)为单网卡虚拟机添加多个IP地址

我这里是在一台虚拟机上进行实验,即一个网卡只有一个IP地址,当前网卡名为:eno16777736,IP地址为192.168.3.199,子网掩码为24位。

通过以下命令为网卡名为eno16777736临时再添加两个地址:

ip addr add 192.168.3.200/24 dev eno16777736ip addr add 192.168.3.201/24 dev eno16777736
通过ip addr |grep eno*命令查看添加后的地址如下图所示:

 

 

 

(3)根据拓扑信息,建立三个站点目录,通过以下命令进行:

mkdir -p /haodao_nginx/nginx245

mkdir -p /haodao_nginx/python246

mkdir -p /haodao_nginx/linux247

(4)建立基于3个站点的网站内容,通过以下命令进行:

echo "这里是浩道的nginx245站点!!!" > /haodao_nginx/nginx245/index.html

echo "这里是浩道的python246站点!!!" > /haodao_nginx/python246/index.html

echo "这里是浩道的linux247站点!!!" > /haodao_nginx/linux247/index.html

 

2、修改nginx.conf配置文件

(1)在nginx.conf文件中的http块添加多个server{}标签,使得nginx支持基于多IP的虚拟主机,返回多个站点内容:
    server {        listen      192.168.3.199:80;        server_name  localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/nginx199; 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; }
}
server { listen 192.168.3.200:80; server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/python200; 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; }
}
server { listen 192.168.3.201:80; server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/linux201; 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; }
}
每一个server{}改动点如图所示:

# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 192.168.8.245:80;
server_name localhost;
charset utf-8;

location / {
root /haodao_nginx/nginx245;
index index.html index.htm;
}
}
server {
listen 192.168.8.246:80;
server_name localhost;
charset utf-8;

location / {
root /haodao_nginx/python246;
index index.html index.htm;
}
}
server {
listen 192.168.8.247:80;
server_name localhost;
charset utf-8;

location / {
root /haodao_nginx/linux247;
index index.html index.htm;
}
}

 

 

 

 

 

 

(2)检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

(3)重启nginx服务

nginx -s stopnginx

 

3、验证实验配置结果

通过浏览器访问个站点地址,验证实验结果:

 

 

(1)打开浏览器,地址栏输入192.168.3.199后访问到如下内容,如图所示:

 

(2)打开浏览器,地址栏输入192.168.3.200后访问到如下内容,如图所示:

 

(3)打开浏览器,地址栏输入192.168.3.201后访问到如下内容,如图所示:

 

 

 

根据实际访问结果,验证基于IP的多虚拟主机实验配置成功。

 

六、基于域名的多虚拟主机实战配置(一)虚拟主机概念虚拟主机指的是一台运行在因特网上的服务器主机分成了多台虚拟的主机,每台虚拟主机是一个独立的站点,虚拟主机可以具有独立的IP,独立的域名,独立的服务端口,具有完整的Intemet服务器功能,如www服务、邮件服务、FTP服务等。而nginx提供了在一台机器上,同时运行多个网站的功能。同一台主机上的虚拟主机之间是完全独立的。从用户来看,每一台虚拟主机和一台独立的主机完全一样。(二)多虚拟主机应用场景nginx的多虚拟主机可以基于多IP的形式、基于多域名的形式、多端口的形式。正因为有了nginx的多虚拟主机,我们就可以不用为了运行一个网站服务,而单独配置一个nginx服务器了。大大释放了服务器资源。(三)基于域名的多虚拟主机实战配置

1、环境准备

(1)如下拓扑所示

www.haodaonginx.com      ===============/haodao_nginx/haodaonginx

在一台服务器上面设置多域名:www.haodaopython.com ===============================/haodao_nginx/haodaopython站点下的内容

www.haodaolinux.com =======================/haodao_nginx/haodaolinux

1)当用户访问www.haodaonginx.com时,返回的是/haodao_nginx/haodaonginx站点下的内容

2)当用户访问www.haodaopython.com时,返回的是/haodao_nginx/haodaopython站点下的内容

3)当用户访问www.haodaolinux.com时,返回的是/haodao_nginx/haodaolinux站点下的内容

 

2、配置DNS域名解析,使得访问上述相关域名时,可以正确解析到192.168.3.199的IP
(1)linux环境下进行配置
1)可以使用DNS服务器的方式实现;2)基于/etc/hosts文件进行解析;

以下实验基于/etc/hosts文件进行解析,通过vim /etc/hosts编辑该文件,追加如下信息,具体配置如下:

192.168.3.199   www.haodaonginx.com192.168.3.199   www.haodaopython.com192.168.3.199   www.haodaolinux.com

 

 
(2)windows环境下进行配置这里是为方便在windows中通过浏览器进行访问而做的配置:1)基于C:\Windows\System32\drivers\etc\hosts文件进行解析;

通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:

192.168.3.199   www.haodaonginx.com192.168.3.199   www.haodaopython.com192.168.3.199   www.haodaolinux.com
C:\Windows\System32\drivers\etc

 

192.168.8.245 www.haodaonginx.com
192.168.8.245 www.haodaopython.com
192.168.8.245 www.haodaolinux.com

 

 
3、根据拓扑信息,建立三个站点目录,通过以下命令进行:
mkdir -p /haodao_nginx/haodaonginx

mkdir -p /haodao_nginx/haodaopython

mkdir -p /haodao_nginx/haodaolinux
4、建立基于3个站点的网站内容,通过以下命令进行:
echo "这里是浩道的www.haodaonginx.com站点!!!" > /haodao_nginx/haodaonginx/index.html

echo "这里是浩道的www.haodao.python站点!!!" > /haodao_nginx/haodaopython/index.html

echo "这里是浩道的www.haodaolinux站点!!!" > /haodao_nginx/haodaolinux/index.html

 

5、修改nginx.conf配置文件

(1)在nginx.conf文件中的http块添加多个server{}标签,使得nginx支持基于多域名的虚拟主机,返回多个站点内容

    server {        
listen 80;

server_name www.haodaonginx.com;

charset utf-8;
#access_log logs/host.access.log main;
location / {
root /haodao_nginx/haodaonginx;

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; }
}
server { listen 80; server_name www.haodaopython.com;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/haodaopython; 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; }
}
server { listen 80; server_name www.haodaolinux.com;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/linux201; 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; }
}

 

将第一个server注释掉,添加如下的server,每一个server{}改动点如图所示:

 

server {
listen 80;
server_name www.haodaonginx.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root /haodao_nginx/haodaonginx;
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; }
}
server {
listen 80;
server_name www.haodaopython.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root /haodao_nginx/haodaopython;
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; }
}
server {
listen 80;
server_name www.haodaolinux.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root /haodao_nginx/haodaolinux;
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; }
}

 

 

 

 

 

(2)检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

(3)重启nginx服务

nginx -s stopnginx

 

6、验证实验配置结果

(1)在linux环境下通过浏览器访问个站点地址,验证实验结果:由于我linux服务器没有安装图形桌面,因此没有办法用浏览器访问的方式进行验证,但是可以通过linux命令curl进行验证,如下图所示:

 

 

 

 

 

 

根据实际访问结果,验证基于域名的多虚拟主机实验配置成功。
(2)在windows环境下通过浏览器访问进行验证,这里留给大家自行验证,结果差不多的!

 

 
七、基于端口的多虚拟主机实战配置
(一)虚拟主机概念虚拟主机
指的是一台运行在因特网上的服务器主机分成了多台虚拟的主机,每台虚拟主机是一个独立的站点,虚拟主机可以具有独立的IP,独立的域名,独立的服务端口,具有完整的Intemet服务器功能,如www服务、邮件服务、FTP服务等。而nginx提供了在一台机器上,同时运行多个网站的功能。同一台主机上的虚拟主机之间是完全独立的。从用户来看,每一台虚拟主机和一台独立的主机完全一样。
(二)多虚拟主机应用场景
nginx的多虚拟主机可以基于多IP的形式、基于多域名的形式、多端口的形式。正因为有了nginx的多虚拟主机,我们就可以不用为了运行一个网站服务,而单独配置一个nginx服务器了。大大释放了服务器资源。
(三)基于端口的多虚拟主机实战配置

1、环境准备

(1)如下拓扑所示

80=========================80port

8081=======================8081port

8090=======================8090port

1)当用户访问192.168.3.199:80时,返回的是/haodao_nginx/nginx80port站点下的内容

2)当用户访问192.168.3.199:8081时,返回的是/haodao_nginx/python8081port站点下的内容

3)当用户访问192.168.3.199:8090时,返回的是/haodao_nginx/linux8090port站点下的内容

 

(2)根据拓扑信息,建立三个站点目录,通过以下命令进行:

mkdir -p /haodao_nginx/nginx80port

mkdir -p /haodao_nginx/python8081port

mkdir -p /haodao_nginx/linux8090port

 

(3)建立基于3个站点的网站内容,通过以下命令进行:

echo "这里是浩道的nginx80port站点!!!" > /haodao_nginx/nginx80port/index.html

echo "这里是浩道的python8081port站点!!!" > /haodao_nginx/python8081port/index.html

echo "这里是浩道的linux8090port站点!!!" > /haodao_nginx/linux8090port/index.html

 

2、修改nginx.conf配置文件

(1)在nginx.conf文件中的http块添加多个server{}标签,使得nginx支持基于多端口的虚拟主机,返回多个站点内容

    server {        listen      80;        server_name  localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/nginx80port; 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; }
}
server { listen 8081; server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/python8081port; 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; }
}
server { listen 8090; server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/linux8090port; 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; }
}
每一个server{}改动点如图所示:

server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/nginx80port; 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; }
}
server {
listen 8081;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/python8081port; 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; }
}
server {
listen 8090;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / { root /haodao_nginx/linux8090port; 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; }
}

 

 

 

 

 

 

(2)检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

(3)重启nginx服务

nginx -s stopnginx
3、验证实验配置结果

通过浏览器访问个站点地址,验证实验结果:

 

(1)打开浏览器,地址栏输入192.168.3.199:80后访问到如下内容,如图所示:

 

 

(2)打开浏览器,地址栏输入192.168.3.199:8081后访问到如下内容,如图所示:

 

 

(3)打开浏览器,地址栏输入192.168.3.199:8090后访问到如下内容,如图所示:

 

 

 

 

 

根据实际访问结果,验证基于端口的多虚拟主机实验配置成功。
八、反向代理实战配置
(一)反向代理概念
与反向代理相对立的是正向代理,所以很有必要先搞清楚什么是正向代理,这样才能更好去理解反向代理。
1、正向代理
我们把一个局域网以外的互联网想象成一个巨大的资源库,此时如果局域网中的客户端要访问互联网,则需要通过代理服务器去访问,这种代理服务就称为正向代理。如当前国内用户需要访问谷歌网站,此时就需要在客户端浏览器中设置代理服务器后,通过该代理服务器才能进行谷歌网站的访问。如下拓扑所示:

 

1)如拓扑所示,局域网内的用户是作为客户端的代表,如果需要访问局域网外的外部服务器,往往客户端是不能直接访问到的,此时就需要借助一台可以访问外部服务器的服务器进行访问,即要借助图中的代理服务器进行访问。
正向代理正常访问流程是:客户端把请求发给代理服务器,由代理服务器将客户端请求转发给外部服务器,外部服务器处理客户端请求后将数据转发给代理服务器,再由代理服务器转发给客户端。可以说整个流程客户端是清楚外部标服务器的地址的,但是外部服务器是不清楚来自客户端的请求,它只知道来自哪个代理服务器,所以正向代理可以说是屏蔽或隐藏客户端的相关信息。
2、反向代理在反向代理中,我们同样以一个拓扑展开,如下图所示:

 

1)如拓扑所示,用户作为客户端,此时对于代理服务器以及真实服务器来说就是外部网络了。客户端对于代理服务器是没有感知的,因为此时客户端不需要任何配置就可以访问所需要访问的资源。
反向代理正常访问流程是:客户端将请求发送到代理服务器,由代理服务器去选择目标服务器(真实服务器)获取资源后,再返回给客户端,但是此时代理服务器和真实服务器对客户端来说就是一个整体的服务器,暴露的是代理服务器的地址,隐藏了真实的服务器地址。
而nginx就常用做这样的代理服务器,称为反向代理服务器。
(二)反向代理实战配置1

本实例主要是演示Nginx常用也是最简单的反向代理,通过小试牛刀让大家加深对反向代理服务器的理解。实验拓扑如下图所示:

 

 

如拓扑所示,客户端的访问流程如下:客户端想要访问真实服务器站点192.168.3.199:8888的资源,但是由于客户端事先不知道并且也不能直接访问到该资源,所以客户端通过浏览器访问www.haodaotomcat.com,实际是将请求转发到了反向代理服务器192.168.3.199:80,再由反向代理服务器将客户端请求发送给真实服务器站点,真实服务器站点进行处理及响应

1、环境准备

(1)客户端主机配置好域名解析,使得在客户端主机浏览器上通过访问www.haodaotomcat.com,能够直接解析到192.168.3.199,我客户端在windows环境,现在通过修改相关配置文件,配置IP与域名的映射关系,配置如下:

1)基于C:\Windows\System32\drivers\etc\hosts文件进行解析;

通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:

192.168.3.199  www.haodaotomcat.com
确保客户端ping通www.haodaotomcat.com,如下图所示:

 

 

(2)真实服务器站点的tomcat环境准备好,这里主要是安装配置tomcat相关操作,如我配置好相关操作,能够访问到的真实服务器站点如下:

 

 

 

(3)反向代理服务器环境准备,这里主要是准备并且配置好反向代理服务器,使得反向代理服务器能够将客户端请求转发给真实服务器站点。具体配置如下所示:

1)修改nginx配置文件nginx.conf,在nginx.conf文件中的http块修改server{}标签相关配置。如下所示:

    server {        listen      80;        server_name  192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location / { root html; proxy_pass http://192.168.3.199:8888; 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; }
}
改动点如下图所示:

 

 

 

2)检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

3)重启nginx服务

nginx -s stopnginx

(4)验证实验配置结果,客户端通过浏览器访问站点资源www.haodaotomcat.com,返回结果如下图所示,说明反向代理服务器配置成功。

 


(二)反向代理实战配置2

本实例主要是演示Nginx常用的反向代理,实现客户端通过访问的URL资源中,反向代理服务器能够根据URL中相关包含路径匹配,跳转到真实服务器站点具体某个端口对应的服务器。实验拓扑如下图所示:

 

 

 

如拓扑所示,客户端的访问流程如下:客户端访问URL如:
http://www.haodaolinux.com:8090/linux/linux.html
此时就直接跳转到真实服务器站点192.168.3.199:8888;客户端访问URL如:
http://www.haodaolinux.com:8090/python/python.html
此时就直接跳转到真实服务器站点192.168.3.199:9999;

1、环境准备

 

(1)客户端主机配置好域名解析,使得在客户端主机浏览器上通过访问www.haodaolinux.com,能够直接解析到192.168.3.199,我客户端在windows环境,现在通过修改相关配置文件,配置IP与域名的映射关系,配置如下:

1)基于C:\Windows\System32\drivers\etc\hosts文件进行解析;

通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:

192.168.3.199  www.haodaolinux.com
确保客户端ping通www.haodaotomcat.com,如下图所示:

 

 

(2)真实服务器站点的tomcat环境准备好,这里准备两个tomcat服务器,对应端口分别为8888和9999,主要是安装配置tomcat相关操作,如我配置好相关操作,能够访问到的真实服务器站点如下:

 

 

 

(3)反向代理服务器环境准备,这里主要是准备并且配置好反向代理服务器,使得反向代理服务器能够将客户端请求转发给真实服务器站点。具体配置如下所示:
1)修改nginx配置文件nginx.conf,在nginx.conf文件中的http块修改server{}标签相关配置。如下所示:
 server {        listen      8090;        server_name  192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location ~ /linux/ { proxy_pass http://192.168.3.199:8888; }
location ~ /python/ { proxy_pass http://192.168.3.199:9999; }
#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; }
    }
主要改动点如下图所示:

 

 

这里location配置中的URI变量包含了正则表达式,常用正则表达式有如下:

1、= :  用于不包含正则表达式的URI前,必须与指定的模式精确匹配;

2、~ :用于表示当前URI中包含了正则表达式,并且区分大小写;

3、~*:  用于表示当前URI中包含了正则表达式,并且不区分大小写;

4、^~: 用于不包含正则表达式的URI前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了;

5、/:通用匹配,如果没有其它匹配,任何请求都会匹配到;

2)检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

3)重启nginx服务

nginx -s stopnginx

 

(4)验证实验配置结果,客户端通过浏览器访问如下站点资源:
http://www.haodaolinux.com:8090/linux/linux.html

此时返回结果如下图所示,说明反向代理服务器配置成功。

 

 

 

 

(5)验证实验配置结果,客户端通过浏览器访问如下站点资源:
http://www.haodaolinux.com:8090/python/python.html
此时返回结果如下图所示,说明反向代理服务器配置成功。

 

九、负载均衡实战配置(一)负载均衡概念
我们知道客户端访问服务器资源的大概流程是:客户端发送多个请求到服务器,服务器收到请求后,进行处理相关请求,有一些请求可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。但是我们应该能够想得到,随着业务飞涨,服务器访问量增多、并发量大的时候,就很容易造成服务器由于压力过大,处理不过来,导致服务器崩溃。而如果解决服务器资源紧张的问题,第一个能够想到的无非就是加大服务器的硬件配置,如加大CPU、内存等配置。但是这种方法会造成金钱消耗过大不说,也会随着业务量会不断扩大硬件配置,有诸多限制。有没有其它方法应对这种情况呢?此时集群的解决方案出来了,单个服务器没有办法处理这么多请求,就增加服务器数量进行处理,即通过将客户端请求转发到多台服务器上进行处理。相对于将客户端请求转发到单台服务器进行处理,这种方法是将客户端请求改为转发到多台服务器上,也就是将负载分发到了不同的服务器,起到了缓解服务器资源的作用,被称为负载均衡。(二)负载均衡实战配置1

本实例主要是演示Nginx常用也是最简单的负载均衡配置,通过小试牛刀让大家加深对负载均衡的理解。实验拓扑如下图所示:

 

图片

 

如拓扑所示:客户端要访问资源链接如下:

http://www.haodaolinux.com:8090/linux/linux.html

通过配置Nginx负载均衡服务器,它会将客户端请求平均转发到真实服务器站点1和真实服务器站点2上。

1、环境准备

(1)客户端主机配置好域名解析,使得在客户端主机浏览器上通过访问www.haodaolinux.com,能够直接解析到192.168.3.199,我客户端在windows环境,现在通过修改相关配置文件,配置IP与域名的映射关系,配置如下:

1)基于C:\Windows\System32\drivers\etc\hosts文件进行解析;

通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:

192.168.3.199  www.haodaolinux.com
确保客户端ping通www.haodaotomcat.com,如下图所示:

图片

 

(2)真实服务器站点1和真实服务器站点2的tomcat环境准备好,这里准备两个tomcat服务器,对应端口分别为8888和9999,主要是安装配置tomcat相关操作,如我配置好相关操作,能够访问到的真实服务器站点如下:

图片

图片

 

(3)负载均衡服务器环境准备,这里主要是准备并且配置好负载均衡服务器,使得负载均衡服务器能够将客户端请求平均转发给真实服务器站点1和真实服务器站点2。具体配置如下所示:

1)修改nginx配置文件nginx.conf,在nginx.conf文件中的http块中添加、修改server{}标签相关配置。如下所示:

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;    upstream haodaoserver { server 192.168.3.199:8888; server 192.168.3.199:9999; } server { listen 8090; server_name 192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location / { proxy_pass http://haodaoserver; 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; }
}

 

主要改动点如下所示

 

图片

 

2、检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

3、重启nginx服务

nginx -s stopnginx

 

4、验证实验配置结果

通过浏览器访问站点地址,验证实验结果:

(1)打开浏览器,地址栏输入如下站点地址

http://www.haodaolinux.com:8090/linux/linux.html

 

返回结果,如下图所示:

 

图片

 

(2)刷新浏览器,返回结果,如下图所示:

 

图片

 

由此可见,负载均衡服务器客户端请求平均分摊转发给了两个不同端口号的tomcat服务器进行处理

 

但是负载均衡服务器是根据什么策略进行转发客户端请求的呢?(三)负载均衡转发策略
Nginx负载均衡是通过配置好转发策略,然后根据策略进行客户端请求的转发的,具体有以下几种常见策略。1、轮询策略

该转发策略是将每一个客户端请求按照时间顺序逐一分配到不同的真实服务器,这也是默认采用的一种转发策略,如我们实验中实际没有指定是采用哪种转发策略,所以就是采用了轮询策略。

 

但是要记住,如果某一个真实服务器挂掉了,负载均衡就会该该挂掉的服务器剔除,不进行请求的转发。

 

2、weight策略

即权重策略,weight默认权重为1,数字越大说明权重越大,也就是权重越大,被分配的客户端请求也就越多。

 

具体配置位置如下所示:

    upstream haodaoserver {        server 192.168.3.199:8888 weight=3;        server 192.168.3.199:9999 weight=10;    }

 

3、ip_hash策略

即ip_hash策略,将每一个客户端请求按照访问IP的hash结果进行分配,这种情况下,每一个客户端就固定访问一个真实服务器,很好解决了session问题。

 

具体配置位置如下所示:

    upstream haodaoserver {        ip_hash;        server 192.168.3.199:8888;        server 192.168.3.199:9999;    }

 

4、fair策略

该策略是根据真实服务器的响应时间来分配请求,哪个服务器响应时间短,就优先给它分配。

 

具体配置位置如下所示:

    upstream haodaoserver {        server 192.168.3.199:8888;        server 192.168.3.199:9999;        fair;    }

十、动静分离实战配置

(一)动静分离概念

为加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析,这样就加快了解析速度,同样可以降低原来单个服务器的压力。这种把动态资源和静态资源分开部署的方式就称为动静分离。Nginx的动静分离简单理解为将动态请求与静态请求分开,通俗讲就是Nginx主要用于处理静态页面,后端服务器如tomcat服务器用于处理动态页面。

(二)动静分离实战配置

本实例主要是演示Nginx常用也是最简单的动静分离配置,通过小试牛刀让大家加深对动静分离的理解。实验拓扑如下图所示:

 

图片

 

如拓扑所示:客户端要访问静态资源链接如下:

http://www.haodaolinux.com:8090/www/linux.html
http://www.haodaolinux.com:8090/image/logo.png

通过配置Nginx的动静分离,最终可以将静态资源请求转发到对应的静态资源服务器进行处理。

 

1、环境准备

(1)客户端主机配置好域名解析,使得在客户端主机浏览器上通过访问www.haodaolinux.com,能够直接解析到192.168.3.199,我客户端在windows环境,现在通过修改相关配置文件,配置IP与域名的映射关系,配置如下:

1)基于C:\Windows\System32\drivers\etc\hosts文件进行解析;

通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:

192.168.3.199  www.haodaolinux.com
确保客户端ping通www.haodaotomcat.com,如下图所示:

图片

 

(2)静态服务器资源准备,这里我在本机即192.168.3.199上规划一个目录存放静态资源文件。

静态html文件具体路径及内容如下:

/haodao_nginx/www/linux.html

内容为:

[root@haodaolinux1 www]# cat /haodao_nginx/www/linux.html <meta charset=utf-8>欢迎关注浩道linux !!!这是浩道的静态资源站点页面!

 

静态png文件具体路径及内容如下:

/haodao_nginx/image/logo.png

内容为:

图片

 

(3)动静分离服务器环境准备,这里主要是准备并且配置好动静分离服务器,使得动静分离服务器能够将静态资源请求转发给静态服务器处理,将动态资源请求转发给动态服务器进行处理。具体配置如下所示:

1)修改nginx配置文件nginx.conf,在nginx.conf文件中的http块中修改server{}标签相关配置。如下所示:

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 8090; server_name 192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location /www/ { root /haodao_nginx/; index index.html index.htm; } location /image/ { root /haodao_nginx/; } #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; }
}

 

主要改动点如下图所示

 

图片

 

2、检查nginx配置文件语法,确认语法无误,命令如下:

nginx -t

3、重启nginx服务

nginx -s stopnginx

 

4、验证实验配置结果

通过浏览器访问站点地址,验证实验结果:

(1)打开浏览器,地址栏输入如下站点地址

http://www.haodaolinux.com:8090/www/linux.html

返回结果如下图所示:

图片

 

(2)打开浏览器,地址栏输入如下站点地址

http://www.haodaolinux.com:8090/image/logo.png

返回结果如下图所示:

图片

 

这里没有动态资源进行访问演示,大家可以自行添加动态配置演示验证。通过添加上动态配置,可以成功实现Nginx的动静分离转发效果。

 

十一、Nginx高可用实战配置(一)Nginx高可用概念
众所周知,Nginx作为反向代理服务器时,它有可能运行过程出现宕机的情况,如果反向代理服务器出现挂机,就会导致后端服务器(如tomcat)无法被访问,这样整个服务就停掉了。所以就出现了高可用的概念,配置了Nginx高可用后,就可以避免此类问题的出现。Nginx的高可用实现方案就是配置了两台或更多台Nginx服务器,当主服务器宕机时,就会自动切换到备用服务器,从而保证服务的持续运行。Nginx的高可用配置需要借助其他工具keepalived来实现。在keepalived中配置一个虚拟IP,同时keepalived会定时检查主服务器的工作状态,该工作主要通过脚本实现。在主服务器正常工作时,虚拟IP就会映射到主服务器的IP,此时,虚拟IP对应的物理地址和主服务器IP对应的物理地址是相同的,所以访问虚拟IP即可访问主服务器。当主服务器失效时,脚本就会监测到,从而根据预先配置好的参数,找到优先级最高的备用服务器,并将虚拟IP映射到该备用服务器的IP,此时,这两个IP对应的物理地址是相同的。在主服务器恢复复到正常状态时,又会被脚本检测到,此时又会自动切换到主服务器。这样就实现了Nginx的高可用。(二)Nginx实战配置

本实例主要是演示Nginx常用也是最经典的高可用配置,通过小试牛刀让大家加深对Nginx高可用的理解。实验拓扑如下图所示:

 

图片

如拓扑所示:客户端要访问资源链接如下:

http://192.168.3.88:8090/linux/linux.html
http://192.168.3.88:8090/python/python.html

通过配置Nginx高可用服务器,它会确保在Nginx主服务器挂机时,将客户端请求转发到后端服务器tomcat上。

 

1、环境准备

(1)两台Nginx服务,分别作为主服务器和备用服务器,这里对应主服务器地址为192.168.3.199,备用服务器地址为192.168.3.172;

(2)两台tomcat服务器,作为后端服务器,这里tomcat1开启的端口号为8888,tomcat2开启的端口号为9999,主要是安装配置tomcat相关操作,如我配置好相关操作,能够访问到的真实服务器站点如下:

 

图片

 

图片

(3)主服务器上与备用服务器上配置Nginx反向代理参数

1)修改主服务器上nginx配置文件nginx.conf

在nginx.conf文件中的http块修改server{}标签相关配置。如下所示:

server {        listen      8090;        server_name  192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location ~ /linux/ { proxy_pass http://192.168.3.199:8888; }
location ~ /python/ { proxy_pass http://192.168.3.199:9999; }
#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; }
}

主要改动点如下图所示:

图片

 

2)修改备用服务器上nginx配置文件nginx.conf,在nginx.conf文件中的http块修改server{}标签相关配置。如下所示:

server {        listen      8090;        server_name  192.168.3.172;
charset utf-8;
#access_log logs/host.access.log main;
location ~ /linux/ { proxy_pass http://192.168.3.199:8888; }
location ~ /python/ { proxy_pass http://192.168.3.199:9999; }
#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; }
}

 

主要改动点如下所示:

图片

 

(4)两台Nginx服务器安装keepalived软件。通过yum命令简单安装即可,具体命令如下:

yum -y install keepalived


(5)主服务器和备用服务器的高可用参数配置,主要在keepalived的配置文件中进行修改,其配置文件路径为:

/etc/keepalived/keepalived.conf

1)修改主服务器的/etc/keepalived/keepalived.conf配置文件

大概内容如下所示:

[root@haodaolinux1 keepalived]# cat keepalived.confglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.3.199   smtp_connect_timeout 30   router_id 127.0.0.1}
vrrp_script check_nginx { script "/haodao_nginx/nginx_check.sh" interval 2 weight 2}
vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.3.88 }
track_script { check_nginx }}

2)修改备用服务器的/etc/keepalived/keepalived.conf配置文件

大概内容如下所示:

[root@huanghao-1 keepalived]# cat keepalived.confglobal_defs {   notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.3.199   smtp_connect_timeout 30   router_id 127.0.0.1}
vrrp_script check_nginx { script "/haodao_nginx/nginx_check.sh" interval 2 weight 2}
vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 51 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.3.88 }
track_script { check_nginx }}

 

3)主服务器上新建/haodao_nginx/nginx_check.sh脚本文件

内容如下所示:

#!/usr/bin/bashnum=`ps -C nginx --no-header | wc -l`if [ $num -eq 0 ];then        /opt/nginx/sbin/nginx        sleep 2        if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then                killall keepalived        fifi

4)备用服务器上新建/haodao_nginx/nginx_check.sh脚本文件

内容如下所示:

#!/usr/bin/bashnum=`ps -C nginx --no-header | wc -l`if [ $num -eq 0 ];then        /opt/nginx/sbin/nginx        sleep 2        if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then                killall keepalived        fifi

(6)主服务器上备用服务器上开启nginx服务及keepalived服务

1)主服务器上开启nginx服务,命令如下:

nginx

2)主服务器上开启keepalived服务,命令如下:

systemctl start keepalived.service

3)备用服务器上开启nginx服务,命令如下:

nginx

4)备用服务器上开启keepalived服务,命令如下:

systemctl start keepalived.service

 

2、验证实验配置结果

(1)待主服务器上与备用服务器上nginx服务、keepalived服务正常跑起通过浏览器访问个站点地址,验证实验结果:

1)打开浏览器,地址栏输入如下地址:

http://192.168.3.88:8090/linux/linux.html
后访问到如下内容,如图所示:

图片

 

2)打开浏览器,地址栏输入如下地址:

http://192.168.3.88:8090/python/python.html

后访问到如下内容,如图所示:

图片

 

(2)将主服务器上的keepalived服务,nginx服务分别停止,模拟主服务器nginx服务挂掉,命令如下:

systemctl stop keepalived.service
nginx -s stop

通过浏览器访问个站点地址,验证实验结果:

1)打开浏览器,地址栏输入如下地址:

http://192.168.3.88:8090/linux/linux.html

后访问到如下内容,如图所示:

图片

 

2)打开浏览器,地址栏输入如下地址:

http://192.168.3.88:8090/python/python.html

后访问到如下内容,如图所示:

图片

 

通过以上两种不同条件下进行实验,访问结果没有受到影响,说明Nginx的高可用配置发挥了作用,确保了主服务器挂掉后,切换到了备用服务器继续向客户端提供反向代理服务,保障后端服务器的正常收到请求并且响应请求。

十二、总结本文通过理论结合实验,带大家一起学习了Nginx相关知识体系。可以说关于Nginx相关实验场景,通过实验都给大家进行了部署演示。当然,要将Nginx吃透,还得靠大家自行去深究。文章篇幅较长,大家没来得及消化的话,可以进行收藏学习喔~

更多精彩

关注公众号浩道Linux

浩道Linux,专注于Linux系统的相关知识、网络通信网络安全Python相关知识以及涵盖IT行业相关技能的学习,理论与实战结合,真正让你在学习工作中真正去用到所学。同时也会分享一些面试经验,助你找到高薪offer,让我们一起去学习,一起去进步,一起去涨薪!期待您的加入~~~关注回复“资料”可免费获取学习资料(含有电子书籍、视频等)。

 

浩道Linux
浩道,专注工作与实践的一名IT民工。本号主要分享linux,python,网络通信、安全等相关IT干货。相聚在此,通过分享知识与经验,一起成长。
176篇原创内容

喜欢的话,记得点“赞”“在看”图片

浩道

创作不易,渴望一键三连。

收录于合集 #linux学习
 314
上一篇真的只为Linux运维命令面试题,建议看这些~
阅读 254
浩道Linux
 
 
写下你的留言
精选留言
  •  
    码字不易,尤其这种2万字肝文,想看看有几个友友看到底部的,顺手来个赞呗[机智]
     
     
  •  
    这就是7万字吗[旺柴]
     
     
    干就完了[悠闲]
     
已无更多数据
 
 
posted @ 2023-08-28 09:40  往事已成昨天  阅读(173)  评论(0编辑  收藏  举报