Nginx 实战-05-nginx 反向代理实现域名到指定的 ip

前言

大家好,我是老马。很高兴遇到你。

我们为 java 开发者实现了 java 版本的 nginx

https://github.com/houbb/nginx4j

如果你想知道 servlet 如何处理的,可以参考我的另一个项目:

手写从零实现简易版 tomcat minicat

手写 nginx 系列

如果你对 nginx 原理感兴趣,可以阅读:

从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?

从零手写实现 nginx-02-nginx 的核心能力

从零手写实现 nginx-03-nginx 基于 Netty 实现

从零手写实现 nginx-04-基于 netty http 出入参优化处理

从零手写实现 nginx-05-MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)

从零手写实现 nginx-06-文件夹自动索引

从零手写实现 nginx-07-大文件下载

从零手写实现 nginx-08-范围查询

从零手写实现 nginx-09-文件压缩

从零手写实现 nginx-10-sendfile 零拷贝

从零手写实现 nginx-11-file+range 合并

从零手写实现 nginx-12-keep-alive 连接复用

从零手写实现 nginx-13-nginx.conf 配置文件介绍

从零手写实现 nginx-14-nginx.conf 和 hocon 格式有关系吗?

从零手写实现 nginx-15-nginx.conf 如何通过 java 解析处理?

从零手写实现 nginx-16-nginx 支持配置多个 server

目标

我想实现访问 http://github/houbb 转发到 http://127.0.0.1:3000

准备工作

实现一个简单的 http 服务

nodejs http

>node -v
v20.10.0>npm -v
10.2.3

代码编写

const http = require('http');// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {// 设置响应头res.writeHead(200, {'Content-Type': 'text/plain'});// 发送响应内容res.end('Hello World!\n');
});// 监听端口 3000
server.listen(3000, '127.0.0.1', () => {console.log('Server running at http://127.0.0.1:3000/');
});

启动

λ node http.js
Server running at http://127.0.0.1:3000/

测试效果:

>curl http://127.0.0.1:3000/
Hello World!

如何通过 nginx 设置反向代理,让我们访问 http://githubhoubb 的请求转发到 http://127.0.0.1:3000

要通过 Nginx 设置反向代理,将访问 http://githubhoubb 的请求转发到 http://127.0.0.1:3000,需要编辑 Nginx 的配置文件来定义一个 server 块和 location 块。

以下是配置的示例步骤:

1. 修改配置文件

找到 nginx 文件,

添加 server 块**:在 http 块内部,添加一个新的 server 块,用于监听 80 端口(HTTP 默认端口):

```nginx
server {listen 80;server_name githubhoubb;  # 这里应为 githubhoubb 或者你希望的域名location / {proxy_pass http://127.0.0.1:3000;  # 转发到本机的 3000 端口proxy_set_header Host $host;  # 设置原始请求的 Host 头proxy_set_header X-Real-IP $remote_addr;  # 设置原始请求的 IP 地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置 X-Forwarded-For 头proxy_set_header X-Forwarded-Proto $scheme;  # 设置 X-Forwarded-Proto 头}
}
```

2. 验证配置正确性:

λ nginx -t
nginx: the configuration file D:\tool\nginx\nginx-1.26.0\nginx-1.26.0/conf/nginx.conf syntax is ok
nginx: configuration file D:\tool\nginx\nginx-1.26.0\nginx-1.26.0/conf/nginx.conf test is successful

3. 重载 Nginx 配置

为了使更改生效,你需要重载 Nginx 的配置。在命令行中运行以下命令:

```sh
nginx -s reload
```

4. 测试验证

curl http://githubhoubb

现在,当你尝试访问 http://githubhoubb(或者你在 server_name 中设置的域名),请求应该会被转发到 http://127.0.0.1:3000

发现,依然无效。

λ curl http://githubhoubb
curl: (6) Could not resolve host: githubhoubb

发现这里如果想成功,必须和 DNS 结合起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杂谈-青少年信奥赛

青少年信奥赛详解 一、引言 青少年信息学奥林匹克竞赛(简称信奥赛或NOI)是一项面向全球青少年的计算机科学竞赛,旨在通过竞赛的形式,激发青少年对计算机科学和编程的兴趣,培养他们的创新思维和解决问题的能力。自诞生…

【c语言】探索内存函数

探索内存函数 memcpy函数memmove函数memset函数memcmp函数: memcpy函数 memcpy函数声明: void * memcpy ( void * destination, const void * source, size_t num );将source空间下的num个字符复制到dest中去 函数的使用: 将字符数组a的5字…

用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)

一 灵感: 在2022年的暑假,也就是我即将迈进高三的那个暑假,我并没有察觉自己应该要学习了,还是和过往的暑假一样玩着王者荣耀,凌晨2点睡觉,中午12点起床。我依稀记得这种状态一直持续到8月19。然而离开学还…

【MySQL】Linux安装MySQL

一、center OS环境准备 为了在Linux系统中查看MySQL5.8与8.0版本的区别 我们要准备两个虚拟机,需要的软件:VMware和CentOS7 因为博主之前在学习redis的时候已经安装过一个虚拟机了,所以我就直接克隆了一个CentOS2.0 修改mac地址&#xff0…

STM32作业实现(二)串口控制led

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

用python画一艘“福建舰”

import turtle # 设置画布和画笔 screen turtle.Screen() screen.bgcolor("white") pen turtle.Turtle() pen.speed(10) pen.color("blue") pen.penup() # 航母主体(简化为一个矩形) pen.goto(-200, 0) pen.pen…

路由和交换网络技术有哪些内容?

1. 路由器和交换机的基本概念:了解路由器和交换机的定义、功能和区别,以及它们在网络中的重要作用。 2. 路由协议:掌握常见的路由协议,如静态路由、动态路由和默认路由,以及它们的工作原理和使用场景。 3. VLAN和IP地址…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一:List 集合的基础 1.1 什么是 List 集合? List 集合是 Java 集合框架中的一种有序、可重复的数据结构,它继承自Collection 接口,允许存储多个元素。 与数组不同,List 集合的大小是动态可变的,可以根据…

通过指针变量访问整型变量

有两个与指针变量有关的运算符: (1)&:取地址运算符。 (2)*:指针运算符(或称间接访问运算符)。 例如:&a为变量a的地址,*p为指针变量p所指向的存储单元。 编写程序: 运行结果…

【面试经典150题】移除元素

目录 一.移除元素 一.移除元素 这题的思路非常清晰&#xff0c;可以使用迭代器遍历找到需要删除的元素使用erase删除即可&#xff1a; #include<iostream> #include<vector>using namespace std;class Solution { public:int removeElement(vector<int>&…

设计模式(六)结构型模式---桥接模式

文章目录 桥接模式简介结构优点UML图具体实现UML图代码实现 桥接模式简介 桥接模式是一种将抽象与实现分离&#xff0c;使它们独立变化。然后利用组合关系来代替继承关系&#xff0c;大大的降低了抽象和实现的耦合度的设计模式。实际使用&#xff1a; JDBC源码分析&#xff0c…

C语言习题~day26

1.以下关于枚举的说法&#xff0c;哪个是正确的&#xff1f; A.枚举类型可以具有浮点数作为枚举值。 B.枚举类型在内存中存储为整数。 C.枚举类型可以包含字符串作为枚举值。 D.枚举类型不能作为函数的参数传递。 B 2.下面代码的结果是&#xff1a;&#xff08; &#xff0…

Kotlin 继承和实现

文章目录 前言继承&#xff08;extend&#xff09;实现&#xff08;implement&#xff09;继承与实现 前言 在 Kotlin 中&#xff0c;继承和实现都是在类名后使用冒号:&#xff0c;后边加上其他类或接口的名称来表示&#xff0c;二者之间写法没有太大区别&#xff08;类需要加…

Xcode下载安装

1.Xcode可用版本判断&#xff1a; 2.Xcode下载安装&#xff1a; 方案1:AppStore 下载更新 若方案1失败则 方案2:指定版本Xcode包下载解压安装 苹果下载 3.Xcode命令行工具插件安装 xcode-select --install 备注&#xff1a; xcode_x.x.x.xip(压缩包存在时效性(使用前24h/…

Mac专用投屏工具:AirServer 7 for Mac 激活版下载

AirServer 7 是一款在 Windows 和 macOS 平台上运行的强大的屏幕镜像和屏幕录制软件。它能够将 iOS 设备、Mac 以及其他 AirPlay、Google Cast 和 Miracast 兼容设备的屏幕镜像到电脑上&#xff0c;并支持高质量的录制功能。总的来说&#xff0c;AirServer 7 是一款功能全面的屏…

Mybatis编写SQL

文章目录 一、用注解编写1.1 增普通增加获取自增ID 1.2 删和改1.3 查单表查询多表查询 二、用xml编写2.1 使用xml的流程2.2 增普通增加获取自增ID 2.3 删 和 改2.4 查 三、#{} 和 ${}3.1 #{} 、${}3.1 预编译 SQL 、即时编译SQL 两种写法是可以同时存在的 一、用注解编写 1.1 …

QuillEditor+vue3 本身不支持行高的配置,那么如何配置行高?

通过查阅官方文档和众多资料发现&#xff0c;在QuillEditor的使用中&#xff0c;行高的配置并不像加粗、斜体等样式仅需配置关键词即可&#xff0c;那么QuillEditor的行高如何配置呢&#xff1f; 首先我们仍然要在富文本的配置的modules中写入行高的配置项 const myOptions …

linux bind函数

bind函数的目的是让把客户端对应的端口(port)地址和ip地址绑定到客户端 [参考](Linux之bind 函数&#xff08;详细篇&#xff09;_linux bind函数-CSDN博客)

Text1作业

Text1作业 Text1作业 题量: 16 满分: 100.0 一. 单选题&#xff08;共5题&#xff09; 1【单选题】A______ is a functional unit that interprets and carries out instructions.&#xff08;5.0分&#xff09; A memoryB processorC storageD network 2【单选题】A____…

mediasoup基础概览

提示&#xff1a;本文为之前mediasoup基础介绍的优化 mediasoup基础概览 架构&#xff1a;2.特性&#xff1a;优点缺点 3.mediasoup常见类介绍js部分c 4.mediasoup类图5.业务类图 Mediasoup 是一个构建在现代 Web 技术之上的实时通信&#xff08;RTC&#xff09;解决方案&#…