一、该问题的重现步骤是什么?
1. 网关的端口为7300,前端页面的端口为8055,存在跨域,现在我在nginx配置了跨域的解决,可以正常调用
2. 岗位新增,填写超出数据库长度的字段,后台报500错误,后端返回的http状态码也为500,浏览器无法获取到http状态码的返回(Chrome浏览器)
3. 同上问题火狐浏览器在开发模式能获取到返回数据,但是浏览器并未提示错误信息
以上2,3问题为500错误
4,岗位新增,后台增加验证重复名称的过程, 重复的名称抛出ServiceException错误,后端返回错误码为400,HTTP状态码也为400,chrome浏览器获取不到返回数据,火狐获取到后无响应
二、你期待的结果是什么?实际看到的又是什么?
到底是nginx的问题?还是跨域问题没有解决?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
2.5.1 微服务版本和boot版本都有这个问题
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
nginx配置
server {
listen 7300;
server_name 192.168.2.111;
location / {
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_pass http://microService/;
}
location ^~/api/ {
#Proxy Settings
# 指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods *;
# 预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 18000;
# 带cookie请求需要加上这个字段,并设置为true
add_header Access-Control-Allow-Credentials true;
# 表示允许这个域跨域调用(客户端发送请求的域名和端口)
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号
add_header Access-Control-Allow-Origin $http_origin;
# 表示请求头的字段 动态获取
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
# OPTIONS预检命令,预检命令通过时才发送请求
# 检查请求的类型是不是预检命令
if ($request_method = OPTIONS){
return 200;
}
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;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://microService;
}
}
你可以调用到后端接口,那就说明没有跨域
另外你已经用到nginx了就不需要再去配置跨域,只需要配置反向代理,把本是跨域的后端接口地址代理到本地,这样跨域问题就迎刃而解了
最后你的nginx配置有些问题,具体可以参考如下http块的配置
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
upstream gateway {
server 172.30.0.81;
server 172.30.0.82;
server 172.30.0.83;
}
server {
listen 8000;
server_name web;
root /usr/share/nginx/html;
location / {
}
location ^~ /oauth/redirect {
rewrite ^(.*)$ /index.html break;
}
location ^~ /api {
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_buffering off;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://gateway;
}
}
}
扫一扫访问 Blade技术社区 移动端