配置nginx转发内网请求到外网的实现示例

 更新时间:2024年10月22日 09:08:27   作者:寂寞不谈  
本文主要介绍了配置nginx转发内网请求到外网的实现示例,通过nginx配置代理实现内网对外网接口数据的获取,涉及nginx安装、配置SSL、日志设置和错误排查,感兴趣的可以了解一下

一、要干什么事情

因工作需要对接,需要在内网获取外网的接口的数据。但是因为网络管理的需要,内网不能直接暴露到公网环境中,因此采取的方案是:

step1:内网的服务器N上发起了一个请求

step2:请求的地址是服务器Z的内网地址(服务器是一个中转服务器,能连接内网和外网)

step3:服务器Z将请求通过nginx转发到外网

step4:请求外网服务器W上的接口

step5:接口请求成功,获取json数据

二、怎么干

干这个事情,有三方面的人。

一方面:以我为首的,需要调用接口取数,下文简称为“我方”。

二方面:是提供网络安全服务以及中间服务器,下文简称为“中间方”。

三方面:是提供接口服务的厂商,下文简称为“对方”。

任务拆解:

我方:通过xxljob写好定时任务,根据对方提供的接口文档的信息,编写请求接口。

中间方:安装好nginx,并打通和两方的网络环境,对我方开放端口。

对方:暴露接口,供我方调用,并将中间放的服务器ip设置到白名单中。

三、开始干

3.1安装nginx

因为中间方比较懒,nginx是我方请运维同事上去安装的。

nginx能够正常使用,然后就开始修改配置文件,准备重启nginx测试一把了,nginx.conf的配置如下

server {
        listen       80;
        server_name  _;
       

        access_log  logs/www_access.log  main;
        error_log   logs/error.log error;

        location /api {
            root   html;
            index  index.html index.htm;


            location /api {
	            proxy_set_header X-Real-IP $remote_addr;
	            proxy_pass http://对方的ip地址;
	        }
        }

3.2更新nginx配置,设置https请求

nginx很顺利的重启了,但是请求接口是出现了报错,经过排查,发现nginx.conf配置的有问题,对方的接口是在外网,应该用https请求,于是更新了一下nginx.conf的配置

server {
        listen       80;
        server_name  _;

      
        access_log  logs/www_access.log  main;
        error_log   logs/error.log debug;


        location / {
            root   html;
            index  index.html index.htm;


            location /api {
	            proxy_set_header X-Real-IP $remote_addr;
	            proxy_pass https://完整域名/api;
	            proxy_ssl_server_name on;
	        }
        }
}

重启nginx报错

报错的信息简单来说就是我安装的nginx没有ssl功能,经过一顿百度得到了答案:

然后发现nginx根本不是通过软件包安装的方式装上来的,是运维同事从其他项目上把安装后的文件夹打包过来的。(给这位头脑灵活的同事点个赞👍🏻)

于是我将现有的nginx备份了一下,开始准备重新安装nginx

3.3重装nginx

安装nginx参照的博客是https://www.jb51.net/article/189359.htm

因为版本的问题,有一部分的包无法正常下载了,因此我将博客中的操作步骤进行了简化以代码包的升级,操作步骤见下图:

安装的过程中很顺利,但是在安装nginx的时候频繁的报错误,安装失败,于是将nginx的版本升级到1.20.0后解决了nginx安装的问题。

ok,现在开始解决nginx不支持ssl的问题,在nginx的解压后的目录下执行下面指令:

./configure --with-http_ssl_module

然后又报错了,报错信息如下:

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

然后我就直接升级了openssl的版本,然后重试,终于装好了。

3.4后续的问题

nginx配置了代理https也能够正常的启动了。

然后再次重试发起请求,从access_log  logs/www_access.log请求日志中可以看到,nginx相应了内网的请求,但是返回值都是403。

现在还无法判断是内网到nginx出现了问题,还是nginx到外网出现了问题。

于是两路走:

1.nginx上再配置另一个内网的接口,然后发起请求,此时发现请求日志中返回值是200,成功,发起请求的内网服务器的日志中也得到了相应的信息。

2.在nginx的服务器上,直接模拟接口请求,请求外网,结果:403

结论:nginx到外网出现了问题,经过和对方的排查,发现对方没有将nginx的服务器设置到白名单中。

3.5最终结果

在配置白名单后,就能够正常请求到接口的数据了。

四、学到的东西

4.1 nginx怎么开启日志

中间的地址给的是相对路径,也可以设置成绝对路径。

main是nginx配置文件中最上方配置的规则,需要打开注释

error_log后面的error是日志的级别

日志级别:可以指定日志记录的级别,如 debuginfonoticewarnerrorcritalertemerg 等,控制不同严重程度的错误信息是否记录到该日志中。

4.2 怎样模拟接口请求

通过咨询ai助手得到了该信息,验证了nginx到外网的通道是否正确。

4.3代码格式

这篇博客中代码都变成一行了,使用markdown语法写博客可以完整展示,于是我又发了一篇一样的,但是代码格式是完整的。

到此这篇关于配置nginx转发内网请求到外网的实现示例的文章就介绍到这了,更多相关nginx转发内网请求到外网内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx实现外网访问内网的步骤详解

    Nginx实现外网访问内网的步骤详解

    外网浏览器与内网是不通的,但是外网与中间过渡服务器是通的,中间过渡服务器与内网服务器是通的,这样在外网访问过渡服务器时,过渡服务器再跳转到后台服务器,本文给大家介绍了Nginx外网访问内网如何实现步骤,需要的朋友可以参考下
    2023-10-10
  • 讨论nginx location 顺序问题

    讨论nginx location 顺序问题

    在有一次配置时发现,请求 uri 明明是符合了前缀匹配 ^~ 规则,但 nginx 却没有使用,这让我对上述结论产生了疑惑。后续通过调研、实践后发现,上述结论可以说对,但也不对,是不是更疑惑了?没关系,看完这篇文章你就知道我为什么会这样说了
    2022-05-05
  • Nginx的405 not allowed错误解决方法

    Nginx的405 not allowed错误解决方法

    本文主要介绍了Nginx的405 not allowed错误解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Linux中Nginx反向代理如何实现不同路径访问不同的页面

    Linux中Nginx反向代理如何实现不同路径访问不同的页面

    这篇文章主要介绍了Linux中Nginx反向代理如何实现不同路径访问不同的页面方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解nginx 301跳转到带www域名方法

    详解nginx 301跳转到带www域名方法

    这篇文章主要介绍了详解nginx 301跳转到带www域名方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Nginx配置https的实现

    Nginx配置https的实现

    本文主要介绍了Nginx配置https的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • nginx反向代理proxy_pass遇到的死循环问题

    nginx反向代理proxy_pass遇到的死循环问题

    这篇文章主要介绍了nginx反向代理proxy_pass遇到的死循环问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 前端加载访问速度优化详细指南(Nginx)

    前端加载访问速度优化详细指南(Nginx)

    在前端开发中,优化页面加载速度成为了开发者的一项重要任务,下面这篇文章主要给大家介绍了关于前端加载访问速度优化(Nginx)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • 详解Nginx如何配置Web服务器的示例代码

    详解Nginx如何配置Web服务器的示例代码

    这篇文章主要介绍了详解 Nginx如何配置Web服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • HTTP 499 状态码 nginx下 499错误的解决办法

    HTTP 499 状态码 nginx下 499错误的解决办法

    HTTP状态码出现499错误有多种情况,499错误是什么?Nginx 499错误的原因及解决方法,下面跟着脚本之家小编一起学习吧
    2016-06-06

最新评论