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请求会如下所示:
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设置反向代理的主要内容,如果未能解决你的问题,请参考以下文章