java学习---Nginx 反向服务代理

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服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值