前nginx后Apache+Node反向代理

前几天一直在被一个问题困扰,机器上跑的站点太多了,Apache上面有十几个,NodeJS的也有一堆,记端口号都要烦死,因而萌生了使用反向代理的想法。出发点貌似太low了,彻底不是出于负载均衡、高并发什么的考虑,就是为了避免记端口号nginx

最开始是使用Apache作的,由于使用的Mac安装mod_proxy及繁杂的配置搞得要死,关键是还失败了。。。(失败缘由另说),江湖传言nginx作反向代理配置简单,尝试了一下nginx,果不其然web

工做原理

刚入行的小伙伴可能会问什么事反向代理?为何使用反向代理就不用急端口号了?apache

正向代理

了解反向代理以前先了解一下正向代理,正向代理就是咱们平时理解的代理,举个例子后端

  1. 在国内我不能访问caoliu
  2. 可是我有一台在美国的VPS,能够访问各类xxoo网站
  3. 因而我向VPS发请求,我要看caoliu
  4. VPS获取caoliu内容,而后返回给我

VPS就是代理,这个过程就是正向代理浏览器

正向代理 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),而后代理向原始服务器转交请求并将得到的内容返回给客户端。客户端必需要进行一些特别的设置才能使用正向代理服务器

反向代理

仍是举个例子,caoliu的域名常常会变,并且会提供多个域名,一个域名被墙掉了,能够用其它的,可是访问每一个域名返回的内容都是同样的,并且页面也没有重定向网络

其实咱们访问xx.xxx.cl的时候,该域名的web服务器没有向咱们直接返回内容,而是本身向caoliu的真正主机发送请求,而后把请求结果给咱们并发

反向代理对于客户端而言它就像是原始服务器,而且客户端不须要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将得到的内容返回给客户端,就像这些内容 本来就是它本身的同样负载均衡

区别&用途

其实明白了原理二者的区别很明显了,能够简单的这样区分正向代理和反向代理ide

反向代理对访问者时透明的(你以为xx.xxx.cl就是caoliu的服务器地址了,实际不是,你看不出来),正向代理访问着须要特殊设置(否则怎么看youtube)

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可使用缓冲特性减小网络使用率。反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还能够为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

看到这里是否是明白了我想怎么作?

原来我有三个网站

  1. localhost:8080
  2. localhost:9000
  3. localhost:8000

我要使用nginx作个设置,都使用80端口,免去我输入端口号的苦恼

  1. 当我访问 xxx的时候给我代理到localhost:8080
  2. 当我访问 yyy的时候给我代理到localhost:9000
  3. 当我访问 zzz的时候给我代理到localhost:8000

Apache配置各个站点

修改httpd.conf

Mac 下Apache的配置文件在

/etc/apache2/httpd.conf

咱们设置三个虚拟主机,修改配置文件,去掉加载虚拟主机配置的注释#

Include /private/etc/apache2/extra/httpd-vhosts.conf

监听对应的端口(不要监听80了,一下子交给nginx)

Listen 8000
Listen 8080
Listen 9000

修改httpd-vhosts.conf

虚拟主机的配置文件在

/etc/apache2/extra/httpd-vhosts.conf

添加虚拟主机节点,相似这样来三个

<VirtualHost *:8080>
          DocumentRoot "/path"
          ServerName xxx
          <Directory "/path">
          Options Indexes FollowSymLinks
          AllowOverride All
          Order deny,allow
          Allow from all
          </Directory>
 </VirtualHost>

修改hosts文件

若是服务器在本地,咱们还须要把域名配置到localhost,Mac下hosts的配置文件在

/etc/hosts

简单添加一下咱们的三个主机

localhost xxx yyy zzz

修改nginx配置文件

Mac下使用homebrew安装的nginx配置文件在

/usr/local/etc/nginx/nginx.conf

而后添加Server节点

server {
    listen 80;
    server_name xxx;
    location /{
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}

proxy_set_header Host $host可使url始终保持配置的xxx等

这样重启nginx、Apache后在浏览器上输入xxx/就能够直接代理到http://127.0.0.1:8080了,不用端口号了

相关文章
相关标签/搜索