• 前nginx后Apache+Node反向代理


    前几天一直在被一个问题困扰,机器上跑的站点太多了,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 AllOrder 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了,不用端口号了


     




  • 相关阅读:
    MySQL 基础笔记
    form表单如何提交list集合到服务器实现数据交互
    FileInputStream&FileOutputStream文件复制后文件变大
    Exception:NoSuchMethodException
    Exception :java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
    C:Program FilesJavajdk1.8.0_11injava.exe'' finished with non-zero exit value
    Android导入Unity 3D运行后提示:your hardware does not support this application
    关于android support 升级为androidx
    错误整理 (关于unity打包)
    unity 打包报错Could not find com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.1.4
  • 原文地址:https://www.cnblogs.com/caryfang/p/4675840.html
Copyright © 2020-2023  润新知