目录
目标试验一 通过浏览器输入地址www.123.com,跳转到Tomcat页面。
目标试验二 使用nginx反向代理,根据访问的路径跳转到不同的端口的服务中。
基础概念
正向代理
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
* 在客户端(浏览器)通过配置代理服务器,通过代理服务器进行互联网访问。
反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
* 我们的客户端想要访问我们的Tomcat服务器,这里并不是直接访问的Tomcat服务器,而是发送请求到反向代理服务器,反向代理服务器再转发到Tomcat服务器中去。这里服务器对外暴露的是反向代理的端口和ip,并不是Tomcat的,即隐藏了真实服务器的IP地址。即从客户端的角度来看,并不知道有反向代理服务器的存在,客户端以为访问的就是Tomcat服务器。
负载均衡
单个服务器解 决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们 所说的负载均衡。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。
静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。
动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。
* 把我们的动静资源分开进行部署,然后根据请求的不同,转发至对应的动静服务器中去。
Nginx测试
nginx安装
这里我们直接安装仓库源里面的Nginx,yum install -y nginx,通过yum安装nginx,配置文件是/etc/nginx/nginx.conf,查看nginx的相关log,在/var/log/nginx/下,有使用日志和error日志。
启动Nginx
[root@master1 ~]# nginx
[root@master1 ~]# ps -ef |grep nginx
root 15132 1 0 15:18 ? 00:00:00 nginx: master process nginx
nginx 15133 15132 0 15:18 ? 00:00:00 nginx: worker process
nginx 15134 15132 0 15:18 ? 00:00:00 nginx: worker process
nginx 15135 15132 0 15:18 ? 00:00:00 nginx: worker process
nginx 15136 15132 0 15:18 ? 00:00:00 nginx: worker process
root 15138 2918 0 15:18 pts/0 00:00:00 grep --color=auto nginx
[root@master1 ~]#
Nginx常用命令
启动Nginx: nginx
停止Nginx: nginx -s stop
重新启动nginx: nginx -s reload
nginx的配置文件
路径:
[root@master1 ~]# ls /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
主要由三部分组成
- 全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
worker process:表示nginx处理并发的数量,根据机器限制而不同。
2. event块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
worker_connections:表示每个 work process 支持的最大连接数为 1024
3. http块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 需要注意的是:http 块也可以包括 http 全局块、server 块。
①、http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
(1)全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
(2)location 块
一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
反向代理
目标试验一 通过浏览器输入地址www.123.com,跳转到Tomcat页面。
关闭防火墙
通过yum安装Tomcat,yum install -y tomcat tomcat-webapps tomcat-admin-webapps
目标流程示意图:
步骤:
先添加Windows的HOSTS对应的域名关系,C:\Windows\System32\drivers\etc\hosts
这样8080可以访问,而80端口无法访问
然后在/etc/nginx/nginx.conf中添加
重启nginx,最终访问成功
补充:关于proxy_pass的说明
-
语法: proxy_pass URL;
-
场景: location, if in location, limit_except
-
说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。
-
详见官方文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
目标试验二 使用nginx反向代理,根据访问的路径跳转到不同的端口的服务中。
nginx监听端口为9001
例如:
访问http://192.168.64.150:9001/edu/ 直接跳转到192.168.64.150:8080
访问http://192.168.64.150:9001/vod/ 直接跳转到192.168.64.150:8081
通过不同的HTML文件来区别不同的端口是否跳转成功
步骤:
首先创建两个文件夹,分别表示两个不同的服务器目录,然后把Tomcat的安装包放到两个目录中
[root@master1 nginx]# ls -l
总用量 0
drwxr-xr-x 2 root root 6 8月 2 16:24 nginx8080
drwxr-xr-x 2 root root 6 8月 2 16:24 nginx8081
先启动8080的Tomcat
再启动8081的Tomcat,因为安装包中Tomcat默认的端口会跟8080启动的冲突,所以启动之前,我们需要修改跟之前启动的8080不同,不然会报端口冲突的错误。
默认 <Server port="8005" shutdown="SHUTDOWN">
修改 <Server port="8015" shutdown="SHUTDOWN">
默认 <Connector port="8080" protocol="HTTP/1.1"
修改 <Connector port="8081" protocol="HTTP/1.1"
默认 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改 <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
然后启动跟上面的一样。查看两个Tomcat监听的端口
然后启动跟上面的一样。查看两个Tomcat监听的端口
[root@master1 bin]# ss -anput |grep 8080
tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=20722,fd=47))
[root@master1 bin]# ss -anput |grep 8081
tcp LISTEN 0 100 [::]:8081 [::]:* users:(("java",pid=21125,fd=47))
因为这个Tomcat项目的位置在webapps下,所以我们分别在这个目录下创建测试HTML文件
[root@master1 nginx]# mkdir -p nginx8080/apache-tomcat-7.0.70/webapps/edu
[root@master1 nginx]# mkdir -p nginx8081/apache-tomcat-7.0.70/webapps/vod
a.html
<h1> hello 8080 </h1>
初步验证一下:
接着就去实现我们的目标了,去配置一下nginx
测试访问,nginx -s reload
补充
location指令说明
该指令用于匹配 URL。 语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
负载均衡
目标试验三 通过浏览器访问某个页面实现负载均衡
还是跟上面的一样,创建两台服务器目录,他们都有一个test的目录,分别存有不同的HTML文件,我们通过看到不同的HTML文件来区别是否实现负载均衡。
[root@master1 nginx]# mkdir -p nginx8081/apache-tomcat-7.0.70/webapps/test
[root@master1 nginx]# mkdir -p nginx8080/apache-tomcat-7.0.70/webapps/test
test.html
<h1>测试负载均衡 8080 </h1>
修改nginx配置文件
在http块中增加啊
因为代码中存在两个
location / {
}
即使里面的内容不一样,也要把这两个合并到一块或者删除其中一个,不然会报错。
重启nginx,然后测试,刷新浏览器,出现不同的结果。我勒个去,这里居然乱码了
补充:nginx分配流量的策略
1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight weight 代表权,重默认为 1,权重越高被分配的客户端越多 指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
3、ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
目标试验四 nginx动静分离
这里只介绍常用的方式
纯粹把静态文件独立成单独的域名,放在独立的服务器上,是目前主流推崇的方案。
分别创建两个目录,放置动静文件
[root@master1 nginx]# tree
.
├── dynamic
│ └── test.html
└── static
└── 13e695dd47ed4494dcb2a08b81fb3e2.jpg
2 directories, 2 files
[root@master1 nginx]# pwd
/usr/share/nginx/html/nginx
修改nginx配置文件
关于截图所示全局控制说明:
配置 说明
autoindex 默认为 off,不允许列出整个目录的。on, 列出整个目录
alias 设置需要映射的文件的真实目录。 alias 设置的目录是准确的,可以理解为linux的 ln命令创建软连接,location就是软连接的名字。
root 设置需要映射的文件的家目录。root 设置的目录是根目录,locatoin里所指定名称的目录,必须在root设定下的目录有相同名字的目录。
autoindex_exact_size 默认为 on,显示出文件的确切大小,单位是bytes。《br>改为 off 后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime 默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
测试结果如下:
注意:这里的话我想根据教程一样自己指定一个目录,然后访问。没有成功,可能是因为我从一开始就没有注释掉server全局块的root,导致配置不生效,但是后边注释掉了全局root,还是没有成功,可能是哪里的配置得删改一下吧,这个暂过,后边再研究,这里还是使用默认的root路径,即/usr/share/nginx/html/nginx。
error分析
2021/08/07 16:30:14 [error] 513956#0: *15 open() "/usr/share/nginx/html/nginx" failed (13: Permission denied), client: 172.25.82.30, server: 172.25.130.168, request: "GET /nginx HTTP/1.1", host: "172.25.130.168"
没有权限,修改nginx.conf,把user改成root。然后重启nginx服务即可。当然root权限有点大了,还有一种方法就是看你的user是什么用户,然后把对应的文件的所属组和用户改成那个也可以,例如我的nginx.conf里面是nginx,那么我就改成nginx即可,chown -R nginx:nginx nginx,然后重启nginx。
小龙虾镇楼!!!