Nginx接收Http协议请求转发使用Https协议

缘起

公司使用阿里的apigateway,规定不太友好,同是SIT环境,A系统的SIT1环境居然不能调用B系统的SIT2环境的接口。因为各个系统之间部署的SIT环境数量不同A系统可能只有1套,B系统可能有8套,这样的话,可能会随时切换调用B系统的环境,管理员不允许,于是想着用Nginx做下转发。因为A系统调用B系统是内部调用,不计划使用HTTPS,因为还要去申请证书,但是B系统调用入口必须使用HTTPS,这样就要求Nginx可以接收HTTP协议的请求,转发出去的协议是HTTPS。

第一次配置Nginx

1server { 2 listen 10000; 3 server_name 192.168.1.2; 4 5 error_page 500 502 503 504 /50x.html; 6 location = /50x.html { 7 root html; 8 } 9 10 location / { 11 proxy_pass https://aaa.bbb.com:9000; 12 } 13 }

以为这样就可以直接转发了,但是执行nginx -t直接报错:

1nginx: [emerg] https protocol requires SSL support in /data/nginx/conf/nginx.conf:224 2nginx: configuration file /data/nginx/conf/nginx.conf test failed

224行就是我上面的proxy_pass https://aaa.bbb.com:9000;这一行 搜了一下说是nginx当时编译的时候没有http_ssl_module模块,使用nginx -V查看一下当时编译的参数:

1nginx version: nginx/1.21.5 2built by gcc 4.8.5 (SUSE Linux) 3configure arguments: --prefix=/data/nginx --with-pcre=/data/software/pcre-8.21 --with-zlib=/data/software/zlib-1.2.11 --with-openssl=/etc/ssl

果然没有http_ssl_module模块,于是决定重新编译一下nginx。

重新编译Nginx

注意:我的输出是/data/nginx,和当前正在跑的Nginx是同一个目录,先使用nginx -s stop停止nginx,然后备份conf/nginx.conf文件,防止被覆盖。

先安装依赖:pcre-8.21,zlib-1.2.11,openssl-1.0.2t 我都是下载的源码,然后编译并安装的

1# pcre-8.21 使用以下命令 2cd pcre-8.21 && ./configure && make && make install 3# zlib-1.2.11 使用以下命令 4cd zlib-1.2.11 && ./configure && make && make install 5# openssl-1.0.2t 比较特殊 使用 6cd openssl-1.0.2t && ./config && make && make install

进入Nginx源码目录然后使用以下命令configure:

1./configure --prefix=/data/nginx --with-pcre=/data/software/pcre-8.21 --with-zlib=/data/software/zlib-1.2.11 --with-openssl=/data/software/openssl-1.0.2t --with-http_ssl_module

然后执行编译和安装:

1make && make install

重启Nginx

编译完成后发现之前的Nginx二进制文件变成了nginx.old,新的Nginx文件叫nginx,给这个nginx二进制加执行权限,然后执行

1nginx -t

此时不再报错,提示成功:

1nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok 2nginx: configuration file /data/nginx/conf/nginx.conf test is successful

然后查看conf/nginx.conf,发现没有被覆盖,可以直接启动Nginx了:

1nginx -c /data/nginx/conf/nginx.conf

启动完成后用ps命令查看以下进程果然在。 然后使用postman测试,发现可以正确转发,大功告成。

点赞
收藏

评论区

加载中...

相关推荐

umi 项目多环境打包配置

参考:1.1.1.<br/我的需求:在不同环境(dvl、sit)下打包,请求基础地址也需要随环境的变化而改变<br/遇到的困难:umiv3文档不完善未知bug<aname"K770H"</a1.创建不同环境的配置文件此部分可参考:2.<br/需要dvl、sit两个环境,因此创建两个配置文件,如图:<br

strace命令使用

命令介绍strace是Linux环境下的一款程序调试工具,用来输出一个应用程序所使用的系统调用。strace底层使用内核的ptrace特性来实现其功能。什么是系统调用?系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给

springboot中切换配置(多个配置文件

问题描述:在springboot项目中可能有测试环境、开发环境、生产环境,在这些环境中我们可能要使用不同的配置,如果每次切换环境的时候都要重新写一份配置文件就很麻烦了,所以下面提供一种方法可以快速且简便的切换不同环境下的配置。解决方案:1、首先在resources目录下创建完整的配置文件(包括测试、开发、生产环境下的相关配置文件

Linux系统环境部署redis

Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库,并提供多种语言的API。!linux环境部署redislinux环境部署redis(https://www.linuxprobe.com/wpcontent/uploads/2018/03/redislogo

Linux 系统调用(system call)

1系统调用:(SYSTEMCALL)操作系统(operatingsystem)内核中有一组实现系统功能的过程,系统调用就是对上述过程的调用。程序员利用系统调用,向OS提出服务请求,由OS代为完成。一般情况下进程是不能够存取系统内核的。它不能存取内核使用的内核段,也不能调用内核函数,CPU的硬件结构保证了这一点。只有系统调用是个例

Socket与系统调用深度分析

Socket与系统调用深度分析实验环境:Linux5.0.1内核32位系统的MenuOS本文主要解决两个问题用户态如何通过中断进入socket的系统调用socket抽象层如何通过多态的机制,来支持不同的传输层的协议。也就是socket作为父类,TCP/UDP为子类,父类指向子类对象,实现多态