Spring Cloud Gateway收到的是http请求,但schema却是https

问题描述

为了方便说明问题,这里把问题简化下(实际上通过下面简化后的描述就暗示了是部署环境导致的问题,实际情况并没有这么顺利,中间经历过崩溃、搞不懂、超出认知、持续折腾了一周,各种实验、怀疑过这种问题,比如ingress自动申请的证书问题、ingress没有正确终止ssl,甚至还重新装过k3s,也怀疑过事traefix nginx的问题,哎,反正各种问题都怀疑完了,然后各种验证,崩溃完了

有个nginx,跑了一个前端代码,配置文件大概这样:

server
{
    listen 80;
    listen 443 ssl  http2;
    server_name xxxxx.top;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/xxxxx.top;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    
    #ssl_certificate    /etc/letsencrypt/live/leyong.top/fullchain.pem;
    #ssl_certificate_key    /etc/letsencrypt/live/leyong.top/privkey.pem;
    
    ssl_certificate    /root/.acme.sh/xxxxx.top/fullchain.cer;
    ssl_certificate_key    /root/.acme.sh/xxxxx.top/leyong.top.key;

    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
		#SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/xxxxx.top.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    
    location ^~ /ly {
        root /www/wwwroot/xxxxx.top;

        try_files $uri /ly/index.html;
        index  index.html index.htm;
        error_page 405 =200	http://$host:$server_port$request_uri;
        error_page 404 = /404.html;
    }
    
    location /api {
        proxy_set_header   Host $host:$server_port;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 60;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_pass http://10.1.12.7:8760/api;
        #proxy_pass http://10.1.12.7:31760/api;
        client_max_body_size 80m;
    }
    
    access_log  /www/wwwlogs/xxxxx.top.log;
    error_log  /www/wwwlogs/xxxxx.top.error.log;
}


Rocky大约 10 分钟
JDK8 G1 堆内存居然不释放

背景

k8s环境中有个pod,pod里跑了一个java进程。 采用的是jdk版本是openjdk version "1.8.0_342"。 启动时有这些jvm参数:

-server 
-Dspring.datasource.druid.maxActive=80 
-XX:MaxGCPauseMillis=200 
-XX:+UseG1GC 
-XX:+UseContainerSupport 
-XX:MinRAMPercentage=20.0 
-XX:MaxRAMPercentage=70.0 
-Djava.security.egd=file:/dev/./urandom 
-Duser.timezone=GMT+08 
-XX:+HeapDumpOnOutOfMemoryError  
-XX:HeapDumpPath=/mnt/log 
-XX:+UnlockExperimentalVMOptions

Rocky大约 4 分钟
免费https证书、自动续期

CA对比

以下是主流免费 SSL 证书颁发机构(CA)的证书有效期及关键特性对比:

1. Let's Encrypt • 证书有效期:90 天

  • 自动续期:支持(通过 ACME 协议,如 acme.sh
  • 通配符证书:支持(需 DNS 验证)
  • 特点:

完全免费,开源社区维护,支持多域名(SAN),全球信任度高。

官方主页:letsencrypt.org


Rocky大约 6 分钟acmecertbothttps证书
手把手教你制作Cookie、Local、Session数据导出插件

温馨提示:本文所述插件仅供学习交流,使用前请确保获得网站主人同意。偷看别人底裤是犯法的,但扒自己网站的底裤...那叫技术探索!

一、缘起:当网页开始穿秋裤

某个月黑风高的夜晚,我正在调试一个满是bug的网站。这个傲娇的网页把数据层层包裹——localStorage穿着保暖内衣,sessionStorage套着羊毛衫,Cookie还裹着三层羽绒服。每次调试都要打开开发者工具扒拉它们,简直比给猫咪穿袜子还费劲!

于是我拍案而起:"是时候发明网页扒裤神器了!"

二、扒裤三件套制作指南


Rocky大约 4 分钟
在没有 telnet 和 nc 的世界里,如何优雅地判断端口是否通?

大家好!今天我们要聊一个运维界的经典问题:如何判断某个端口是否通? 但这次的背景有点特殊——我们身处一个“荒凉”的环境:既没有 telnet,也没有 nc,甚至连安装它们的权限都没有。这就好比你被困在一座孤岛上,手里只有一把生锈的小刀,却要修好一艘破船。别慌!今天我来教你几招“土法炼钢”,用现有的工具玩出花样!

背景:一场“残酷”的限制

想象一下,你正在排查一个网络问题,突然发现目标服务器的某个端口似乎挂了。于是,你满怀希望地输入:


Rocky大约 5 分钟
CentOS7下Docker端口映射后防火墙失效

背景

  1. Docker 容器添加端口映射后,会自动添加系统防火墙规则,将端口开放给所有ip访问。
  2. 使用 firewall-cmd 命令无法查看和管理 Docker 添加的防火墙规则。
  3. 使用 iptables 能查看该规则,但对其管理无效(firewalld 底层认识 iptables ,重启 firewalld 服务规则复原)

原因

docker 会自动添加一个优先级最高的针对这个映射端口全开放规则。

解决方案

  1. 开启防火墙的 masquerade 包转发功能

    centos 系统安装好后运行于主机模式,并没有开启包转发功能。
    即系统只处理目的地为本机的数据包,不会转发发往其他地址的数据包。
    在内核中有相应配置选项 net.ipv4.ip_forward 默认设置为 0。
    可以通过命令 sysctl net.ipv4.ip_forward=1 手动开启包转发功能。
    防火墙的 masquerade 功能进行地址伪装(NAT),
    私网访问公网或公网访问私网都需要开启此功能来进行地址转换,否则无法正常互访。
    通过命令 firewall-cmd --add-masquerade 开启此功能,
    开启之后 net.ipv4.ip_forward 的值自动被设置为1,即 centos 启用包转发。
    
  2. 在 docke r启动时添加参数来禁止 docker 对本机防火墙的操作。


Rocky大约 3 分钟
https和http混用解决办法

https和http混用解决办法

  1. 通过certbot自动化脚本,自动生成证书,自动续期

  2. 使用Vercel,代理http请求

    {
      
      "rewrites": [
        {
          "source": "/backend/(.*)",
          "destination": "http://xxxxxx:9088/backend/$1"
        }
      ]
    }
    

Rocky大约 1 分钟
JetBrains IDE 全破解

由于公开的licence server越来越不好了,所以这里出一篇破解教程。

本教程理论上支持所有jetbrains ide,但我只实验过intellij idea,其他ide请自行测试。

image.png
image.png

正文


Rocky大约 3 分钟jebrainsjetbrains
行转列不再复杂:SQL高手都在用的技巧揭秘

背景

在数据分析中,我们常常需要将纵向排列的数据转换为横向展示,以便更直观地进行分析或生成报告。这个过程就是 行转列,又称为 Pivot 操作。在 SQL 中,如何将行数据高效转换为列数据是一项非常实用的技巧,无论是生成动态报表,还是在数据透视分析中应用,都能够大显身手。

在这篇博文中,我将带你从零开始,深入理解 SQL 中行转列的原理,并通过常见的数据库示例逐步展示行转列的多种实现方式。

行转列是什么

行转列操作可以帮助我们将多行数据转换成不同的列,尤其在处理 数据透视 时非常有用。行转列广泛应用于需要汇总、整理数据的场景,如报表生成和业务分析。


Rocky大约 4 分钟
2
3
4
5
...
15









  • 随机毒鸡汤:现在看来用生日做密码,还是很安全的,毕竟没有人记得你生日。