一、反向代理

实例一:
使用 nginx 反向代理,访问 www.123.com 直接跳转到 192.168.10.104:8080
image.png
环境:
192.168.10.103:80 — nginx
192.168.10.104:8080 — tomcat

windows主机配置域名和IP映射关系:
C:\Windows\System32\drivers\etc hosts文件添加如下内容:
——————————————————————————————————-
192.168.10.103 www.123.com
——————————————————————————————————
浏览器访问测试映射关系:http://www.123.com:8080/
image.png
nginx配置文件修改:
[root@hadoop103 ~]# cd /usr/local/nginx/conf/
[root@hadoop103 conf]# vim nginx.conf

  1. server {
  2. listen 80;
  3. server_name 192.168.10.103;
  4. location / {
  5. root html;
  6. proxy_pass http://192.168.10.104:8080;
  7. index index.html index.htm;
  8. }

image.png
[root@hadoop103 conf]# cd ../sbin/
[root@hadoop103 sbin]# ./nginx -s reload

浏览器测试代理效果:
http://www.123.com/
image.png
示例二:
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

访问 http://192.168.10.103:9001/edu/ 直接跳转到 192.168.10.104:8080
访问 http://192.168.10.103:9001/vod/ 直接跳转到 192.168.10.103:8081

环境:
nginx:192.168.10.103:9001
tomcat01:192.168.10.103:8080
tomcat02:192.168.10.103:8081

在192.168.10.103上安装两个tomcat(/usr/local/tomcat8080,/usr/local/tomcat8081)
且修改/usr/local/tomcat8081/conf/server.xml 主配置文件中的端口:

  1. <Server port="8015" shutdown="SHUTDOWN">
  2. ...
  3. <Connector port="8081" protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="8443" />
  6. ...
  7. <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
  8. ...

原配置文件:

  1. <Server port="8005" shutdown="SHUTDOWN">
  2. ...
  3. <Connector port="8080" protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="8443" />
  6. ...
  7. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  8. ...
  1. tomcat分别创建测试页面:<br />[root@hadoop103 ~]# mkdir /usr/local/tomcat8080/webapps/edu<br />[root@hadoop103 ~]# vim /usr/local/tomcat8080/webapps/edu/index.html
  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Web8080</title>
  6. </head>
  7. <body>
  8. <h3>Tomcat8080</H3>
  9. </body>
  10. </html>

[root@hadoop103 ~]# mkdir /usr/local/tomcat8081/webapps/vod
[root@hadoop103 ~]# vim /usr/local/tomcat8081/webapps/vod/index.html

  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Web8081</title>
  6. </head>
  7. <body>
  8. <h3>Tomcat8081</H3>
  9. </body>
  10. </html>

修改nginx主配置文件:
[root@hadoop103 ~]# cd /usr/local/nginx/conf/
[root@hadoop103 conf]# vim nginx.conf 在 http 块中添加 server{}

  1. server {
  2. listen 9001;
  3. server_name 192.168.10.103;
  4. location ~/edu/ {
  5. root html;
  6. proxy_pass http://192.168.10.103:8080;
  7. index index.html index.htm;
  8. }
  9. location ~/vod/ {
  10. root html;
  11. proxy_pass http://192.168.10.103:8081;
  12. index index.html index.htm;
  13. }
  14. }

[root@hadoop103 conf]# cd ../sbin/
[root@hadoop103 sbin]# ./nginx -s reload

浏览器测试代理效果:
http://192.168.10.103:9001/edu/
image.png
http://192.168.10.103:9001/vod/
image.png
location 指令说明:该指令用于匹配 URL

语法:
image.png
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,
如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~ :用于表示 uri 包含正则表达式,并且区分大小写。
3、~ :用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度
最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri
和请求字符串做匹配。

注意:如果 uil 包含正则表达式,则必须要有 ~ 或者 ~
标识。

二、负载均衡

1. 负载均衡配置

环境准备:
tomct:192.168.10.103:8080
tomct:192.168.10.104:8080
nginx:192.168.10.103:80

192.168.10.103上:
[root@hadoop103 ~]# cd /usr/local/tomcat/webapps
[root@hadoop103 webapps]# mkdir edu
[root@hadoop103 webapps]# vim edu/index.html

  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Apache Tomcat Examples</title>
  6. </head>
  7. <body>
  8. <h3>192.168.10.103:8080</H3>
  9. </body></html>

192.168.10.104上:
[root@hadoop104 ~]# cd /usr/local/tomcat/webapps
[root@hadoop104 webapps]# mkdir edu
[root@hadoop104 webapps]# vim edu/index.html

  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Apache Tomcat Examples</title>
  6. </head>
  7. <body>
  8. <h3>192.168.10.104:8080</H3>
  9. </body></html>
  1. 重启tomcat

在nginx的配置文件中配置负载均衡:
[root@hadoop103 ~]# cd /usr/local/nginx/conf/
[root@hadoop103 conf]# vim nginx.conf

  1. http{
  2. ......
  3. #gzip on;
  4. upstream myserver{ # myserver为自己起的负载均衡的名字
  5. server 192.168.10.103:8080; # tomcat 服务器的地址
  6. server 192.168.10.104:8080; # tomcat 服务器的地址
  7. }
  8. server {
  9. listen 80; # nginx监听端口
  10. server_name 192.168.10.103; # nginx服务器地址
  11. #charset koi8-r;
  12. #access_log logs/host.access.log main;
  13. location / {
  14. proxy_pass http://myserver; # http://所起的负载均衡的名字
  15. root html;
  16. index index.html index.htm;
  17. }
  18. #error_page 404 /404.html;
  19. # redirect server error pages to the static page /50x.html
  20. ......
  21. }
  22. ......
  23. }

[root@hadoop103 conf]# cd ../sbin/
[root@hadoop103 sbin]# ./nginx -s stop
[root@hadoop103 sbin]# ./nginx

浏览器测试负载均衡效果:http://192.168.10.103/edu/
image.png
刷新页面后自动变为:
image.png
备注:默认情况下为轮询策略
(即:每个请求按时间顺序逐一分配到不同服务器,若服务器 down 掉,能自动剔除)

2. Nginx常见的负载均衡策略

1)轮询(默认策略)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2)weight权重

weight 代表权,重默认为 1,权重越高被分配的客户端越多;
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

配置示例:

  1. http{
  2. ......
  3. #gzip on;
  4. upstream server_pool{ # server_pool为自己起的负载均衡的名字
  5. server 192.168.10.103:8080 weight=10; # tomcat 服务器的地址
  6. server 192.168.10.104:8080 weight=11; # tomcat 服务器的地址
  7. }
  8. ......
  9. }

104服务器的权重大于103服务器,则前端访问会被较多的分配都104这台后端服务器上

3)ip_hash(IP哈希)

每个请求按访问 ip 的 hash 结果分配,即每个前端请求会被固定访问到一个后端服务器,可以解决 session 的问题

配置示例:

  1. http{
  2. ......
  3. #gzip on;
  4. upstream server_pool{ # server_pool为自己起的负载均衡的名字
  5. ip_hash
  6. server 192.168.10.103:8080; # tomcat 服务器的地址
  7. server 192.168.10.104:8080; # tomcat 服务器的地址
  8. }
  9. ......
  10. }

4)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配

配置示例:

  1. http{
  2. ......
  3. #gzip on;
  4. upstream server_pool{ # server_pool为自己起的负载均衡的名字
  5. fair
  6. server 192.168.10.103:8080; # tomcat 服务器的地址
  7. server 192.168.10.104:8080; # tomcat 服务器的地址
  8. }
  9. ......
  10. }

三、动静分离配置

1. 动静分离介绍

Nginx 动静分离:把是动态请求跟静态请求分开
image.png

动静分离从目前实现角度来讲大致分为两种:
第一种:纯粹把静态文件独立成单独的域名,放在独立的服务器上(目前较主流)
第二种:将动态跟静态文件混合在一起发布,通过 nginx 来分开

配置方法:
动态跟静态文件混合在一起发布,通过 nginx 来分开;
通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量;

Expires 的定义:是给一个资源设定一个过期时间,即无需去服务端验证,直接通过浏览器 自身确认是否过期即可,所以不会产生额外的流量。(适合不经常变动的资源)
注意:如果经常更新的文件,不建议使用 Expires 来缓存

2. 动静分离配置

1)nginx服务器准备

nginx:192.168.10.103

2)资源环境准备

准备静态资源:
[root@hadoop103 ~]# mkdir -p /data/{www,image}
[root@hadoop103 ~]# vim /data/www/index.html

  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>动静分离</title>
  6. </head>
  7. <body>
  8. <h3>动静分离配置测试-静态页面</h3>
  9. </body>
  10. </html>

[root@hadoop103 www]# cd /data/image/ (给/data/image/目录下放入一张图片)
image.png

3)nginx配置文件设置

  1. http{
  2. ......
  3. #gzip on;
  4. server {
  5. listen 80;
  6. server_name 192.168.10.103;
  7. #charset koi8-r;
  8. #access_log logs/host.access.log main;
  9. location /www/ { # 访问规则
  10. root /data/; # 静态资源路径
  11. index index.html index.htm;
  12. }
  13. location /image/ { # 访问规则
  14. root /data/; # 静态资源路径
  15. autoindex on; # 列出访问目录
  16. }
  17. ......
  18. }
  19. ......
  20. }

[root@hadoop103 conf]# cd ../sbin/
[root@hadoop103 sbin]# ./nginx -s reload

4) 浏览器配置效果测试

http://192.168.10.103/image/
image.png
http://192.168.10.103/www/
image.png