场景

在公司会有很多测试的机器,或者一些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. OpenStack组件系列☞Keystone

    Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证.服务规则和服务令牌功能的模块.用户访问资源需要验证用户的身份与权限,服务执行操作 ...

  2. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  3. IE下form表单密码输入框可以输入中文问题

    今天遇到了一个问题: 在IE浏览器登录界面,密码输入框,切换到中文输入法,竟然可以输入中文,已经设置过了input的type="password". 解决方法: 可以给input设 ...

  4. SQL 变量,运算符

    一.变量 SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. (一).局部变量 使用declare关键字给变量声明, ...

  5. 2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承

    title author date CreateTime categories WPF Frame 的 DataContext 不能被 Page 继承 lindexi 2018-06-11 10:48 ...

  6. jQuery中动态创建、添加元素的方法总结

    <input type="button" value="创建元素" id="btn"> <div id="box ...

  7. jackson java转json hibernate懒加载造成的无限递归问题

    @JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties jackson中的@Jso ...

  8. Vue 组件中的data数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 在Vue 中调用数据出现属性不存在的问题

    这已经是我在调用数据时趟过几次的坑了,索性记录下来防止后面再犯: 一般我们请求数据来渲染一个页面的时候,请求下来的数据基本上都是数组或是对象,再通过列表循环和插值表达式渲染的页面:在data 中提前声 ...

  10. git提交时如何忽略一些文件

    起因 在使用git对软件进行版本管理的时候我们总有一些不需要提交到版本库里的文件和文件夹,或者在管理一个实际应用的开源项目的时候,不可以把带有数据库信息的文件上传到开源平台当中,这个时候我们就需要让g ...