在 Nginx 配置中,要实现对特定路径(例如 /api/)的 GET 和 POST 请求进行反向代理,并且允许跨域请求,你需要确保配置正确地处理了这些请求,并且设置了适当的 CORS 头。以下是 Nginx 配置的一个示例:
location /api/ {
# 允许跨域请求的域名,* 代表允许所有域名
add_header Access-Control-Allow-Origin *;
# 允许的请求头
add_header Access-Control-Allow-Headers 'Authorization,Content-Type,Accept,Origin';
# 允许的方法
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
# 代理设置
proxy_pass http://localhost:5000;
# 设置代理请求头
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;
# 连接后端服务器超时时间
proxy_connect_timeout 90;
# 读取后端服务器响应的超时时间
proxy_read_timeout 90;
# 连接后端服务器的超时时间,如果后端服务器在该时间内没有发送数据,则取消代理请求
proxy_send_timeout 90;
# 缓存代理请求的body数据的时间
proxy_buffering on;
# 以下是文件扩展名的过滤,你可以根据需要启用或禁用
if ($request_filename ~* \.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {
# 如果请求是文件下载,可以在这里设置特定的处理,例如:
# proxy_pass 空字符串或其他配置;
# expires 30d; # 设置文件缓存时间
# break; # 停止执行后续的指令
}
}
大部分访问为了安全性 都是考虑限制了 跨域请求。
所有要设置好。
前端伪静态配置
主项目前端
location / {
try_files $uri $uri/ /index.html;
}
大屏前端
location /DataV {
try_files $uri $uri/ /DataV/index.html;
}
设置上传文件的大小
client_max_body_size 100m;
添加头部信息
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
请求头总长度大于128k时使用large_client_header_buffers设置的缓存区
client_header_buffer_size 128k;
指令参数4为个数,128k为大小,默认是8k。申请4个128k。
large_client_header_buffers 4 128k;
指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods 'GET,PUT,POST,DELETE,OPTIONS';
预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
带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;
后端接口(按实际情况修改端口)
api
location /api/ {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers *;
允许的方法
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
proxy_pass http://localhost:5000;
if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){ }
}
websocket
location /websocket {
proxy_pass http://localhost:5000/api/message/websocket;
proxy_http_version 1.1;
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 Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
}
报表设计接口配置(按实际情况修改端口)
location /ReportServer/ {
proxy_pass http://localhost:30007/;
}
文件预览服务
location /FileServer {
proxy_pass http://localhost:30090;
}
解决文件预览服务无法加载js,css问题
location ~ /FileServer/..(js|css)?$ {
proxy_pass http://localhost:30090;
}