就是客户要求嘛,国内的版本,部署一份到海外去。
我呢,没有完全拷贝数据过去,也就是空的平台,从初始化管理员开始。
我也没有写工具,直接就一个post请求去初始化管理员的。
问题点是:我在Postman上提交的是Post请求,但是到了后台,却变成了Get请求了。
后台接口是Post请求呀,所以报错405不支持这个请求方法
2026-01-27 21:21:52.929 WARN 1 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]
难道,我学的是假的web?为什么会从Post请求变成Get请求呢?
这种问题肯定是链路上不对,所以要先分析链路。
于是,我看了nginx的日志
不看不知道,一看就知道
nginx里的日志 "POST /uc/admin/init HTTP/1.1" 301 169 "-" "Apifox/1.0.0 (https://apifox.com)" "-"
这里头一看,的确是POST请求,但是为啥是301呢?
于是我就分析是哪里重定向了。最快的方式,就是分段测试,于是我就直接访问Gateway,发现是正常的。
所以问题一定是出现在Nginx这里。
于是我看了Nginx的配置
# 强制 HTTP 跳转到 HTTPS
server {
listen 80;
listen [::]:80;
server_name adm-api.xxxxx.com;
return 301 https://$host$request_uri;
}
# HTTPS 主配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name adm-api.xxxxx.com;
access_log /var/log/nginx/xxxxx.access.log main;
error_log /var/log/nginx/xxxxx.error.log;
# SSL 证书配置
ssl_certificate /etc/nginx/full.pem;
ssl_certificate_key /etc/nginx/key.pem;
# 推荐的安全加密套件与协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HSTS (可选, 强制浏览器未来使用 HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://172.31.0.2:31004;
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 https;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
所以这就破案了
# 强制 HTTP 跳转到 HTTPS
server {
listen 80;
listen [::]:80;
server_name adm-api.xxxxx.com;
return 301 https://$host$request_uri;
}
原因就是我用的是http访问,不是https,所以走了这里的301
而这里的301是祖传代码,http转https,得用307才行。
于是我修改到了307,用http可以,用https也可以。



