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

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

工作原理

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

正向代理

了解反向代理之前先了解一下正向代理,正向代理就是我们平时理解的代理,举个例子

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

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

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

反向代理

还是举个例子,caoliu的域名经常会变,而且会提供多个域名,一个域名被墙掉了,可以用其它的,但是访问每个域名返回的内容都是一样的,而且页面也没有重定向

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

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

区别&用途

其实明白了原理两者的区别很明显了,可以简单的这样区分正向代理和反向代理

反向代理对访问者时透明的(你觉得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了,不用端口号了

前nginx后Apache+Node反向代理的更多相关文章

  1. nginx与apache配合反向代理技术1

    序:最近在看Dimitri Aivaliotis的<Mastering Nginx>,刚好跆拳道课下班在路上看了反向代理服务器,准备在自己的博客VPS尝试一下 web代理服务器可以实现分布 ...

  2. nginx与apache配合反向代理技术2

    注意,上次我们只是简单的在同一台服务器模拟搭建了一个新的http服务器(启用了8080端口),使用的是apache,从而模拟了多台服务器实现的Nginx反向代理,通过Nginx向上游代理服务器发送请求 ...

  3. Nginx或Apache通过反向代理配置wss服务

    nginx配置参考 前提条件及准备工作: 1.假设ws服务监听的是8282端口(websocket协议) 2.已经申请了证书(pem/crt文件及key文件)放在了/etc/nginx/conf.d/ ...

  4. 使用nginx和tomcat配置反向代理和动静分离

    背景 本人主修的编程语言是Java语言,因此最开始接触的Web开发也是JSP技术.使用Java开发的Web应用需要部署在专门的服务器程序上运行,比如Tomcat.但是一般很少会有人将Tomcat作为用 ...

  5. APACHE 与IIS同时存在的情况下,给APACHE添加反向代理 共用80端口

    一.首先打开IIS,将IIS的端口改成81,不要让IIS占用了80端口 二.打开APACHE的httpd.conf配置文件,将里面的端口配置成80 三.打开APACHE的虚拟目录配置文件,如:http ...

  6. apache做反向代理

    实验目的 通过apache实现反向代理的功能,类似nginx反向代理和haproxy反向代理 环境准备 逻辑架构如下 前端是apche服务器,监听80端口,后端有两台web服务器,分别是node1和n ...

  7. Nginx插件之openresty反向代理和日志滚动配置案例

    Nginx插件之openresty反向代理和日志滚动配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.openresty介绍 1>.Nginx介绍 Nginx是一款 ...

  8. Apache 如何反向代理tomcat并且实现Session保持

    简介 LAMT=Linux+Apache+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下 ...

  9. Tomcat:利用Apache配置反向代理、负载均衡

    本篇主要介绍apache配置反向代理,介绍了两种情况:第一种是,只使用apache配置反向代理:第二种是,apache与应用服务器(tomcat)结合,配置反向代理,同时了配置了负载均衡. 准备工作 ...

随机推荐

  1. mysql基本信息收集

    1.下载安装 percona-toolkit 工具包http://www.percona.com/downloads/percona-toolkit/LATEST/tarball/2.运行下面两个工具 ...

  2. Nginx配置文件nginx.conf中文详解

    #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...

  3. Vue - 在v-repeat中使用计算属性

    1.从后端获取JSON数据集合后,对单条数据应用计算属性,在Vue.js 0.12版本之前可以在v-repeat所在元素上使用v-component指令 在Vue.js 0.12版本之后使用自定义元素 ...

  4. 用div加css做表格去掉外围边框

    通过div做表格时想加上边框,并且想取点外围边框: <div class="cont"> <div class="row"> <a ...

  5. c# 如何中List<object>中去掉object对象中的重复列数据?

    //去掉重复 var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.F ...

  6. JavaScript之基础篇

    标识符 命名要求 以字母.下划线或者$开头: 由字母.下划线.$和数字组成. 关键字和保留字 关键字.保留字不可以作为标识符. 大小写敏感 区分大小写. 基本数据类型 Number 整数 浮点数 特殊 ...

  7. SQL执行效率和性能测试方法总结

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  8. linux菜鸟日记(4)

    使用一个简单的for循环和if判断语句实现某个网段内所有ping所有客户机的shell程序: ..} do >&; then echo " ${i}通" else e ...

  9. javascript--Math相关

    最值:Math.max(1,2,3,5);//5 Math.min(1,2,3,5);//1 数组最值:var a=[1,2,3,5]; Math.max.apply(null, a);//最大值 M ...

  10. Curator Cache

    1.Curator Cache 与原生ZooKeeper Wacher区别 原生的ZooKeeper Wacher是一次性的:一个Wacher一旦触发就会被移出,如果你想要反复使用Wacher,就要在 ...