精华内容
下载资源
问答
  • 2019-04-28 10:59:12

    在项目开发结束进行部署实施的时候我们往往需要进行服务的转发,这时就需要使用到nginx进行反向代理了。

    在使用nginx做反向代理的时候,有三种常用的方案(第一种是常见的一种,而第二和第三种方案则有共同性):

    方法一:只替换域名(即使用用户要访问的域名替换掉服务器的IP加端口)

    例:访问test.com/info/csdn.html 转发到 localhost:8080/info.html

    upstream domain {
      server localhost:8080 weight=5;
    }
    
    server {
        listen              80;
        server_name         test.com;
        access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
    
            proxy_pass http://domain;
        }
    
    }

     

    一个项目有时候是有很多个服务组成,这时候我们就需要根据url前缀转发到不同的服务

    例:

    test.com/prod/profile.html转发到 用户服务loca

    更多相关内容
  • node.js 做反向代理

    2022-01-24 10:10:03
    1. 安装http-proxy模块 npm install http-proxy 2. 使用http-proxy模块启动代理服务器 // 导入http模块 var http = require('http');...// 创建反向代理服务 var proxy = httpProxy.createProxyServer(); //

    1. 安装http-proxy模块

    npm install http-proxy

    2. 使用http-proxy模块启动代理服务器

    // 导入http模块
    var http = require('http');
    // 导入http-proxy模块
    var httpProxy = require('http-proxy');
    
    // 提供服务的端口号
    var PORT = 9900;
    
    // 创建反向代理服务
    var proxy = httpProxy.createProxyServer();
    // 监听错误事件
    proxy.on('error', function (err, req, res) {
        // 输出空白响应数据
        res.write('error!');
        res.end();
    });
    
    // 创建服务
    var app = http.createServer(function (req, res) {
        // 执行反向代理
        proxy.web(req, res, {
            // 目标地址
            target: 'http://222.80.xx.xx:9009'
        });
    });
    
    // 启动服务
    app.listen(PORT, function () {
        console.log('服务已启动', PORT);
    });

    说明:

    创建了一个提供反向代理功能的服务器,该服务器启动后监听9900端口(后台服务端口,就是接口的端口),接收到请求之后,将请求转发至目标地址(target,大多数情况下就是访问页面初始路径)

    展开全文
  • 使用nginx在指定端口做反向代理

    千次阅读 2020-09-27 10:09:49
    使用nginx做反向代理什么是代理、正向代理、反向代理? 什么是代理、正向代理、反向代理? 所谓代理其实就是通俗意义上的“将一件事情交给另一个人去”,因为网络通信其实是蛮复杂的一个过程,所以单纯依靠客户...

    什么是代理、正向代理、反向代理?

    代理

    所谓代理其实就是通俗意义上的“将一件事情交给另一个人去做”,因为网络通信其实是蛮复杂的一个过程,所以单纯依靠客户自己去与服务器直接做所有通信过程肯定会让人崩溃!!

    正向代理

    正向代理就是指代理客户端,意思就是说客户端向代理说明自己的请求,之后代理服务器会根据客户端的需求去和真正的目标服务器通信,把目标服务器返回的数据传给客户端。代理可以是虚拟的IP,所以比如说本机IP和目标IP本身并没有接入在同一个网络,借助虚拟的代理IP就相当于“我们接入在目标服务器的那个网络”,此时,我们的机子对外相当于隐藏了真实的本机地址,也可以获得更低的延迟。典型的如VPN虚拟网络。

    反向代理

    反向代理的概念则恰恰相反,客户端不用告诉代理服务器想像哪一个目标服务器请求数据,而是直接把“我有一个请求”告诉代理服务器,代理服务器自己去找一个真实服务器请求/接收数据。这种情况下相当于隐藏了真实服务器的地址。当我们请求 www.baidu.com 的时候,背后可能有成千上万台服务器可以为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
    (nginx负载均衡部分转自https://blog.csdn.net/aqleung/article/details/80923470

    nginx最基本的组成部分

    最基本,所以这里只讲一下调nginx一般要用到的指令、文件。

    下载

    如下图,随便找一个下载就得到压缩包,解压缩即可

    配置文件

    设置代理等,只需修改下图部分

    基础页面

    在启动nginx代理后,访问127.0.0.1默认打开的页面

    nginx.exe

    位置比较明显,就叫nginx.exe

    基本指令

    部分转自https://blog.csdn.net/ruoxiyun/article/details/86980913

    nginx -s reopen #重启Nginx
    nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
    nginx -s stop #强制停止Nginx服务
    nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)

    首先不是特别建议直接双击打开nginx,机制问题,因为windows上每双击一次nginx,就相当于执行了 start nginx命令,又启动了一次nginx,有时候双击一次就会同时开启多个nginx.exe,关也关不掉。

    nginx反向代理

    打开nginx.conf文件:

    进程与连接数量设置不做过多描述,可以参考官方文档

    官方文档的改写

    直接访问127.0.0.1,可以得到官方界面:
    在这里插入图片描述
    可以修改监听端口,使得可以通过指定端口访问本机的index.html
    在这里,我重新写了一个index.html,打开的效果如下:

    在这里插入图片描述
    注意!上图是我指定8000端口访问index.html,事实上直接访问127.0.0.1还是官方文档,也就是说nginx默认监听http协议的80端口。如果非要和index挂钩只需要重写对80端口的监听即可

    反向代理到其他网站

    我们可以自己新建一个server,通过监听其他端口反向代理服务器,一旦用户“访问”这个端口,nginx就会反向代理把网页信息传给我们。

    只监听端口

    如下图,令nginx监听8888端口,随便给一个server_name,写一个location。location的意思就是说我们要向哪个服务器做反向代理。
    每次完成修改后,记得在命令行输入nginx -s reload重新加载一次配置文件!
    在这里插入图片描述

    这里举个百度的例子。

    另外就是写法问题。location / {}这种写法就是默认的,也就是说我可以直接在浏览器地址栏输入127.0.0.1:8888发请求,nginx就会监听到并只给我们做百度的反向代理。
    如果说像上图那样是location /baidu.com {}的写法,则需要输入整个127.0.0.1:8888/baidu.com,否则nginx在只监听到127.0.0.1:8888请求后会只自动帮我们打开index.html

    如果想做骚操作,用什么127.0.0.1:8888/weibo.com访问百度也当然是可以的,配置文件只算是告诉nginx解析规则而已。

    单一端口多类处理

    我们可以看一下使用HTTP的URL的一般形式:
    http://<主机>:<端口>/<路径>?<参数>#<片段>

    既然说location / 后面加上路径就可以指定去访问某个网站,那么单个端口多个location也并非不可以。

    此时输入127.0.0.1:8888/baidu.com就是访问百度,
    输入127.0.0.1:8888/weibo.com就是访问微博了。

    展开全文
  • 通常,我们使用Nginx为后端WEB服务做反向代理或负载均衡,但如果我们的后端服务,并不是HTTP/HTTPS协议,而是TCP协议或WebSocket协议呢 最近遇到一个需求,我们的HTTPS以及MQTT服务端在海外云主机上,从大陆直连延时...

    通常,我们使用Nginx为后端WEB服务做反向代理或负载均衡,但如果我们的后端服务,并不是HTTP/HTTPS协议,而是TCP协议或WebSocket协议呢
    最近遇到一个需求,我们的HTTPS以及MQTT服务端在海外云主机上,从大陆直连延时丢包严重,但如果从香港转发的话,网络质量会好很多,于是在香港云主机搭建反向代理,同时代理HTTPS和MQTT服务。
    说到TCP协议服务的反向代理,有个出名的软件是HAProxy,HAProxy在TCP代理方面更专注一些。但由于我们的服务器大量使用Nginx,不想再使用额外的软件,于是准备用Nginx完成这一任务。
    其实Nginx经过1.9和1.11两个大版本的大跃进般开发,目前在功能和特性上,已经大幅超越HAProxy。在TCP/UDP协议的代理上已经很完善了,完全不用担心他能否胜任。
    需要注意的是,Nginx从1.9.0版本开始才支持TCP协议代理,1.9.13版本开始才支持UDP代理,并且需要安装 --with-stream模块,在使用前请先用

    nginx -V
    

    检查你的版本和模块安装情况,因为输出的信息都在一行,非常乱,可以这样来逐行输出方便观看:

    2>&1 nginx -V | tr ' '  '\n'
    

    以Ubuntu系统为例,默认的apt源安装的nginx并没有带此模块,还需要安装 nginx-extras 以开启 --with-stream功能

    sudo apt install nginx
    sudo apt install nginx-extras
    

    接下来修改Nginx配置TCP反向代理即可,假设我们的MQTT服务运行于mq.mypig.com的8883端口

    stream {
        server {
            listen 8883;
            proxy_pass mq.mypig.com:8883;
        }
    }
    

    需要注意的是,我们通常配置nginx都是在 /etc/nginx/sites-enabled/ 中配置,但查看 /etc/nginx/nginx.conf 就会发现,/etc/nginx/sites-enabled/ 中的配置文件,实际上是被包含在了http { } 块中去了,如果把上面的 stream { } 块放到 /etc/nginx/sites-enabled/ 中的配置文件中,实际上相当于把 stream { } 块放到了 http { } 块中,自然就出错了,所以我们需要在 /etc/nginx/nginx.conf 中添加 stream { } 块以配置TCP代理服务。
    更多参数查看Nginx官方文档,进行配置:http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html
    通常我们需要关注超时值问题主要是下面两个参数:
    proxy_connect_timeout
    代理服务器到后端服务器的连接超时值,默认60秒
    proxy_timeout
    代理超时值,即如果一条TCP连接已经建立,超过该值的时间没有任何数据在该连接上传输,则Nginx关闭该连接,默认10分钟

    划重点:使用Nginx代理TCP连接,我们要注意一点,我们的TCP连接,是否开启了keep-alive心跳包,我们这个例子里,代理的是MQTT的TCP连接,由于MQTT客户端与服务端,默认设置了每60秒发一个心跳包,所以总是有数据在TCP连接上传输,而Nginx代理TCP连接时,proxy_timeout默认为10分钟,所以不会有什么问题。但如果你代理的TCP连接,并不会像MQTT那样发心跳包,那么在没有数据传输的时候,超过proxy_timeout设定的10分钟,Nginx就会将你们的TCP连接断开。如果我们代理的是基于TCP的自定义协议,你需要关注协议的实现,使用socket建立TCP连接,默认情况下keep-alive的不启用的,就算主动启用了,默认心跳时间是2小时,所以我们在编写代码的时候需要开启TCP keep-alive并设置合理的心跳时间。

    至此,我们已经完成了TCP协议的反向代理,MQTT服务已经可以通过代理正常工作了,但是存在的一个问题是,在MQTT服务端,所有的客户端IP都是同一个,即Nginx机器的IP,因为Nginx只是无脑转发TCP数据包,没有办法告诉后端服务器来源IP是什么。这样虽然不影响业务逻辑,但不利于分析客户来源以优化、调整线路。

    于是我们考虑开启MQTT的WebSocket连接功能,允许客户端通过WebSocket协议连接。MQTT服务使用WebSocket还是有很多优点的,一来,常见的MQTT客户端,无论是Android客户端还是PC客户端,都支持WebSocket协议连接MQTT,可以无缝切换,二来,前端网页上的javascript也可以通过WebSocket协议直接连接MQTT服务。

    对我们来说更重要的是,WebSocket建立连接时,会先发送标准HTTP请求头,利用这个HTTP请求头,我们可以在中间做很多额外的事情,比如身份验证、权限控制,我们可以根据HTTP请求头的信息,决定是否放行这个连接,还是直接拒绝关闭。同样,对于Nginx来说,Nginx在对WebSocket进行反向代理时,可以在建立连接时的HTTP请求头中放入一些内容,比如 X-Forwarded-For ,这样我们的后端服务就可以知道客户端的来源IP。

    说干就干,在Nginx上代理WebSocket,实际上和代理HTTP/HTTPS差不多,可以查看Nginx官方文档来进行配置:
    http://nginx.org/en/docs/http/websocket.html

    配置需写在http { } 块,而不是写在stream { } 块中,所以我们直接在 /etc/nginx/sites-enabled/ 下配置即可
    我们的后端为使用SSL加密的WebSocket协议,运行于8084端口,路径为/mqtt
    wss://mq.mypig.com:8084/mqtt
    在Nginx反向代理上这样配置:

    server {
        listen 443 ssl;
        server_name mq.mypig.com;
        ssl_certificate /home/ubuntu/cert/mq.mypig.com.crt;
        ssl_certificate_key /home/ubuntu/cert/mq.mypig.com.key;
    
        location = /mqtt {
            proxy_http_version 1.1;
            proxy_pass https://mq.mypig.com:8084;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Port $remote_port;
            proxy_connect_timeout 60s;
            proxy_read_timeout 120s;
            proxy_send_timeout 120s;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    

    我们在Nginx代理服务器上使用443端口,这样可以和HTTPS服务复用同一个端口,只是在PATH上做区分。其实整个配置和HTTPS的反向代理差不多,我们需要把后端的SSL证书拿到Nginx反向代理服务器上,因为我们需要在Nginx上对数据解密,这样Nginx才能检查和修改请求头的内容(添加X-Forwarded-For请求头),然后又用SSL加密发送到后端。当然,如果是用来做负载均衡的话,Nginx和后端服务在同一个机房,同一个VPC,则数据在Nginx上SSL解密后直接明文发到后端即可,这样后端服务就不需要配置SSL证书,同时也减轻后端解密的计算压力。
    和HTTP的的反向代理不同的地方,在于:

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    

    一个是启用HTTP 1.1,因为Nginx对HTTP的反向代理,默认使用HTTP 1.0连接到后端,那样没法保持长连接,后端作出HTTP响应后,连接就被掐断了,所以启用HTTP 1.1以支持长连接。
    而对于Upgrade 和 Connection,为什么要让Nginx加这个请求头,对于WebSocket协议,客户端不是已经加了Upgrade和Connection请求头了吗?那是因为根据HTTP协议规范,Upgrade和Connection属于hop-by-hop请求头,Nginx作为中间的代理,按照规范不能直接转发hop-by-hop header ,所以需要我们手工强制设定。

    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Port $remote_port;
    

    的作用在于,通过添加这些HTTP请求头,Nginx可以告诉后端服务器,客户端原本请求的目标HOST和目标端口,客户端自身的IP和客户端发起连接的端口。
    同样,需要关心的是连接的超时值:
    proxy_read_timeout
    proxy_send_timeout
    这两个配置的作用等同于TCP代理的proxy_timeout参数,如果Nginx在超过proxy_read_timeout的时间没有从后端读到数据,或者在超过proxy_send_timeout的时间没有向后端发送数据,那么Nginx会关闭该连接

    划重点:很多同学就是在这里被坑了,没有去配置这两个参数,因为Nginx对WebSocket的代理,属于HTTP/HTTPS代理这一类,所以Nginx这两个参数默认的超时值是60秒,如果你用它代理MQTT,MQTT的默认心跳时间是60秒,所以会发现连接被频繁断开。所以你需要关注WebSocket协议上跑的服务,是否会发心跳包,心跳包间隔是多少,一定要小于Nginx的超时值,或者调高Nginx的超时值,以免莫名其妙被Nginx关闭了连接

    最后,我们的MQTT服务端使用的是 EMQ: http://www.emqtt.com/
    再次安利这个好东西,只需在配置文件中启用

    listener.wss.external.proxy_address_header = X-Forwarded-For
    listener.wss.external.proxy_port_header = X-Forwarded-Port
    

    即可自动处理Nginx代理添加的请求头,从而正确显示客户端IP和端口



    本文由encoderlee发表于CSDN博客:https://blog.csdn.net/CharlesSimonyi/article/details/90122916 转载请注明出处

    展开全文
  • 使用nginx(https)为tomcat(http)做反向代理 公司使用tomcat部署了一套服务,需要通过互联网对外提供服务。鉴于安全考虑,公司要求使用https对外提供服务,在配置nginx反向代理时,通过http为tomcat做反向代理时...
  • 最近在将一些项目的rest api迁移到.net core中,最开始是用的Nginx做反向代理,将已经完成切换的部分切入系统,如下图所示: 由于迁移过程中也在进行代码重构,需要经常比较频繁的测试,以保证能及时发现引入的问题...
  • 然后发现可以在内网搭建一个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给内网...
  • 目录ngrok来做反向代理介绍使用 ngrok来做反向代理 介绍 ngrok是做反向代理的神器,之前用的花生壳,但其速度属实有点慢。现在自己买了服务器,可以尝试下ngrok自己搭建代理,其实我在写GitHub的很多开源项目中看到...
  • windows上用apache做反向代理

    千次阅读 2017-10-26 16:08:24
    如果有nginx环境,那是很简单的,但是如果没有nginx环境,只有apache环境的话,也可以通过设置一个反向代理服务器,来实现需求。环境 win7 xampp(含apache服务) nodejs(启动一个运行在本地8360端口的服务) 操作...
  • NGINX做反向代理缓存服务器原理

    千次阅读 2022-03-17 15:19:52
    反向代理: 与反向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源,也可以设置一个代理服务器,它提供的服务就是反向代理反向代理服务器接收来自Intern
  • 反向代理 反向代理配置 介绍Nginx Nginx是一款自由的、开源的、高性能的HTTP服务器和 反向代理 服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以...
  • Nginx反向代理Docker容器 由nginx支持的反向代理的Docker映像。 概念 该git / docker图像旨在与反向代理示例以及其他两个Docker容器一起进行演示,以便人们可以轻松地学习如何使用此Docker容器创建反向代理: ...
  • Nginxtcp反向代理时,客户端一直掉线,我用的Nginx版本为:1.12.1,下面是Nginx配置 ``` stream { tcp_nodelay on; server { listen 1011 so_keepalive=on; proxy_connect_timeout 2s; proxy_timeout 1m; ...
  • 使用Java编写的反向代理程序(源代码),通过简单的参数配置即可实现某些特定站点的反向代理,并在此过程中改变一些站点的特定行为。例如:允许特点站点跨域访问被代理的站点,或者屏蔽被代理站点识别请求访问客户端...
  • 主要介绍了JAVA HTTP反向代理实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
  • Nginx实现反向代理

    千次阅读 2022-04-07 09:37:56
    1 Nginx介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru...Nginx是一款轻量级的Web 服务器/反向代理服务
  • 反向代理 一、为啥要叫反向代理  正向代理隐藏真实客户端,反向代理隐藏真实服务端。 二、反向代理解决的问题  反向代理解决的就是跨域,在前后端联调的情况下,前端有服务器,后端也有服务器,那么联调时,就存在...
  • nginx做反向代理,请求接口

    千次阅读 2019-06-13 09:24:04
    nginx做反向代理 跨域会造成携带的cookie消失,所以本地一个本地转发 例如:请求 http://106.12.88.99:9999(示例) 线上接口,我们改为本地locahost请求, 首先下载nginx,解压后打开nginx.conf文件,编辑 1、...
  • github 中很多项目都有一个 readme 文件,很多人喜欢在文件中添加自己的创作或封面图片,比如 substack 为他的每个项目绘制了一个 logo。这些图片在 github 中能直接在页面中显示出来,不过 url 被替换成了 github ...
  • 该资源是“Java实现的反向代理程序(编译版)”使用到的一些公共JAR包,主要包含“commons-text-1.4.jar”和“javax.servlet_1.0.0.0_2-5.jar”这两个JAR包,共有兴趣的同道人下载。
  • nginx替mongodb做反向代理的坑

    万次阅读 2019-09-03 21:37:18
    mongodb需要tcp 而nginx提供了http 所以会出错 需要在nginx.conf中增加如下配置 stream { server { listen <your incoming Mongo TCP port>; proxy_connect_timeout 1s; proxy_timeout 3s;... pr...
  • 用Fiddler做反向代理

    千次阅读 2019-05-14 18:07:39
    关于反向代理是怎么一回事请读者自行了解,本文不赘述,简单理解就是让真实提供服务的网站躲在代理服务的背后,请求首先是到代理,再由代理转发给背后的网站,再把网站的响应返回出去。基于这个原理,作为代理的...
  • 1.1 http:www.baidu.test.com默认是80,访问“/”利用反向代理,然后访问本地8083; 1.2 8083代表本地的前端工程访问地址,前端需要访问后台数据,”/”,继续代理到后台地址9803; 1.3 这样就做到了只要开通80...
  • 由于Nginx反向代理后,在应用中取得的IP都是反向代理服务器的IP,取得的域名也是反向代理配置的Url的域名。 三、解决方案 解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递...
  • 反向代理时添加另一个规则 #反向代理 location / { proxy_pass http://localhost:9001; } #解决js css 访问不到的问题 location ~ .* { proxy_pass http://localhost:9001; proxy_set_header Host $...
  • Linux部署Nginx实现反向代理

    千次阅读 2022-04-18 13:59:08
    Linux部署Nginx实现反向代理
  • windows 下Nginx做反向代理下载文件

    千次阅读 2020-07-31 11:24:37
    由于最近公司文件的浏览和下载需求。特此记录。 一. 下载nginx, 二. 在Windows下操作nginx,需要打开cmd 进入到nginx的安装目录下 1.启动nginx: start nginx 或 nginx.exe 2.停止nginx(stop是快速停止nginx,...
  • 最近了一个世界杯比赛日程的小程序,只有查看日程的功能,所以很快就发布上线了。后边想加入用户预测功能,但是时间紧、前后端实现又比较复杂,突然灵机一动想到用webview嵌入FIFA官网的比赛预测页面。 微信小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,760
精华内容 75,104
关键字:

如何做反向代理