前几天一直在被一个问题困扰,机器上跑的站点太多了,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. UWP 判断windows mobile是使用的实体键还是虚拟按键

    最近在写启动屏幕,发现虚拟按钮会挡住,启动屏幕的最下面的元素,大概有50 px.可是有什么办法知道手机是用的实体键还是虚拟按键吗? 如下图.可以看到红色的部分显示了一点点.代码里设置的是60px. 在 ...

  2. Swift String类型常规操作

    去除string 首尾的空格var str = " Hello the world   "let whitespace = NSCharacterSet.whitespaceAnd ...

  3. `这个符号在mysql中的作用

    ` 是 MySQL 的转义符,避免和 mysql 的本身的关键字冲突,只要你不在列名.表名中使用 mysql 的保留字或中文,就不需要转义. 所有的数据库都有类似的设置,不过mysql用的是`而已.通 ...

  4. 改变按钮在iPhone下的默认风格

    -webkit-appearance: none; "来改变按钮在iPhone下的默认风格,其实我们可以反过来思路,使用"appearance"属性,来改变任何元素的浏览 ...

  5. sqlmap 帮助信息

    Usage: sqlmap.py [options] 选项: -h, --help 显示基本的帮助信息并退出 -hh 显示高级的帮助信息并退出 --version 显示程序版本号并退出 -v VERB ...

  6. junit的学习

    junit 是一种单元检测的工具包,他能解决的问题主要是有两点 : 1.  不用将方法都调到main方法去执行一次来看结果 2.  测试的结果可以不用我们人工去对比,这里主要使用的是junit的断言类 ...

  7. Gridview中几个Button的应用

    gridview中有三种方式添加button的应用,CommandField.ButtonField.TemplateField中加Button这三种方式.三种方式都可以实现同样的功能,但在实现某些功 ...

  8. Eclipse 执行成功的 Hadoop-1.2.1 WordCount 源码

    万事开头难.最近在学习Hadoop,先是搭建各种版本环境,从2.2.0到2.3.0,再到1.2.1,终于都搭起来了,折腾了1周时间,之后开始尝试使用Eclipse编写小demo.仅复制一个现成的Wor ...

  9. JavaScript读书笔记(一)

    自动类型转换 在JavaScript中,使用 == .=== 和 - 等运算符能够使得类型自动转换. 关于不同类型的值的比较 flase == 0; //true "" == fl ...

  10. js基础3

    内置对象 内置对象就是JS提供的一套工具箱,我们通过内置可以很方便的进行一些操作. Math对象: Math.ceil() //向上取整,天花板 Math.floor() //向下取整,地板 Math ...