首页 > 系统相关 >记一次前后端项目Nginx代理出现的“405”问题

记一次前后端项目Nginx代理出现的“405”问题

时间:2023-05-19 14:12:57浏览次数:29  
标签:Control Content header add 代理 Access Nginx 405 nginx

事情的起因是这样的:  因为好久没有写前端代码了对前端打包部署这块有点抵触 公司的有个小项目是前端vue+后端springboot实现的
在部署的时候 通过nginx反向代理去实现跨域(这块nginx一直都是简单的使用 也没有过深的了解 包括之前也用过nginx+memache实现的灰度部署的方案)
总感觉很简单 可就是很简单的问题就是一直曝405接口not allow

最终的问题解决了 原因:是因为 我后端个别接口在使用LocalDateTime 类型进行 json数据转换时 报错了 但是后端没有处理 也没有抛异常 这就导致我单独测试某一个接口是正常
而因为转换异常 导致后端的跨域访问配置失效了 继而 nginx里也没有对跨域的请求进行处理 就是下面这段代码 如果说后端配置了跨域配置且生效了 则nginx里就不用再配置了
因为我的数据转换异常了 所以导致后端跨域配置失效了 所以nginx就一直在代理的时候 曝405 not allow 异常


location / {
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
        #
        # Tell client that this pre-flight info is valid for 20 days
        #
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 200;
      }
      if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
      }
      if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
      }
}


最终在所有
LocalDateTime 字段上都添加了注解
@JsonFormat(locale="zh", timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startmsgctime;

这里还要搭配上有自己的josn转换配置
@Component
public class FastJsonConvert {

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
System.out.println("设置fastjson为springboot默认json");
FastJsonHttpMessageConverter fastConvert = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.WriteMapNullValue, // 是否输出值为null的字段,默认为false,我们将它打开
SerializerFeature.WriteNullListAsEmpty, // 将Collection类型字段的字段空值输出为[]
SerializerFeature.WriteNullStringAsEmpty, // 将字符串类型字段的空值输出为空字符串
SerializerFeature.WriteNullNumberAsZero, // 将数值类型字段的空值输出为0
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.DisableCircularReferenceDetect); // 禁用循环引用
//处理日期时间格式化问题
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
//处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConvert.setSupportedMediaTypes(fastMediaTypes);
fastConvert.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters((HttpMessageConverter<?>) fastConvert);
}

}



最后在贴上nginx的反向代理的关键配置

server {
  #侦听80端口
  listen 80;
  #定义使用 www.nginx.cn访问
  server_name localhost;

  #定义服务器的默认网站根目录位置
  #root html;

  #设定本虚拟主机的访问日志
  access_log logs/nginx.access.log main;


  location / {
  #程序根目录配置
    root html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
  }

  location ^~ /xxapi {
  # 后端接口请求转发
    proxy_pass http://localhost:16101;
    proxy_set_header Host localhost;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

}

 

 

标签:Control,Content,header,add,代理,Access,Nginx,405,nginx
From: https://www.cnblogs.com/YinXuanZhiZhi9/p/17414922.html

相关文章

  • C106M-ASEMI代理KY原厂单向可控硅C106M
    编辑:llC106M-ASEMI代理KY原厂单向可控硅C106M型号:C106M品牌:韩景元\KY封装:TO-126特性:可控硅正向电流:4A反向耐压:600V恢复时间:>2000ns引脚数量:3芯片个数:1芯片尺寸:浪涌电流:40A工作温度:-40℃~125℃C106M应用范围:调光器,电子式镇流器,电机驱动,断电保护器,照相机,开关器,小型马......
  • 从零玩转Nginx
    01【熟悉】实际开发中的问题?现在我们一个项目跑在一个tomcat里面当一个tomcat无法支持高的并发量时。可以使用多个tomcat那么这多个tomcat如何云分配请求|-nginx02【熟悉】服务器概述1,目前常见的web服务器1,Apache(http://httpd.apache.org)它是世界上用的最多的web服务器,......
  • IPA65R650CE-ASEMI代理英飞凌MOS管IPA65R650CE
    编辑:llIPA65R650CE-ASEMI代理英飞凌MOS管IPA65R650CE型号:IPA65R650CE品牌:Infineon(英飞凌)封装:TO-220F最大漏源电流:10A漏源击穿电压:650VRDS(ON)Max:650mΩ引脚数量:3沟道类型:N沟道MOS管芯片尺寸:MIL漏电流:恢复时间:5ns芯片材质:封装尺寸:如图特性:高压MOS管、N沟道MOS管工......
  • 转载【环境搭建】docker+nginx部署PHP
      目的使用docker容器完成nginx的安装以及部署PHP网页步骤一、安装nginx1.拉取Nginx镜像dockerpullnginx//拉取镜像dockerimages//查看本地镜像这里注意需要记一下nginx的IMAGEID,我这里的ID是605c2.创建Nginx容器dockerrun--nam......
  • 【教程】Git代理配置
    ✨Git代理配置#httphttpsgitconfig--globalhttp.proxy127.0.0.1:7890gitconfig--globalhttps.proxy127.0.0.1:7890#socks5gitconfig--globalhttp.proxysocks5://127.0.0.1:7890gitconfig--globalhttps.proxysocks5://127.0.0.1:7890#取消代理gitco......
  • docker安装nginx
    dockerpullregistry.cn-hangzhou.aliyuncs.com/ns-w/wh-w:nginx-1.22.0创建挂载目录mkdir-p/opt/resource/nginx/confmkdir-p/opt/resource/nginx/logmkdir-p/opt/resource/nginx/html生成容器dockerrun--namenginx-1.22.0-p80:80-dregistry.cn-hangzhou.aliy......
  • nginx出现: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
     问题情况登陆服务器之后进到nginx使用./nginx-sreload重新读取配置文件,发现报==nginx:[error]open()“/usr/local/nginx/logs/nginx.pid”failed(2:Nosuchfileordirectory)==错误,进到logs文件发现的确没有nginx.pid文件如下图解决方法执行下列命令/usr......
  • Prometheus笔记-监控Nginx
    安装Nginx及stub_status模块参考历史文章:https://www.cnblogs.com/jruing/p/17391716.html安装Nginx-exporter#下载wgethttps://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz#解压......
  • ASEMI代理Infineon英飞凌IPB60R099CP原厂MOS管
    编辑-ZIPB60R099CP参数描述:型号:IPB60R099CP持续漏极电流:31A脉冲漏极电流:93A雪崩电流,重复:11A栅极-源极电压:±20V功率耗散:255W操作和储存温度:-55to150℃连续二极管正向电流:18A二极管脉冲电流:93A漏源击穿电压:600V栅极阈值电压:3V零栅极电压漏极电流:5µA栅极-源极泄漏......
  • IPB60R950C6-ASEMI代理英飞凌IPB60R950C6功率晶体管介绍
    编辑-ZIPB60R950C6是一款高性能的功率晶体管,它采用了最新的MOSFET技术,具有低导通电阻、高开关速度和低开关损耗等优点,适用于高效率的开关电源和逆变器等应用。本文将从其特点、应用、参数和优势四个方面进行详细阐述。 1、特点IPB60R950C6具有低导通电阻、高开关速度、低输入......