场景

在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦。

解决方案

使用本地Nginx,并配置 C:\Windows\System32\drivers\etc\hosts(/etc/hosts Linux/MacOS.)

目标

  1. 支持Cookie会话转发
  2. 支持Websocket会话
  3. 支持301等重定向,redirect

以上三点具备之后,可以说基本上覆盖100%的web功能开发了。

行动方案

server {
listen 80;
server_name some.company-inc.com;
#charset koi8-r; error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} location ~ /microservices/api/ws {
proxy_http_version 1.1;
proxy_pass http://10.11.11.11:8084;
proxy_redirect default;
proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Origin "";
proxy_buffering on;
proxy_send_timeout 300s;
client_max_body_size 2048M;
} location / {
proxy_pass http://10.11.11.11:8084;
proxy_redirect http://some.company-inc.com:8084/ /;
proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;
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_connect_timeout 600s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
client_max_body_size 2048m;
} }

以上配置经过验证。

需要说明的事项

A. websocket和普通http代理的不同就是,前者需要这个三项:

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

且Websocket是长时间保持的连接,因此需要延长会话时间,否则会被Nginx提前断开:

proxy_connect_timeout 600s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

B. Cookie基于域名,因此目标机器发布的Cookie,需要修改为你本地自定义域名:

proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;

本例中,目标机器地址为10.11.11.11,本地浏览器中输入的域名为some.company-inc.com。这样因访问浏览器,服务端写到本地浏览器时,Cookie就会正确被浏览器接受。

另一方面,浏览器发起请求时附带的Cookie,将会被Nginx代理转换为实际的目标机器的Cookie,Domain会被还原成10.11.11.11。

C. 当服务器发出301这样的重定向请求时,Location字段需要经过处理,否则浏览器会转发到错误的地址。

proxy_redirect   http://some.company-inc.com:8084/    /;

如果不加上述配置,当收到Redirect请求时,如果我没有记错,浏览器会访问诸如 http://some.company-inc.com/10.11.11.11:8084/xxxxxxx 这样的地址。

D. 以下配置是解决可能遇到的跨域问题,如果遇到JS请求出现的CORS相关的错误时,可能需要这个配置。

proxy_set_header Origin "";

用本地自定义域名访问远程服务器,并支持websocket和cookie的更多相关文章

  1. 自定义域名访问本地WEB应用

    自定义域名访问本地WEB应用 本地安装了WEB服务端,怎样通过自定义域名方式实现从公网访问本地WEB应用? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动WEB服务端 默认安装的WEB ...

  2. #在windows上使用ngix重定向目录访问远程服务器文件详细实例

    为了在开发环境保持于生产环境相同的访问远程服务器文件资源的目录配置,需要在开发环境(windows)在远程文件服务器使用nignx重定向文件目录,因为网上的资料大都是copy的,解释比较笼统,也没有具 ...

  3. git学习------>在CenterOS系统上安装GitLab并自定义域名访问GitLab管理页面

    目前就职的公司一直使用SVN作为版本管理,现在打算尝试从SVN迁移到Git.安排我来预言并搭建好相关的环境以及自己尝试使用Git.今天我就尝试在Center OS系统上安装GitLab,现在在此记录一 ...

  4. [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器

    本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...

  5. SQLServer怎样把本地数据导入到远程服务器上(转载)

    平常用到mssql时间比较少,总是过一段时间就忘记应该怎么操作了.当要做mssq把本地数据导入到远程服务器的时候,就去网上搜索很久都没有图解的,所以今天自己收集一下免得下次又到处去找.希望对自己,同时 ...

  6. 使用nodejs和Java访问远程服务器的服务

    既然这篇文章用的是nodejs和Java访问远程服务器的服务,那么咱们先用另一门编程语言,SAP的ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧. 这是我用ABAP编程语言实现服务的类:Z ...

  7. SQLServer2008 将本地excel导入到远程服务器表

    --1.创建链接服务器,相当于创建一个访问远程数据库的快捷方式 exec sp_addlinkedserver 'TestLink', ' ', 'SQLOLEDB ', '111.11.1.111' ...

  8. 基于frp的内网穿透实例2-通过自定义域名访问部署于内网的 web 服务

    原文地址:https://wuter.cn/1837.html/ 一.想要实现的功能 1.将部署在自己电脑上的网站用于公网访问. 2.将未备案域名解析至国内服务器(即我宿舍的老母鸡上). 二.服务端配 ...

  9. wamp设置自定义域名访问php网站

    wamp是一个在window系统下很不错的php开发套件,一般我都是使用此套件在本地进行开发和测试的 特别是alias功能特别好,可以同时开发N个php网站而不互相影响 但alias有一个问题,它其实 ...

随机推荐

  1. 2019-2-24-VisualStudio-过滤输出窗口文本

    title author date CreateTime categories VisualStudio 过滤输出窗口文本 lindexi 2019-2-24 11:10:7 +0800 2019-0 ...

  2. tensorflow 卷积层

    TensorFlow 卷积层   让我们看下如何在 TensorFlow 里面实现 CNN. TensorFlow 提供了 tf.nn.conv2d() 和 tf.nn.bias_add() 函数来创 ...

  3. IDEA 通过数据库生成entity实体类

    IDEA利用数据库生成entity类教程 1.在左上角有一个View 选项 2. 然后选择 TOOL Windows 3. 然后选择Database然后会弹出一个窗口 4.选择+号 5.选择data ...

  4. behavior planning——12.example cost funtion -lane change penalty

      In the image above, the blue self driving car (bottom left) is trying to get to the goal (gold sta ...

  5. codedecision P1113 同颜色询问 题解 线段树动态开点

    题目描述:https://www.cnblogs.com/problems/p/11789930.html 题目链接:http://codedecision.com/problem/1113 这道题目 ...

  6. C#循环语句练习(三)

    for循环拥有两类:一.穷举:把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. (1).羽毛球拍15元,球3元,水2元.200元每种至少一个,有多少可能. (2).百鸡百钱:公鸡2文钱一 ...

  7. Python--day67--Jsonresponse响应介绍和路由系统的分组命名匹配方式(简单介绍)

    1,Jsonresponse响应介绍: ,2,路由系统的分组命名匹配方式:(简单介绍)

  8. DOMjudge配置

    DOMjudge配置补充 系统环境为 Debbian GNU/Linux 9 (stretch) 64-bit 在Web server configuration中, ln -s etc/apache ...

  9. [全+转载] solaris 网络配置

    ===================== 较为重要的几个文件: /etc/nodename                      主机名(即 hostname命令的输出) /etc/defaul ...

  10. H3C 通配符掩码的应用示例