【Nginx】微信小程序后端开发、一个域名访问多个服务

【Nginx】微信小程序后端开发、一个域名访问多个服务

1. 微信小程序后端开发

对于后端程序员,其实你们的职责就是干老本行,即写接口和服务,让前端能够访问你的接口就行,必要时需要查看微信小程序开发文档去向微信服务器发请求。

https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/

但是,微信小程序开发,前端项目部署在微信服务器,只能发 HTTPS 的请求去访问自己的后端,是开发阶段还可以关掉,但是上线了就是强制要求,为了微信小程序上线后功能正常,你必须让请求是 HTTPS 的!

2. 如何让请求是 HTTPS 的

  1. 拥有一台云服务器(我的是 Linux Centos 7)
  2. 拥有一个域名
  3. 将域名进行备案
  4. 拥有一个 SSL 证书
  5. 解析域名
  6. 下载证书
  7. 下载 Nginx
  8. 部署证书(我用的是 Nginx)
  9. 配置 Nginx

不要为了省钱遭罪,网上大部分的方法都很难成功(至少我找不到),买一个服务器和一个便宜的域名就行了!!!

  • 每个流程都可以去找找资料或者跟随官方的指导(我用的是阿里云),因为他们讲得比我好

对于 部署证书和配置,我接着讲 Nginx 也讲一下 7 - 8,并且网上的一些真的不太好懂,当时也是花了很长时间才成功了,现在总结一些攻略!

2. Nginx 的下载

这里用的是官方 Nginx 的方式去下载,虽然麻烦,但是真实有用,实测有效!

参考文章:【xshell】linux:CentOS 7 安装部署 nginx_xshell 7 中报nginx-ingress.tar-CSDN博客

Nginx 最终的位置:

cd /opt/ldkjdata/nginx/

编辑配置文件(注意修改为你的 nginx 版本,我的是 nginx-1.25.4,所以目录是这个,不过你可以重命名):

vim /opt/ldkjdata/nginx/nginx-1.25.4/conf/nginx.conf

启动:

/opt/ldkjdata/nginx/nginx-1.25.4/sbin/nginx

停止:

/opt/ldkjdata/nginx/nginx-1.25.4/sbin/nginx -s stop

重启:

/opt/ldkjdata/nginx/nginx-1.25.4/sbin/nginx -s reload

查看 TCP 是否正常监听

netstat -ntlp | grep nginx

3. 部署证书

3.1 上传证书

在这里插入图片描述

证书(两个文件:private.key 和 public.pem ) 上传到云服务器的 /etc/ssl/ 目录下(没有就创建)!

  • 其他位置可能找不到

修改配置文件:

vim /opt/ldkjdata/nginx/nginx-1.25.4/conf/nginx.conf

3.2 配置 Nginx

假设你的域名是 domain.com,就这样配置(在 http {} 内配置 server {} ,可以有多个):

# 以下属性中,以ssl开头的属性表示与证书配置有关。server {listen 443 ssl;server_name domain.com; root html;index index.html index.htm;ssl_certificate     /etc/ssl/public.pem;ssl_certificate_key /etc/ssl/private.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;location / {proxy_pass http://127.0.0.1:80; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}

在这里插入图片描述

3.3 配置域名服务端口

server {listen 80;server_name domain.com; location / {proxy_pass http://127.0.0.1:1701; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

在这里插入图片描述

含义就是访问 domain.com/(根目录),被 Nginx 代理到服务器的 http://127.0.0.1:1701

假设你的 ip 是 11.22.33.44,后端服务端口是 1701,那么 https://domain.com/ 就相当于访问 http://11.22.33.44:1701,并不是 domain.com/ 被替换成 11.22.33.44:1701/,而是访问 11.22.33.44:1701/ 接口,“配置了去哪个端口访问这个接口 ”

  • 由于是服务器内部的代理,所以不需要开 1701 端口的防火墙~

4. 开发过程的小坑

4.1 一个域名多个服务

一个域名可以使用 Nginx 也可以通过服务网关去实现对应多个服务,而如果是部署两个项目,显然用 Nginx 更合适!

在刚才的基础上,去加几个配置即可:

vim /opt/ldkjdata/nginx/nginx-1.25.4/conf/nginx.conf
server {listen 80;server_name lbcmmszdntnt.cn; location / {proxy_pass http://127.0.0.1:1701; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location ~ ^/forum(/.*)$ {proxy_pass http://127.0.0.1:61803$1$is_args$args; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

在这里插入图片描述

为什么这么设置呢?这么设置是因为:

如果这么设置:

    location /forum {proxy_pass http://127.0.0.1:61803; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}

https://domain.com/forum 相当于指向 http://11.22.33.44:61803/forum,并不是 http://11.22.33.44:61803,即 “配置了去 61803 端口访问 /forum”

在这里插入图片描述

我们那样设置之后,就是访问 61803 端口的 / 了~

如果要新添其他服务,以此类推~

4.2 重定向的问题

建议使用设置响应头的方式去重定向,而不是 sendRedirect,因为 sendRedirect 可能会出错,这个是相对路径,相对于本次请求的 host!

在 HttpServletRequest 获取 URL 的时候,是 http 不是 https,所以不会访问成功,设置 “Location” 响应头的时候要注意!

补充,如果重定向到根目录要携带数据,要这样:https://domain.com/?key=value

4.3 静态资源发请求的问题

静态资源资源中 html 在浏览器中访问并发请求给后端,是相对路径的话,相对的是资源在浏览器中的 host,而不是路径

例如:

    location ~ ^/forum(/.*)$ {proxy_pass http://127.0.0.1:61803$1$is_args$args; proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}

访问 61803 端口服务的 static 文件夹下的 index.html: domain.com/forum/index.html

在浏览器请求 /hello,实际上是 domain.com/hello 而不是 domain.com/forum/hello,就会被代理到别处

5. Nginx 反向代理与负载均衡

推荐视频:06.反向代理和负载均衡_哔哩哔哩_bilibili

	upsteam backend {ip_hash;server 127.0.0.1:8000 weight=3;server 127.0.0.1:8001;server 127.0.0.1:8002;}server {listen 80;server_name localhost; location /app {proxy_pass http://backend;}}

注意:如果已经有对 localhost:80 的服务监听,就把 location /app {} 写在里面就行。

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

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

相关文章

c#高级——插件开发

案例:WinForm计算器插件开发 1.建立插件库,设置各种自己所需的插件组件 如下图所示:进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具,页面设计工具的发展从来没有停滞过, Axure,无论是国产设计工具即时设计,其功能都在不断更新迭代,为设计带来更高效的设计体验。今天对比两个设计工具,帮你找到最适合自己的&#xf…

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增 数据源平台:用友NC65 用友NC是为集团与行业企业提供的全线管理软件产品,由亚太本土最大的企业管理软件提供商用友公司研发提供,用友NC率先采用J2EE架构和先进开放的集团级开发平台UAP&#xff0…

计算机网络-无线通信网

1.各种移动通信标准 1G:第一代模拟蜂窝:频分双工FDD。2G:第二代数字蜂窝 I.GDM(全球移动通信)采用TDMA。II.CDMA(码分多址通信)。2.5G:第2.5代通用分组无线业务GPRS。2.75G&#xf…

C语言-指针详解速成

1.指针是什么 C语言指针是一种特殊的变量,用于存储内存地址。它可以指向其他变量或者其他数据结构,通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存,以及进行复杂的数据操作。在C语言中&#…

Redis篇之Redis持久化的实现

持久化即把数据保存到可以永久保存的存储设备当中(磁盘)。因为Redis是基于内存存储数据的,一旦redis实例当即数据将会全部丢失,所以需要有某些机制将内存中的数据持久化到磁盘以备发生宕机时能够进行恢复,这一过程就称…

链表和顺序表的优劣分析及其时间、空间复杂度分析

链表和顺序表的优劣分析及其时间、空间复杂度分析 一、链表和顺序表的优劣分析二、算法复杂度<font face "楷体" size 5 color blue>//上面算法的执行次数大致为&#xff1a;F&#xff08;N&#xff09; N^22*N10;   N 10,F(10) 1002010 130次   N 1…

【Java】多线程编程(实验十)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、 了解线程的调度和执行过程&#xff0c;掌握Java 语言中多线程编程的基本方法 2、 掌握Runnable 接口实现多线程的方法 3、 掌握Thread 类实 现多线程的用法 二、实验内容 采用多线程机制模拟汇款业务。定…

C++中的STL数据结构

内容来自&#xff1a;代码随想录&#xff1a;哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构 数组 set &#xff08;集合&#xff09; map(映射) 在C中&#xff0c;set 和 map 分别提供以下三种数据结构…

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

【SpringCloudAlibaba系列--nacos配置中心】

Nacos做注册中心以及使用docker部署nacos集群的博客在这&#xff1a; 容器化部署Nacos&#xff1a;从环境准备到启动 容器化nacos部署并实现服务发现(gradle) 使用docker部署nacos分布式集群 下面介绍如何使用nacos做配置中心 首先要进行nacos-config的引入&#xff0c;引入…

【QT QML】软件打包,生成安装包

一、版本 Desktop 5.15.2 MinGW 64-bit二、打包 1. 编译Release版本 2. 在工程目录下找到Realse文件夹 3. 拷贝文件 ***-Desktop_Qt_5_15_2_MinGW_64_bit-Release - release - xxx.exe到一个新文件夹中 4. 开启相应打包工具&#xff08;根据自己的编译器和版本选择&#xff0…

【C++】类与对象—— 初始化列表 、static 静态成员、

类与对象 1 再谈构造函数1.1 构造函数体赋值1.2 初始化列表语法&#xff1a;建议&#xff1a;初始化顺序&#xff1a;注意&#xff1a; 1.3 explicit关键字 2 static 静态成员2.1 概念2.2 声明成员变量2.3 使用类的静态成员2.4 定义静态成员总结 Thanks♪(&#xff65;ω&#…

深入了解Kettle工具:数据集成与转换的利器

深入了解Kettle工具&#xff1a;数据集成与转换的利器 在当今数据驱动的时代&#xff0c;企业需要处理大量来自不同来源的数据&#xff0c;并将其整合到统一的数据仓库或数据湖中&#xff0c;以便进行进一步的分析和挖掘。而在这个过程中&#xff0c;数据集成与转换工具扮演着…

Android BitmapDrawable.bitmap与BitmapFactory.decodeResource获取不到原始图像素级真实宽高,Kotlin

Android BitmapDrawable.bitmap与BitmapFactory.decodeResource获取不到原始图像素级真实宽高&#xff0c;Kotlin 当一个图片放在ImageView里面后&#xff0c;用以下方式获取图的宽高&#xff1a; val bmp1 (this.drawable as BitmapDrawable).bitmapLog.d("fly", &…

直流恒流源电路

简介 使用电流源稳压器芯片搭建&#xff0c;该恒流源输出电流Iout1OuA*R2/R1,该电路可用于电阻阻值检测等相关场合。 注意&#xff1a;支持最大电流为200mA LT3092IST#PBF 简介 原理图展示

如何查看电脑使用记录?保障个人隐私和安全

查看电脑使用记录是了解电脑活动的一种重要方式&#xff0c;可以帮助用户追踪应用程序的使用情况、登录和关机时间、文件的访问记录等。在本文中&#xff0c;我们将介绍如何查看电脑使用记录的三个方法&#xff0c;以分步骤详细说明如何查看电脑使用记录&#xff0c;帮助用户更…

128 Linux 系统编程6 ,C++程序在linux 上的调试,GDB调试

今天来整理 GDB 调试。 在windows 上我们使用vs2017开发&#xff0c;可以手动的加断点&#xff0c;debug。 那么在linux上怎么加断点&#xff0c;debug呢&#xff1f;这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到&#xff1a;我们在windows上开发&#xff0c;…

UML---活动图

活动图概述 活动图&#xff08;Activity Diagram&#xff09;是UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;中的一种行为建模工具&#xff0c;主要用于描述系统或业务流程中的一系列活动或操作。活动图通常用于描述用例中的行为&#xff0c…