配置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 配置为Web服务器的方法

    如何将 Nginx 配置为Web服务器的方法

    本篇文章主要介绍了如何将 Nginx 配置为Web服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 完全卸载nginx以及安装的超详细步骤

    完全卸载nginx以及安装的超详细步骤

    由于之前下载太乱,找相关目录半天找不对位置,所以决定卸载nginx并重新安装,下面这篇文章主要给大家介绍了关于完全卸载nginx以及安装的超详细步骤,需要的朋友可以参考下
    2022-12-12
  • 修改配置解决Nginx服务器中常见的上传与连接错误

    修改配置解决Nginx服务器中常见的上传与连接错误

    这篇文章主要介绍了修改配置解决Nginx服务器中常见的上传与连接错误的方法,分别针对Nginx的413错误与111错误,需要的朋友可以参考下
    2016-01-01
  • 一个等号引发的血案(谈Nginx正确的404配置)

    一个等号引发的血案(谈Nginx正确的404配置)

    这篇文章主要介绍了Nginx正确的404配置方法,本文根据实际案例总结而来,可以说是一个等号引发的血案!需要的朋友可以参考下
    2014-08-08
  • 腾讯云CentOS 6.6快速安装 Nginx服务器图文教程

    腾讯云CentOS 6.6快速安装 Nginx服务器图文教程

    本文通过图文并茂的形式给大家介绍了腾讯云CentOS 6.6快速安装 Nginx服务器的方法,介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • Nginx负载均衡中的Memcached缓存模块

    Nginx负载均衡中的Memcached缓存模块

    Nginx 的 ngx_http_memcached_module 模块本身并没有提供缓存功能,它只是一个将用户请求转发到 Memcached 服务器的代理模块,这篇文章主要介绍了Nginx负载均衡之Memcached缓存模块,需要的朋友可以参考下
    2024-06-06
  • Nginx用户认证配置方法详解(域名/目录)

    Nginx用户认证配置方法详解(域名/目录)

    Nginx超级强大它可以单独为一个域名设置用户认证,方法也很简单我们只要生成用户认证的用户名和密码,然后再Nginx添加auth认证配置即可
    2013-08-08
  • 很详细的Nginx配置说明

    很详细的Nginx配置说明

    这篇文章主要为大家分享了一篇很详细的Nginx配置说明,主要内容包括Nginx常用功能、Nginx配置文件结构,想要了解Nginx配置的朋友不要错过,参考一下
    2016-02-02
  • 利用Nginx_geo模块实现CDN调度的配置方法

    利用Nginx_geo模块实现CDN调度的配置方法

    今天小编就为大家分享一篇利用Nginx_geo模块实现CDN调度的配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • nginx去掉前端配置的路径前缀两种情况

    nginx去掉前端配置的路径前缀两种情况

    今天接到一个配置nginx的需求是,需要访问某个域名时,nginx可以去掉前缀去代理访问到后端,这篇文章主要给大家介绍了关于nginx去掉前端配置的路径前缀的两种情况,需要的朋友可以参考下
    2024-05-05

最新评论