Apache/nginx设置反向代理

Posted 刘小莫随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache/nginx设置反向代理相关的知识,希望对你有一定的参考价值。

今天来说下apache和nginx设置反代理功能:

首先要开启代理设置

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


然后就是设置网站配置

<VirtualHost *:80>

    ServerName web.com

    DocumentRoot /Users/momo/www/web/

    SetEnv APPLICATION_ENV "development"

     

    #反代理设置

     ProxyPass /api http://webapi.com/

     ProxyPassReverse /api/ http://webapi.com/


    <Directory /Users/momo/www/web/>

        DirectoryIndex index.html index.htm index.php

        AllowOverride All

        Order allow,deny

        Allow from all

    </Directory>

</VirtualHost>


<VirtualHost *:80>

    ServerName webapi.com

    DocumentRoot /Users/momo/www/webapi/public

    SetEnv APPLICATION_ENV "development"


    <Directory /Users/momo/www/webapi/public>

        DirectoryIndex index.php

        AllowOverride All

        Order allow,deny

        Allow from all

    </Directory>

</VirtualHost>


我们现在来看反代理设置这两句

ProxyPass /api http://webapi.com/ : 将 web.com/api 下的所有请求全都交给 webapi.com 代理,例如 web.com/api/info.php 会交给 webapi.com/info.php 代理进行实际处理;


ProxyPassReverse /api http://webapi.com/:

webapi.com/info.php 中有如下代码:


<?php

      header('Location: http://webapi.com/result.php');

?>


那么在重定向的时候,Apache会将HTTP请求重新设为http://web.com/api/result.php, 这样的作用稍后讲解

webapi.com/result.php 中有如下代码:

<?php

   phpinfo();die;

?>



那么访问结果就如下:

访问web.com/api/info.php

apache将请求交给 webapi.com/info.php 代理,HTTP请求如下:


Request URL:

http://web.com/api/info.php

Request Method:

GET

Status Code:

200 Ok

Remote Address:

127.0.0.1:80

Referrer Policy:

no-referrer-when-downgrade


Connection:

Keep-Alive

Content-Length:

0

Content-Type:

text/html; charset=UTF-8

Date:

Wed, 20 Dec 2017 02:12:33 GMT

Keep-Alive:

timeout=5, max=100

Location:

http://web.com/api/result.php

Server:

Apache/2.4.27 (Unix) PHP/7.1.4

X-Powered-By:

PHP/7.1.4


可以发现其实request中的请求还是 web.com 的,但是它确实是由 webapi.com 来处理的

webapi.com/info.php 重定向到 webapi.com/result.php显示PHP版本信息

Request URL:

http://web.com/api/result.php

Request Method:

GET

Status Code:

200 OK

Remote Address:

127.0.0.1:80

Referrer Policy:

no-referrer-when-downgrade


也可以看到请求依然是 web.com/api/result.php


这里就是 ProxyPassReverse 发挥作用的地方,如果不加这个项,重定向后HTTP请求会如下所示:


Request URL:

http://webapi.com/result.php

Request Method:

GET

Status Code:

200 OK

Remote Address:

127.0.0.1:80

Referrer Policy:

no-referrer-when-downgrade



nginx的配置,原理就不再赘述了


server {

    listen  80;

    server_name  web.com;

    root   /usr/share/nginx/html/web;

    index  index.html index.htm index.php;

    location /api/ {

        proxy_pass http://webapi.com/;

    }

}



以上是关于Apache/nginx设置反向代理的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置反向代理概述

nginx的反向代理的优势,特点于原理

反向代理服务的区别

Nginx反向代理

分布式系列十三: nginx

Nginx