通过Nginx代理转发配置实现跨域的方法(API代理转发)

接下来我会详细讲解通过Nginx代理转发配置实现跨域的方法。这种方法通常用于解决前端应用在访问不同域的API服务时会存在的跨域问题。

简介

跨域是指浏览器从一个域名的网页去请求另一个域名的资源,这里的域名可以理解为协议、主机名、端口号的组合。通常情况下,浏览器限制了脚本中发起跨域HTTP请求。这种安全机制可以有效的防止一些跨站攻击,并保证用户的安全。但是在前后端分离开发中,要连接到不同的API服务,往往就会遇到跨域问题。这时,我们可以通过配置一个Nginx代理服务,在代理服务中转发请求,以实现跨域访问。

实现步骤

以下是通过Nginx代理转发配置实现跨域的主要步骤:

1. 安装Nginx

如果你没有Nginx,需要首先安装Nginx。可以通过包管理器来安装,例如:

# On Ubuntu/Debian
sudo apt-get update
sudo apt-get install nginx

# On CentOS/Fedora
sudo yum update
sudo yum install nginx

2. 配置Nginx

首先,我们需要配置Nginx。可以通过修改Nginx的默认配置文件/etc/nginx/nginx.conf,在http 块内添加以下内容:

http{
  # 设置日志级别
  error_log /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log combined;

  # 设置允许的域名和请求方法
  add_header 'Access-Control-Allow-Origin' '*';
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

  # 配置 API 路由规则
  location /api/ {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  # 其他配置,如gzip, https 等
  ...
}

上述配置的作用是:
- 设置允许跨域访问;
- 配置 /api/ 的路由规则,代理到本地的 3000 端口;
- 配置一些其他的 HTTP 选项(例如 gzip)。

3. 修改API请求地址

在前端代码中,将原本的API调用地址改为代理地址,例如:

axios.get('/api/user/1')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });

上述示例中的/api会被Nginx代理到本地的3000端口,最终得到API的响应。

4. 重启Nginx

完成上述步骤后,需要重新启动Nginx,使配置生效。可以使用以下命令进行管理:

# 检查配置是否正确
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

示例说明

以下是两个示例说明,帮助理解如何通过Nginx代理转发配置实现跨域。

  1. 如果API服务的地址是http://localhost:3000,前端应用的地址是http://localhost:8080。可以在Nginx中配置如下内容:
server {
    listen 8080;
    server_name localhost;

    # 配置允许跨域请求
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

    # 配置路由规则,将请求代理到本地的 3000 端口
    location /api/ {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 其他配置
    ...
}
  1. 如果API服务的地址是http://example.com:8080,前端应用的地址是http://example.com:80。可以在Nginx中配置如下内容:
server {
    listen 80;
    server_name example.com;

    # 配置允许跨域请求
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

    # 配置路由规则,将请求代理到外部的 8080 端口
    location /api/ {
        proxy_pass http://example.com:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 其他配置
    ...
}

以上是通过Nginx代理转发配置实现跨域的攻略及示例说明。希望可以帮助您快速并正确的解决前后端分离中的跨域问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过Nginx代理转发配置实现跨域的方法(API代理转发) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • nginx 过滤了自定义的请求头参数

      请求头参数为  token_info  然后本地测试是OK的,但是放到服务器上就获取不到请求头参数了,   本地用的单纯 代码启动的http server,没用nginx   后来发现 了这个参数       underscores_in_headers on; #该属性默认为off,表示如果header name中包含下划线,则忽略掉。复制代码    …

    Nginx 2023年4月11日
    00
  • 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一、理论概述 服务发现的概念简述 consul简述 二、部署docker+consul+Nginx案例 环境 部署 三、测试 四、总结 服务发现的概念简述 在以前使用的是,N台机器运行了N个服务,客户端必须要知道这N个服务各自的网络位置,以前的做法是配置在配置文件中,或者有些配置在数据库中。 问题: 需要配置N个服务的网络位置,加大配置的复杂性 每个服…

    Nginx 2023年4月13日
    00
  • nginx: [error] invalid PID number “” in “/usr/local/nginx/logs/nginx.pid”

    iwangzheng.com   tty:[0] jobs:[0] cwd:[/opt/nginx/conf] 12:45 [root@a02.cmsapi]$ /usr/local/nginx/sbin/nginx -s reload nginx: [error] invalid PID number “” in “/usr/local/nginx/log…

    Nginx 2023年4月13日
    00
  • nginx配置https的方法示例(免费证书)

    下面是详细的“nginx配置https的方法示例(免费证书)”攻略。 准备工作 在配置HTTPS之前,需要准备以下材料: 一个域名 一台服务器(可以为Linux或Windows服务器) 一个电子邮件账户(用于向证书颁发机构CA请求证书) 第一步:申请证书 我们可以免费向Let’s Encrypt证书颁发机构申请证书,以获得可靠的HTTPS证书。 安装cert…

    Nginx 2023年5月16日
    00
  • 安装Nginx网络HTTP服务器(Linux) (2015-01-23)

    第一步:安装依赖库 CentOS用这个 yum install make gcc pcre-devel zlib-devel openssl-devel git bison wget   Ubuntu用这个 sudo apt-get install gcc libpcre++-dev libssl-dev make git   第二步:下载所需nginx的扩…

    Nginx 2023年4月11日
    00
  • php原因 nginx报错[error] 10773#0: *272212065 recv() failed (104: Connection reset by peer) while reading response header from upstream

    nginx error.log报错:[error] 10773#0: *272212065 recv() failed (104: Connection reset by peer) while reading response header from upstream中文解释:recv()失败(104:由对等点连接重置)同时从上游读取响应消息头解决方法:修…

    Nginx 2023年4月10日
    00
  • Nginx的安装及简单配置

    Nginx安装 1.下载相关组件 yum install -y gcc gcc-c++                                   #安装C/C++编译器 yum -y install gd-devel geoip-devel perl-ExtUtils-Embed wget http://125.39.35.133/files/40…

    Nginx 2023年4月16日
    00
  • 基于Nginx实现HTTPS网站设置的步骤

    下面我将详细讲解“基于Nginx实现HTTPS网站设置的步骤”的完整攻略。 1. 前置条件 在进行 HTTPS 网站设置之前,需要具备如下前置条件: 已经安装了 Nginx; 已经获得了 SSL 证书; DNS 服务已经将域名解析到 Nginx 的 IP 地址上; 已经将 443 端口添加到 Nginx 的防火墙规则中。 2. 步骤 2.1 安装 SSL 证…

    Nginx 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部