重新认识 nginx 反向代理

举报
liuzhen007 发表于 2021/11/07 21:17:48 2021/11/07
【摘要】 目录前言正文结尾 前言后端开发的小伙伴经常会用到 nginx 工具,那么我们不禁要问:它具体的作用是什么呢?今天我们就来通过一个实例来搞清楚! 正文整件事情经过是这样的,自己开发了一个服务,对外接口都是 http 协议的。但是部署的时候,其他的服务都是 https 的,特别是 web 页面也是 https 的,为了避免 https 协议和 http 协议混合使用导致的浏览器告警和错误。因此,...

目录

  • 前言
  • 正文
  • 结尾

前言

后端开发的小伙伴经常会用到 nginx 工具,那么我们不禁要问:它具体的作用是什么呢?今天我们就来通过一个实例来搞清楚!

正文

整件事情经过是这样的,自己开发了一个服务,对外接口都是 http 协议的。但是部署的时候,其他的服务都是 https 的,特别是 web 页面也是 https 的,为了避免 https 协议和 http 协议混合使用导致的浏览器告警和错误。因此,需要想办法处理一下。

这里提一个问题,如果是你,你会怎么处理呢?

是不是也会想到使用 nginx,或者自己重新封装对应的 https 的接口。两种方式各有利弊,第一种方式的优势是不需要修改代码,可以在部署的时候,通过使用 nginx 灵活设置。缺点是服务本身不支持 https 协议,需要配合 nginx 使用;第二种方式的优势是服务同时支持 http 协议和 https 协议,功能更加强大,但是缺点也非常明显,需要修改代码,有一定开发的工作量。

权衡利弊之后,特别是考虑到时间因素,因此暂定使用第一种方案,通过配置 nginx 来实现。

下面列出自己的 nginx 配置文件内容,便于大家参考:

upstream bag-api {
  server 47.4.5.13:9905;
}

upstream minio-api {
  server 47.4.5.13:9002;
}

server {
    listen 80;
    server_name 47.4.5.13;
    rewrite ^ https://$http_host$request_uri? permanent;
}

server {
    listen       443 ssl ;

    ssl_certificate /etc/nginx/certs/service.cert;
    ssl_certificate_key /etc/nginx/certs/service.key;
    ssl_session_timeout 5m;
    ssl_session_cache    shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    server_name 47.4.5.13 lozen.007.cn;

    access_log logs/vhost_access.log  ;
    error_log  logs/vhost_error.log;

    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;

    location ^~ /bag {
        expires -1;
        proxy_pass http://bag-api;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ^~ /test {
        expires -1;
        proxy_pass http://minio-api;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

通过上面的配置,我们可以知道我们一共配置了两种策略,当有 https 协议请求匹配到 bag 或者 test 字段时,会分别跳转对应 http 协议接口。从而实现 https 协议到 http 协议的互相转化,满足我们开头提到的需求。

结尾

本文介绍的方法本质上是利用了 nginx 反向代理的功能,通过这个实例,我们也可以看到 nginx 功能的强大。因此,从事后端开发小伙伴是非常有必要掌握 nginx 使用方法的,通过这件事,我也对 nginx 的反向代理功能有了新的理解和认识。

作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是CSDN博客专家、华为云社区云享专家,欢迎关注我分享更多干货!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。