如何使用apache配置反向代理
2017-12-04 本文已影响93人
__damon__
反向代理.jpg
何为反向代理,我需要实现什么功能?
需求描述:我有一台服务器,想要建立两个不同的网站,每个网站占用一个端口,都指向了该服务器的ip。绑定域名的时候,域名是指向ip的。
比如,www.domain.com:8080等同于ip:8080, www.domain2.com:8090等同于ip:8090
那么如何实现www.domain.com等同于ip:8080, www.domain2.com等同于ip:8090
即如何不带端口的域名直接访问我们建立的站点!
上面的解释归结为一个术语:反向代理
我的apache版本
httpd -v
# Server version: Apache/2.2.15 (Unix)
# Server built: Nov 18 2016 23:48:55
熟悉httpd命令,以便重启服务
service httpd {start|stop|restart...}
或者
/etc/init.d/httpd {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
配置反向代理
主要文件:/etc/httpd/conf/httpd.conf
首先了解虚拟主机(virtual host)
术语虚拟主机指的是在单一机器上运行多个网站 (例如 www.company1.com 和 www.company2.com) 。 虚拟主机可以“基于 IP”,即每个 IP 一个站点; 或者“基于名称”, 即每个 IP 多个站点。这些站点运行在同一物理服务器上的事实不会明显的透漏给最终用户。
从官网解释看,就是本文主要实现的效果,肯定了我们的方向没有搞错。
### Section 3: Virtual Hosts
# ... 这下面是配置virtual host的地方
# 找到这一行,去掉注释
NameVirtualHost *:80
# 配置一个virtualHost
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
结合virtualhost和proxy实现反向代理
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:8080/
ProxyPassReverse http://localhost:8080/
</Location>
</VirtualHost>
示例代码
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.red
ServerAlias domain.red
DocumentRoot /var/www/html/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.songsong.red
ServerAlias songsong.red
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:8080/
ProxyPassReverse http://localhost:8080/
</Location>
</VirtualHost>
参考链接
apache.org.name-based.virtualhosts
apache.org.proxy
通过 Apache 代理访问 Node