nginx 端口转发
概述
这两天在写 go 项目, 一个 HTTP 服务器. 之前写的是 php 项目, nginx 监听80端口, 根据域名将请求分配给不同项目. 现在换了 go, 自然也想延续这个操作, 毕竟都是跑在同一台服务器上. 那么问题来了, 我的nginx 监听80端口的同时, go 服务器是无法同样监听80端口的. 这该如何是好啊, 给我整的一脸懵逼.
nginx 转发 go 服务
不过想了一下, 发现自己进入了思维误区. 为什么都要监听80端口呢? go 服务监听其他端口, 然后 nginx 将请求进行端口的转发不就可以了么. 真是个傻子. 搜了一下 nginx 的配置, 确实有端口转发的配置. 如下:
#配置负载均衡池
upstream test_go_pool{
server 127.0.0.1:8090;
}
#Demo2端口转发
server {
listen 80;
server_name test.go.com;
error_log /var/log/nginx/test_go.error.log;
access_log /var/log/nginx/test_go.access.log;
#将所有请求转发给均衡池的应用处理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://test_go_pool;
}
}
到这里, 如果 go 服务已经启动了, 应该就没有问题了. (如果是线上, go 服务的端口不用对外开放, 仅供内部 nginx 访问即可)
docker 访问宿主网络
但是我的环境访问失败了. 究其原因, 我的 nginx 是跑在 docker 中的, go 服务是跑在宿主主机上的. 所以在对127.0.0.1
回环地址访问的时候, 没有访问的宿主主机. 解决的方向也很清晰, 只要能够访问到宿主主机的网络就行了.
方案一
最先想到的方案, 就是将127.0.0.1更换成宿主主机的 IP. mac 下执行 ifconfig
, 可以找到本机的 IP 地址. 将地址更换之后, 就可以了. 但是如果是移动网络等, IP 经常换的话, 就很难受了.
image-20200813233442407
方案二
更改网络链接方式. 虚拟机网络的链接方式有: bridge(桥接网络), host(共用网络), 以及无网络.
docker 默认使用的是桥接的形式, 如果换成host
, 就没有访问不到的问题了.更改之后, 可以直接通过127.0.0.1
回环地址访问, 就没有 IP 更换的问题了. 但同时的, host 方式会将虚拟机的所有端口全都与主机共用, 隔离性太差.
方案三
经过一番摸索, 找到了宿主主机的名字: docker.for.mac.host.internal
. 将地址更换成这个, docker 会自动映射到宿主主机上.
至此, 我的问题已经解决了. 不过就在我准备收手的时候, 又让我找到了另外一个.
方案四
方案三的方式, 看名字也知道, 这个映射是针对 mac 的. 如果不是在 mac 上装的 docker 怎么办呢?
host.docker.internal
这个DNS 名称, 可以直接映射到宿主主机. 完美解决. 同时: gateway.docker.internal
是网关的名称.
结束.... 简单记录一下.
- spring之config.xml完整版示例
- 前端MVC Vue2学习总结(五)——表单输入绑定、组件
- 【HCTF】2017部分Web出题思路详解
- 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
- 如何移除Android应用广告
- 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定
- 前端MVC Vue2学习总结(二)——Vue的实例、生命周期与Vue脚手架(vue-cli)
- hive具体操作
- hive中配置hwi
- 从零开始内网安全渗透学习
- hive启动后相关操作
- 开源API测试工具 Hitchhiker v0.10 - 中文版
- 强大的API测试工具Hitchhiker v0.9 基于UI的断言测试,回顾2017
- 开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何在Windows中安装多个python解释器
- PHP设计模式之抽象工厂模式实例分析
- 使用python matploblib库绘制准确率,损失率折线图
- Django REST Swagger实现指定api参数
- matplotlib.pyplot.matshow 矩阵可视化实例
- php+mysql开发的最简单在线题库(在线做题系统)完整案例
- python中元组的用法整理
- PHP错误提示It is not safe to rely on the system……的解决方法
- PHP使用mysqli同时执行多条sql查询语句的实例
- 在tensorflow下利用plt画论文中loss,acc等曲线图实例
- PHP生成短网址的思路以及实现方法的详解
- ThinkPHP 3.2.3实现加减乘除图片验证码
- Python数据相关系数矩阵和热力图轻松实现教程
- PHP中md5()函数的用法讲解
- thinkPHP框架实现的简单计算器示例