反向代理Nginx和Apache

  • A+
所属分类:Apache Nginx

#开启apache模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
1、ProxyPass:  
语法:ProxyPass [path] !|url
它主要是用作URL前缀匹配,不能有正则表达式,它里面配置的Path实际上是一个虚拟的路径,在反向代理到后端的url后,path是不会带过去的,使用示例:
1)、ProxyPass /images/ !
这个示例表示,/images/的请求不被转发。
2)、ProxyPass /mirror/foo/ http://backend.example.com/
我们假设当前的服务地址是http://example.com/,如果我们做下面这样的请求:
http://example.com/mirror/foo/bar
那将被转成内部请求:
http://backend.example.com/bar
注:配置的时候,不需要被转发的请求,要配置在需要被转发的请求前面。
2、ProxyPassMatch:
语法:ProxyPassMatch [regex] !|url
这个实际上是url正则匹配,而不是简单的前缀匹配,匹配上的regex部分是会带到后端的url的,这个是与ProxyPass不同的。使用示例:
1、ProxyPassMatch ^/images !
这个示例表示对/images的请求,都不会被转发。
2、ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com$1
这个示例表示对所有gif图片的请求,都被会转到后端,如此时请求http://example.com/foo/bar.gif,那内部将会转换为这样的请求http://backend.example.com/foo/bar.gif。
3、ProxyPassReverse
语法:ProxyPassReverse [路径] url 
它一般和ProxyPass指令配合使用,此指令使<a href="https://blog.itiis.cn/tag/apache/" title="查看与 Apache 相关的文章" target="_blank">Apache</a>调整HTTP重定向应答中Location, Content-Location, URI头里的URL,这样可以避免在Apache作为反向代理使用时,。后端服务器的HTTP重定向造成的绕过反向代理的问题。参看下面的示例:
ProxyPass /example http://www.example.com/
ProxyPassReverse /example http://www.example.com/
ProxyPassReverse的作用就是反向代理,如果没有加这样的反向代理设置的情况下,访问http://www.test.com/example/a,如果www.example.com对请求进行了redirect至http://www.example.com/b,那么,客户端就会绕过反向代理,进而访问http://www.test.com/example/b。如果设置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为http://www.test.com/example/a/b,即是在原请求之后追加上了redirect的路径。

###Apache 公网访问demo.com/admin/的网址,会反向代理到http://127.0.0.1:4000/demoadmin/本地服务器4000端口的demoadmin

<VirtualHost *:80>
    #配置站点的域名// 代理的服务器地址
    ServerName demo.com
    #配置站点的项目目录
    DocumentRoot /www/demo
    #配置站点的管理员信息
    #ServerAdmin xxx@gmail.com
    #off表示开启反向代理,on表示开启正向代理
    ProxyRequests Off
    #ProxyMaxForwards 100
    #ProxyPreserveHost On
    #这里表示要将现在这个虚拟主机跳转到本机的4000端口
    ProxyPass /admin/ http://127.0.0.1:4000/demoadmin/
    ProxyPassReverse /admin/ http://127.0.0.1:4000/demoadmin

    <Proxy *>
        Order Deny,Allow
        Allow from all
    </Proxy>
</VirtualHost>

###Nginx 公网访问demo2.com/admin2/的网址,会反向代理到http://127.0.0.1:8888/本地服务器8888端口的服务

server {
    listen 80;
    server_name demo2.com;

    location /admin2/ {
        proxy_pass http://127.0.0.1:8888;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP  $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {
        root /www/demo2/;
    }
}
  • 免费领红包
  • 支付宝红包扫一扫
  • weinxin
  • 免费提现
  • 支付宝全额提现
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: