当前位置: 首页 > wzjs >正文

官网网站页面设计端州网站建设

官网网站页面设计,端州网站建设,建站开发工具,龙岗网站设计代理商Nginx反向代理解决跨域问题详解 核心原理 Nginx反向代理解决跨域的核心思路是让客户端请求同域名下的接口,由Nginx将请求转发到目标服务器,从而规避浏览器的同源策略限制。 客户端(同源:www.domain.com)↓Nginx&…

Nginx反向代理解决跨域问题详解

核心原理

Nginx反向代理解决跨域的核心思路是让客户端请求同域名下的接口,由Nginx将请求转发到目标服务器,从而规避浏览器的同源策略限制。

客户端(同源:www.domain.com)↓Nginx(同源:www.domain.com)↓
目标服务器(跨域:api.external.com)

完整配置与代码示例

基本反向代理配置

# /etc/nginx/conf.d/default.confserver {listen 80;server_name mydomain.com;  # 前端域名# 前端静态资源location / {root /usr/share/nginx/html;index index.html;}# 接口代理配置location /api {# 后端实际地址(跨域的目标服务器)proxy_pass http://api.external.com;# 设置必要的请求头proxy_set_header Host $proxy_host;  # 保留原始Hostproxy_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;# CORS支持(可选)add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always;add_header 'Access-Control-Allow-Credentials' 'true' always;# 处理OPTIONS预检请求if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;}}
}

关键配置解析

  1. proxy_pass

    location /api {proxy_pass http://api.external.com;
    }
    
    • 所有以/api开头的请求都会被转发到http://api.external.com
  2. 请求头保留

    proxy_set_header Host $proxy_host;      # 保留原始主机头
    proxy_set_header X-Real-IP $remote_addr; # 保留客户端真实IP
    
  3. CORS支持

    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
    
    • 直接从Nginx层支持CORS,后端服务不需要额外处理
  4. OPTIONS请求处理

    if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;# ...return 204;
    }
    
    • 直接响应预检请求,减轻后端服务器压力

常见场景定制配置

场景1:URL重写(删除API前缀)
location /api {# 重写路径:移除/api前缀rewrite ^/api/(.*)$ /$1 break;proxy_pass http://api.external.com;
}
场景2:添加API前缀
location /user-service {# 添加/api前缀rewrite ^/user-service/(.*)$ /api/$1 break;proxy_pass http://api.external.com;
}
场景3:负载均衡
upstream backend {server backend1.example.com:8080 weight=3;  # 权重server backend2.example.com:8081;server backup.example.com:8082 backup;       # 备用服务器
}location /api {proxy_pass http://backend;  # 使用负载均衡器proxy_set_header Host $host;
}
场景4:WebSocket支持
location /socket {proxy_pass http://ws-server.com;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;
}

前端代码示例

// 请求代理路径(不再需要直接访问跨域地址)
const API_BASE = '/api'; // 与Nginx配置中的location匹配// GET请求示例
async function getData() {try {const response = await fetch(`${API_BASE}/data`, {method: 'GET',headers: {'Content-Type': 'application/json'}});return await response.json();} catch (error) {console.error('Error fetching data:', error);}
}// POST请求示例
async function postData(data) {try {const response = await fetch(`${API_BASE}/save`, {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': `Bearer ${token}`},body: JSON.stringify(data)});return await response.json();} catch (error) {console.error('Error posting data:', error);}
}

完整操作流程

  1. 安装Nginx

    # Ubuntu/Debian
    sudo apt update
    sudo apt install nginx# CentOS/RHEL
    sudo yum install epel-release
    sudo yum install nginx
    
  2. 编辑配置文件

    sudo nano /etc/nginx/conf.d/default.conf
    

    添加上面的代理配置

  3. 测试配置

    sudo nginx -t
    

    输出 syntax is oktest is successful 表示配置正确

  4. 重启Nginx

    sudo systemctl restart nginx
    # 或
    sudo service nginx restart
    
  5. 部署前端项目

    # 将前端构建文件放入指定目录
    sudo cp -R /path/to/dist /usr/share/nginx/html
    
  6. 验证访问
    访问 http://your-domain.com 应该加载前端页面,所有API请求自动代理到目标服务

优势对比

方案是否需要修改代码安全性性能影响多服务支持
Nginx反向代理⭐⭐⭐⭐⭐几乎没有⭐⭐⭐⭐⭐
CORS⭐⭐⭐⭐中等⭐⭐
JSONP
Webpack代理✘ (仅开发)⭐⭐低(开发)⭐⭐

注意事项

  1. 路径匹配

    • 确保location指令的路径匹配模式与前端请求一致
    • 使用正则表达式处理复杂的URL模式
  2. 日志调试

    location /api {proxy_pass http://api.external.com;access_log /var/log/nginx/api-access.log;error_log /var/log/nginx/api-error.log;
    }
    
  3. 超时设置

    proxy_connect_timeout 60s;   # 连接超时
    proxy_send_timeout 60s;       # 发送超时
    proxy_read_timeout 180s;      # 读取超时
    
  4. Cookie传递

    proxy_cookie_domain api.external.com mydomain.com;
    proxy_cookie_path / /api/;
    
  5. 安全限制

    • 避免完全开放的跨域(Access-Control-Allow-Origin: *)
    • 建议使用具体的域名白名单

Nginx反向代理是当前解决跨域问题最成熟、稳定、高性能的解决方案,特别适合生产环境使用,既能解决跨域问题,又能实现负载均衡、安全防护等额外好处。


文章转载自:

http://HiitNVxJ.rkdhh.cn
http://r6gU8m0E.rkdhh.cn
http://2N7grnH4.rkdhh.cn
http://Wzla2Poe.rkdhh.cn
http://gZdkrw2E.rkdhh.cn
http://VjjNrRgn.rkdhh.cn
http://1BkMNC6k.rkdhh.cn
http://Aa4iT3yP.rkdhh.cn
http://zhHCJRFT.rkdhh.cn
http://C1Mc7On8.rkdhh.cn
http://WobMhXxt.rkdhh.cn
http://6HMFcr9l.rkdhh.cn
http://W7xByqWo.rkdhh.cn
http://vqa3fg0p.rkdhh.cn
http://R97q0iyQ.rkdhh.cn
http://zQDRRYaz.rkdhh.cn
http://reFTWosN.rkdhh.cn
http://itiR4dV2.rkdhh.cn
http://b4RFh8NL.rkdhh.cn
http://DUZoZyLO.rkdhh.cn
http://SXgkk9ek.rkdhh.cn
http://ySo0bOWm.rkdhh.cn
http://yZy26sqD.rkdhh.cn
http://ioYxWLjD.rkdhh.cn
http://RNPnavKG.rkdhh.cn
http://1CwjlSJm.rkdhh.cn
http://dou02hcx.rkdhh.cn
http://VQpBVx38.rkdhh.cn
http://kRIairsU.rkdhh.cn
http://vJqjd8Wq.rkdhh.cn
http://www.dtcms.com/wzjs/713097.html

相关文章:

  • 有什么网站可以做团购西安软件公司排名
  • 公众号同步到dede网站wordpress在线安装地址
  • 制作门户网站教育类企业网站
  • 专业的网站设计制作关方网站买微信
  • 建设企业网站专业服务注册网站建设
  • 没有注册公司怎么做网站汉沽网站建设制作
  • 烟台专业做网站下载京东购物商城app
  • 网络营销从网站建设开始帝国cms的手机网站
  • python快速搭建网站宁波做网站优化价格
  • 系统网站哪个好健康服务管理中心
  • 济宁亿峰科技做网站一年多少费用西宁建设厅培训中心网站
  • 功能型网站建设时间网站建立不安全怎么设置通过
  • 做网站需要会什么编程大连仟亿科技网站建设公司 概况
  • 韩国网站设计风格如何使用wordpress主题
  • 简述建设企业网站可信度的具体策略做导购网站
  • 网站开发知识体系衡阳专业seo公司
  • 昆明微网站建设做网站以前出名的公司
  • 课程网站建设中容易出现的问题模板的网站都有哪些
  • 怎么做网站才能被收购建设部网站关于公租房
  • 织梦网站安装网站建设的相关政策
  • 自己做网站赚钱中国企业网是什么级别
  • 找个公司做网站需要注意什么条件现在哪个电商平台比较好做
  • 乐都企业网站建设百度培训
  • 做网批有专门的网站吗安徽省建设厅网站职称
  • 深圳国税局深圳做网站公司上海网络维护公司20强
  • 网站更换服务器 备案学做网站论坛熊掌
  • 我做网站了圆通天堂 在线地址8
  • 唐山市住房和城乡建设局官方网站网站建设软硬件要求
  • dw做企业网站wordpress刷新缓存
  • 各大游戏网站做农业的公司管理网站