Nginx
1、什么是Nginx
Nginx
是⼀款⾼性能的 http 服务器/反向代理服务器及电⼦邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊⼽尔·⻄索夫(Igor Sysoev)所开发,官⽅测试 nginx 能够⽀撑 5 万并发(但实际上达到 3 万已经很好了),并且 cpu、内存等资源消耗却⾮常低,运行非常稳定。
1.1、Nginx的应用场景
- http 服务器。
Nginx 是⼀个 http 服务可以独⽴提供 http 服务。可以做网页静态服务器。
- 虚拟主机 。
可以实现在⼀台服务器虚拟出多个虚拟主机。
- 反向代理,负载均衡。
当⽹站的访问量达到⼀定程度后,单台服务器不能满⾜⽤户的请求时,需要⽤多台服务器集群可时以使⽤ nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载⾼宕机⽽某台服务器闲置的情况(也可以配置某台主机承受较大的访问)。
1.2、安装Nginx
为了环境兼容方便,我们这里采用 docker
来安装镜像使用,前提已安装并启动 docker
的服务。
- 搜索 nginx 镜像
docker search nginx
- 拉取 nginx 镜像
docker pull nginx
- 创建容器,设置端口映射、目录映射
# 在/root⽬录下创建nginx⽬录⽤于存储nginx数据信息,以及配置信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在conf/下创建nginx.conf⽂件,用于nginx的配置
vim nginx.conf
-
填充配置信息
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; # 其他的配置信息不用管,注意这个配置是指定之后的服务端口配置文件的地址和命名规范 include /etc/nginx/conf.d/*.conf; }
-
开启容器
docker run -id --name=c_nginx \ # 映射三个端口 -p 80:80 \ -p 81:81 \ -p 82:82 \ # 指定配置文件 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \ # 指定服务配置文件地址 -v $PWD/conf.d:/etc/nginx/conf.d \ # 日志文件地址 -v $PWD/logs:/var/log/nginx \ # 静态页面地址 -v $PWD/html:/usr/share/nginx/html \ nginx
1.3、配置一个服务映射测试nginx
-
在 conf.d 文件夹下添加
80.conf
配置文件server { listen 80; # 监听的端⼝ server_name localhost; # 域名或ip location / { # 访问路径配置 root /usr/share/nginx/html;# 根⽬录,这个目录已经和html目录进行了数据绑定 index index.html; # 默认⾸⻚,在html目录下创建一个index.html文件即可 } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } }
-
重启 nginx 的服务,加载当前的服务文件
服务启动完毕之后在浏览器中进行数据访问即可完成端口的映射。
2、静态网站的部署
静态页面只需要配置在 html
目录下即可,因为已经和容器完成了数据卷绑定,会自动的同步到容器中进行部署。
2.1、配置虚拟主机
虚拟主机,也叫“⽹站空间”,就是把⼀台运⾏在互联⽹上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极⼤的促进了⽹络技术的应⽤和普及。同时虚拟主机的租⽤服务也成了⽹络时代的⼀种新型经济形式。
-
上传静态页面数据
将需要展示的页面上传至
html
文件夹下面。 -
编写配置文件 port.conf
server { listen 81; # 监听的端⼝ server_name localhost; # 域名或ip location / { # 访问路径配置 root /usr/share/nginx/index;# 根⽬录 index index.html; # 默认⾸⻚ } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } } server { listen 82; # 监听的端⼝ server_name localhost; # 域名或ip location / { # 访问路径配置 root /usr/share/nginx/regist;# 根⽬录 index regist.html; # 默认⾸⻚ } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } }
-
访问测试
地址栏输⼊ http://虚拟机的IP地址/:81
可以看到首页面的信息。
地址栏输⼊ http://虚拟机的IP地址/:82
可以看到注册页面的信息。
2.2、域名绑定
-
什么是域名
域名(Domain Name),是由⼀串⽤“点”分隔的字符组成的Internet上某⼀台计算机或计算机组的名称,⽤于在数据传输时标识计算机的电⼦⽅位(有时也指地理位置,地理上的域名,指代有⾏政⾃主权的⼀个地⽅区域)。
域名是⼀个IP地址上有“⾯具” 。域名的⽬的是便于记忆和沟通的⼀组服务器的地址 (⽹站,电⼦邮件,FTP等)。域名作为⼒所能及难忘的互联⽹参与者的名称。域名按域名系统(DNS)的规则流程组成。在DNS中注册的任何名称都是域名。
域名⽤于各种⽹络环境和应⽤程序特定的命名和寻址⽬的。通常,域名表示互联⽹协议(IP)资源,例如⽤于访问因特⽹的个⼈计算机,托管⽹站的服务器计算机,或⽹站本身或通过因特⽹传送的任何其他服务。世界上第⼀个注册的域名是在 1985年1⽉ 注册的。
-
域名级别
-
顶级域名
⼀是国家顶级域名(national top-level domainnames,简称nTLDs),200多个国家都按照ISO3166国 家代码分配了顶级域名,例如中国是cn,美国是us,⽇本是jp等;
⼆是国际顶级域名(international top-level domain names,简称iTDs),例如表示⼯商企业的 .Com .Top,表示⽹络提供商的.net,表示⾮盈利组织的.org,表示教育的.edu,以及没有限制的中性域名等。但因为⾃2014年以来新顶级域名的发展,域名争议案件数量增⻓幅度越来越⼤ 。为加强域名管理,解决 域名资源的紧张,Internet协会、Internet分址机构及世界知识产权组织(WIPO)等国际组织经过⼴泛 协商, 在原来三个国际通⽤顶级域名:(com)的基础上,新增加了 `7`个国际通⽤顶级域名:**firm(公 司企业)**、**store(销售公司或企业)**、**Web(突出WWW活动的单位)**、**arts(突出⽂化、娱乐活动的 单位)**、**rec (突出消遣、娱乐活动的单位)**、**info(提供信息服务的单位)**、**nom(个⼈)**,并在世界范围 内选择新的注册机构来受理域名注册申请。
- ⼆级域名
⼆级域名是指顶级域名之下的域名,简单点来说就是加了一个分支, 例如:map.baidu.com
- 三级域名
三级域名⽤字⺟( A~Z,a~z,⼤⼩写等)、数字(0~9)和连接符(-)组成, 各级域名之间⽤实点(.)连接,三级域名的⻓度不能超过20个字符。如⽆特殊原因,建议采⽤申请⼈的英⽂名(或者缩 写)或者汉语拼⾳名 (或者缩写) 作为三级域名,以保持域名的清晰性和简洁性。
简单说就是在二级域名的基础上再加一个分支进入, 例如: item.map.baidu.com
- 域名与IP绑定
⼀个域名对应⼀个 ip 地址,⼀个 ip 地址可以被多个域名绑定。
2.3、本地域名解析
本地测试可以修改 hosts ⽂件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射关系,如果 hosts ⽂件中配置了域名和 ip 的对应关系,不需要⾛ dns 服务器。
在 hosts
文件中添加域名绑定信息,访问下面两个域名就会解析到虚拟机的IP地址,从而找到相应的服务映射。
192.168.188.128 www.beordie.com
192.168.188.128 www.yishun.com
-
修改配置文件 port.conf
server { listen 81; # 监听的端⼝ server_name www.beordie.com; # 绑定域名 .......... } server { listen 82; # 监听的端⼝ server_name www.yishun.com; # 绑定域名 .......... }
访问域名即可访问到具体的服务
3、 反向代理和负载均衡
3.1、反向代理
-
什么是反向代理
反向代理(Reverse Proxy)⽅式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部⽹络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为⼀个反向代理服务器。
-
图解正向代理和反向代理
正向代理
是针对于客户端的
反向代理
是针对服务器的
3.2、配置 tomcat
在 docker 中完成tomcat容器的配置
- 搜索tomcat镜像
docker search tomcat
-
拉取tomcat镜像
docker pull tomcat
-
创建容器,设置端口映射、目录映射
# 在/root⽬录下创建tomcat⽬录⽤于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcat
docker run -id --name=c_tomcat \ # 端口映射 -p 8080:8080 \ # 数据卷绑定 -v $PWD:/usr/local/tomcat/webapps \ tomcat
3.3、配置反向代理
在 nginx 的配置文件夹下面创建 tomcat.conf 配置文件并填充信息。
-
tomcat.conf
upstream tomcat-beordie{ server 192.168.188.128:8080; } server { listen 80; # 监听的端⼝ server_name www.beordie.com; # 域名或ip location / { # 访问路径配置 # root index;# 根⽬录 proxy_pass http://tomcat-beordie; index index.html index.htm; # 默认⾸⻚ } }
当浏览器访问
www.beordie.com
域名时会被解析到虚拟机,然后又被代理到192.168.188.128:8080
也就是tomcat的启动端口,从而实现反向代理。
3.4、 负载均衡
-
什么是负载均衡
负载均衡是建⽴在现有⽹络结构之上,它提供了⼀种廉价有效透明的⽅法扩展⽹络设备和服务器的带宽、 增加吞吐量、加强⽹络数据处理能⼒、提⾼⽹络的灵活性和可⽤性。
负载均衡,英⽂名称为Load Balance,其意思就是分摊到多个操作单元上进⾏执⾏,例如Web服务器、 FTP服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。
-
配置负载均衡
nginx 配置负载均衡很简单,只需要将要均衡的地址通过分号隔开的形式写在一起就可以了,会自动完成轮询的负载均衡。如果需要将某台主机的访问加大,可在后面添加
weight=2
来增大访问的频率。upstream tomcat-beordie { server 192.168.220.12:8080; server 192.168.220.12:8081 eight=2; server 192.168.220.12:8082; }
例如Web服务器、 FTP服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。