一.rewrite地址重写

  1. 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址。
  2. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求。
  3. 地址转发一般发生在同一站点项目内,而地址重写则没有限制。
  4. 地址转发到的页面可以不用全路径名表示,而地址重写到的页面必须使用完全的路径名表示。
  5. 地址转发过程中,可以将客户端请求的request范围内的属性传递给新的页面,但地址重写不可以。
  6. 地址转发的速度比地址重写的速度快。
    rewrite指令:通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配
    redirect:将重写后的URI返回给客户端,状态码为302,指明是临时重定向URI,主要用在replacement变量不是以httphttps开头的情况下
  1. vi conf/vhost/www.abc.com.conf
  2.  
  3. #vi编辑虚拟主机配置文件
  4. 文件内容
  5. server {
          listen ;
          server_name abc.com;
  6.       rewrite ^/(.*) http://www.abc.com/$1 permanent;
  7. }
  8.  
  9. server {
  10.       listen ;
  11.       server_name www.abc.com;
  12.     location / {
  13.       root /data/www/www;
  14.       index index.html index.htm;
  15.       }
        error_log logs/error_www.abc.com.log error;
  16.     access_log logs/access_www.abc.com.log main;
  17.  
  18. }
  19.  
  20. 或者
  21.  
  22. server {
  23.     listen ;
  24.     server_name abc.com www.abc.com;
  25.     if ( $host != 'www.abc.com' ) {
  26.         rewrite ^/(.*) http://www.abc.com/$1 permanent;
        }
  27.     location / {
  28.       root /data/www/www;
  29.       index index.html index.htm;
  30.         }
  31.     error_log logs/error_www.abc.com.log error;
  32.     access_log logs/access_www.abc.com.log main;
  33.     }
  34. ()重启服务
  35. 确认无误便可重启,操作如下:
  36. nginx -t
  37. #结果显示ok和success没问题便可重启
  38. nginx -s reload
  39. ()查看跳转效果
  40. 打开浏览器访问abc.com
  41. 页面打开后,URL地址栏的abc.com变成了www.abc.com说明URL重写成功。

rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

rewrite语法格式及参数语法说明如下:

rewrite    <regex>    <replacement>    [flag];

关键字    正则      替代内容       flag标记

关键字:其中关键字error_log不能改变

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

flag标记说明:

last  #本条规则匹配完成后,继续向下匹配新的location URI规则

break  #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

rewrite参数的标签段位置

server,location,if

例子:rewrite ^/(.*) http://www.czlun.com/$1 permanent;

rewrite为固定关键字,表示开始进行rewrite匹配规则

regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址

replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。

flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

rewrite 企业应用场景

Nginx的rewrite功能在企业里应用非常广泛:

可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

根据特殊变量、目录、客户端的信息进行URL调整等



二.nginx的动静分离

静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 Nginx 并且在 B 上安装Tomcat。配置 Nginx

当请求的是 html、jpg 等静态资源时,就访问 A 主机上的静态资源目录;当用户提出动态资源的请求时,则将请求转发到后端的B

服务器上,交由 Tomcat 处理,再由 Nginx 将结果返回给请求端。

提到这,可能有您会有疑问,动态请求要先访问 A,A 转发访问 B,再由 B 返回结果给 A,A 最后又将结果返回给客户端,这是不是有点多

余。初看的确多余,但是这样做至少有 2 点好处。第一,为负载均衡做准备,因为随着系统的发展壮大,只用一台 B 来处理动态请求显然是

是不够的,要有 B1,B2 等等才行。那么基于图 2 的结构,就可以直接扩展 B1,B2,再修改 Nginx 的配置就可以实现 B1 和 B2 的负载均

衡。第二,对于程序开发而言,这种结构的程序撰写和单台主机没有区别。我们假设只用一台 Tomcat 作为服务器,那么凡是静态资源,如图

片、CSS 代码,就需要编写类似这样的访问代码:<img src=”{address of A}/a.jpg”>,当静态资源过多,需要扩展出其他的服务器来安放

静态资源时,访问这些资源就可能要编写这样的代码:<img src=”{address of C}/a.jpg”>、<img src=”{address of D}/a.jpg”>。可

看到,当服务器进行变更或扩展时,代码也要随之做出修改,对于程序开发和维护来说非常困难。而基于上面的结构,程序都只 要 <img

src=”a.jpg”>,无需关心具体放置资源的服务器地址,因为具体的地址 Nginx 为帮您绑定和选择。

  1. # 转发的服务器,upstream 为负载均衡做准备
  2. upstream tomcat_server{
  3. server 192.168.8.23:;
  4. }
  5. server {
  6. listen ;
  7. server_name localhost;
  8. # 静态资源存放目录
  9. root /im;
  10.  
  11. location / {
  12. root html;
  13. index ak47.html index.html index.htm;
  14. }
  15. # 动态请求的转发
  16. location ~ .*.jsp$ {
  17. proxy_pass http://tomcat_server;
  18. proxy_set_header Host $host;
  19. }
  20. # 静态请求直接读取
  21. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
  22. expires 30d;
  23. }

其目的和我们预期的一样,动态的请求(以 .jsp 结尾)发到 B(192.168.8.23:8099,即 tomcat_server)上,而静态的请求(gif|jpg 等)则直接访问定义的im目录

三.反向代理加负载均衡

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

反向代理的作用:

1.1 保证内网的安全,隐藏原始服务器

1.2 负载均衡。反向代理多个服务器

nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

  1. upstream myvic{
  2. #ip_hash;
  3. server 192.168.1.251 weight= fail_timeout=20s;
  4. server 192.168.1.252 weight= fail_timeout=20s;;
  5. server 192.168.1.247 weight= fail_timeout=20s;;#可以给服务器加权重
  6. }
  7. server {
  8.  
  9. listen ;
  10. server_name www.myvick.cn;
  11. location / {
  12. #反向代理的地址
  13. proxy_pass http://myvic;
  14. }
  15. }

第二种配置:ip_hash轮询方法,不可给服务器加权重

  1. upstream myvic {
  2. server 192.168.196.130 fail_timeout=20s;
  3. server 192.168.196.132 fail_timeout=20s;
  4.    ip_hash;
  5. }
  6. server {
  7. listen ;
  8. server_name www.myvick.cn;
  9.     index index.html index.htm index.php;
  10.     location / {
  11. proxy_pass http://myvic;
  12.        proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header; #当其中一台返回错误码404,...等错误时,
  13.                     #可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,设置proxy_next_upstream
  14.         
  15.  
  16.          proxy_next_upstream off;#关闭请求下一个服务器
  17.  
  18.          include proxy.conf;
  19.       }
  20. 基于ip hash实现session

Nginx基础入门之proxy反向代理常用配置项说明:

http://blog.51cto.com/blief/1739178

nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍的更多相关文章

  1. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  2. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  3. 十.nginx反向代理负载均衡服务实践部署

    期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...

  4. 【转】Nginx 反向代理 负载均衡 虚拟主机配置

    原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...

  5. Centos7.4 Nginx反向代理+负载均衡配置

    Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...

  6. 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

    实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...

  7. 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现

    总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...

  8. 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现

    目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...

  9. 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

  10. Centos 7.6配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

随机推荐

  1. 利用html5canvas给图片增加文字水印

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. Java编程基础-面向对象(上)

    一.面向对象的概念 1.概念:面向对象是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能.这 ...

  3. PostgreSQL函数如何返回数据集 [转]

    PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...

  4. JavaScript30-7 数组的一些基本方法

    本次来学习数组的一些方法,之前学习的js数组的方法是在第四课里面(没有写到随笔里面) 之前第四课主要讲的是 filter() ,map() 这次课程主要介绍的是 some()`.`every()`.` ...

  5. List 集合中数据不重复的使用

    foreach (DataRow dr in dt.Rows) { list.Add(dr["项目组"].ToString()); } list = list.Distinct&l ...

  6. ExpandableListView 安卓二级菜单

    ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListView).ExpandableListView允许有两个层次:一级列表中有二级列表.比如在 ...

  7. github入门一

    一.首先安装gitbash(自行百度)我使用的版本是Git-2.12.2.2-64-bit.exe 二.配置gitbash本地客户端 1.初始设置 1.1.设置姓名和邮箱地址 git config - ...

  8. 洛谷 P1330 封锁阳光大学

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  9. 快学UiAutomator各种框架介绍

    Monkey 编写语言:命令行 运行环境:使用adb连接PC运行测试对象:Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程 ...

  10. pre-receive hook declined

    没有master分支的代码提交权限. 分配权限或者提交分支合并申请