nginx 反向代理之 proxy_pass的实现_nginx

来源:脚本之家  责任编辑:小易  

  nginx 这个轻量级、高性能的 web server 主要e69da5e887aa62616964757a686964616f31333337376330可以干两件事情:  〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);  〉另外一个功能就是作为反向代理服务器实现负载均衡  以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。  1)环境:  a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。  在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。  这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );  b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;  nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。  也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。  c. 如下介绍两种方法实现server cluster的负载均衡。  我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;  后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。  2)针对不同请求 的负载均衡:  a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:  复制代码 代码如下:  location ~ \.php$ {  proxy_pass 158.37.70.143:80 ;  }  〉 这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;  〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的 http://wiki.nginx.org/NginxHttpCoreModule) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。  如上是最为简单的使用nginx做为反向代理服务器的例子;  b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。  我们设置nginx.conf的server模块部分,将对应部分修改为:  复制代码 代码如下:  location ^~ /phpMyAdmin/ {  proxy_pass 127.0.0.1:80 ;  }  location ~ \.php$ {  proxy_pass 158.37.70.143:80 ;  }  上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;  如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。  因此综上,我们实现了针对不同请求的负载均衡。  〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;  〉如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;  〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;  3)访问同一页面 的负载均衡:  即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。  a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;  两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。  b. 因此重新配置nginx.conf为:  〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:  复制代码 代码如下:  upstream myCluster {  server 127.0.0.1:80 ;  server 158.37.70.143:80 ;  }  表示这个server cluster包含2台服务器  〉然后在server模块中定义,负载均衡:  复制代码 代码如下:  location ~ \.php$ {  proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同  proxy_redirect off;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  }  这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。  上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:  复制代码 代码如下:  upstream myCluster {  server 127.0.0.1:80 weight=5;  server 158.37.70.143:80 ;  }  这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。  综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。  nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。  通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。  两种均衡:  1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;  2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。  实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步www.zgxue.com防采集请勿采集本网。

格式很简单: proxy_pass URL;

跟域名或ip都可以 如果是域名,默认走系统的dns解析,如果有resolver配置,则走配置的dns 如果是ip还得用proxy_set_header把Host头加上

其中URL包含:传输协议(http://, https://等)、主机名(域名或者IP:PORT)、uri。

1)环境: a. 本地使用Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。 在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。这样相当于拥有了1台nginx在前端

示例如下:

这样的用法,当然只能到第一个的,要这样用 在http节点中加入这个,server的具体值你自已改 upstream cjdby{ server pigoss; server tianyuan; } 在server节点中,只保留一下location,然后把proxy_pass改成这样 proxy_pass http://cjdby; 其它

proxy_pass http://www.xxx.com/;proxy_pass http://192.168.200.101:8080/uri;proxy_pass unix:/tmp/www.sock;

如果nginx和tomcat在同一台服务器可以代理,则说明nginx的犯下那个代理功能是正常的。 但是放在两台服务器则失效,需要考虑的是:A服务器是否有权限访问B服务器。 如果B服务的地址为:192.168.100.10:8080,A的配置为: if ($request_uri ~ "xxx

对于proxy_pass的配置有几种情况需要注意:

nginx反向代理配置实例(前nginx+后apache) 我就拿我现在这个站的环境给大家看看.. 如果是一台普通vps或者是独立服务器 ,,,首先我们要干的就是装环境和配置防火墙了.. 首先我们配置下防火墙吧, [root@51buyhost.com ~]# vim /etc/sysconfig/iptab

假设server_name为www.xxx.com

当请求http://www.xxx.com/aming/a.html的时候,以上示例分别访问的结果是

示例1:

location /aming/{ proxy_pass http://192.168.1.10; ...}

结果1:http://192.168.1.10/aming/a.html

示例2:

location /aming/{ proxy_pass http://192.168.1.10/; ...}

结果2:http://192.168.1.10/a.html

示例3:

location /aming/{ proxy_pass http://192.168.1.10/linux/; ...}

结果3:http://192.168.1.10/linux/a.html

示例4:

location /aming/{ proxy_pass http://192.168.1.10/linux; ...}

结果4:http://192.168.1.10/linuxa.html

总结:

为了方便记忆和规范配置,建议所有的 proxy_pass 后的url都以“/”结尾。

proxy_pass http://192.168.1.10/linux/;

到此这篇关于nginx 反向代理之 proxy_pass的实现的文章就介绍到这了,更多相关nginx 反向代理 proxy_pass内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:nginx proxy_pass反向代理配置中url后加不加/的区别介绍Nginx服务器的反向代理proxy_pass配置方法讲解

proxy_pass是代理指copy令也就是说,浏览器2113请求发到Nginx后,Nginx把请求转5261发到目的服务器,然后在把4102目的服务器返1653回的内容再传回给浏览器整个过程中浏览器与B都是不进行任何直接通讯的,所有通讯都是通过Nginx服务器间接通信,B可以处于与Nginx同一内网下,B都可以链接不了外网,只由Nginx(DMZ区)将请求发给B,B将结果再给Nginx内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • nginx配置文件nginx.conf详细说明
  • debian下搭建nginx和tomcat服务器实现负载均衡的方案
  • 使用nginx实现负载均衡的策略
  • nginx限制ip访问某些页面的操作
  • nginx 过滤静态资源文件的访问日志的实现
  • nginx 平滑重启的实现方法
  • nginx 禁止ip访问 只允许域名访问
  • nginx跨域使用字体文件的配置方法
  • nginx设置资源缓存实战详解
  • nginx rewrite跳转应用场景详解
  • NginX反向代理,A机得到用户请求后,用proxy_pass ...
  • 为什么要用nginx来做反向代理
  • nginx反向代理为什么不成功
  • php利用Nginx如何实现反向代理
  • Nginx做反向代理,后端主机是绑定的域名虚拟主机,pr...
  • nginx + apache做反向代理无法实现
  • nginx 反向代理一个server下配置多个location域名问题
  • nginx反向代理tomcat 不能跳转
  • nginx反向代理root 一定要配置吗
  • 如何设置nginx反向代理实现服务器瞬间故障转移
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginx proxy_pass反向代理配置中url后加不加/的区别介绍nginx服务器的反向代理proxy_pass配置方法讲解nginx配置文件nginx.conf详细说明debian下搭建nginx和tomcat服务器实现负载均衡的方案使用nginx实现负载均衡的策略nginx限制ip访问某些页面的操作nginx 过滤静态资源文件的访问日志的实现nginx 平滑重启的实现方法nginx 禁止ip访问 只允许域名访问nginx跨域使用字体文件的配置方法nginx设置资源缓存实战详解nginx rewrite跳转应用场景详解nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪详解nginx服务器中配置超时时间的nginx下301重定向域名的方法小结windows下nginx+php5的安装与配置关于nginx+uwsgi配置遇到的问题的解决如何利用map实现nginx允许多个域名跨域nginx中的用户认证配置及阻止用户使用代理ubuntu下nginx配置thinkphp的pathinfo和unginx服务状态监控的方法nginx 伪静态rewrite正则资源汇总配置nginx服务器展示随机首页与空白图片的实现nginx&php服务器配置的非主流配置nginx缓存不起作用问题解决方法利用nginx解决跨域问题的方法(以flask为
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved