允许特定域通过 nginx 调用 api

允许特定域通过 nginx 调用 api

简而言之,我有一个网站和一个 API,它们都通过 Nginx 路由。有没有办法只允许来自该特定网站的 API 服务器响应调用?

我是新手服务器故障相关的事情,这是我在这里的第一个问题。

以下是详细信息。假设我有一个网站网站,使用 React-Redux 开发,具有以下 Nginx 配置

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name website.com www.website.com;
        location / {
                proxy_pass http://localhost:3000;
                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;
        }
    include snippets/ssl-params.conf;
    ssl_certificate /path/to/fullchain/pem/fullchain.pem; 
    ssl_certificate_key /path/to/privkey/pem/privkey.pem; 
}

server {
    if ($host = website.com) {
        return 301 https://$host$request_uri;
    } 
    if ($host = www.website.com) {
        return 301 https://$host$request_uri;
    } 
    listen 80;
    listen [::]:80;
    server_name www.website.com;
    return 302 https://$server_name$request_uri;
}     

形成这个网站我正在调用一个 API,它也托管在同一台服务器中,但在不同的域下,比如说api.website.com,具有以下 Nginx 配置

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name api.website.com;
        location / {
                proxy_pass http://localhost:8080;
                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;
        }
    include snippets/ssl-params.conf;
    ssl_certificate /path/to/fullchain/pem/fullchain.pem; 
    ssl_certificate_key /path/to/privkey/pem/privkey.pem; 
}

server {
    if ($host = api.website.com) {
        return 301 https://$host$request_uri;
    } 
    listen 80;
    listen [::]:80;
    server_name api.website.com;
    return 302 https://$server_name$request_uri;
}     

我想知道有什么方法可以改变配置api.website.com仅允许来自网站? 该呼叫是由前端发起的。

答案1

如果您的api.网站确实仅供同一服务器上的网站访问,您可以确保其域名解析为环回接口,并拒绝非本地连接。

例如在 中/etc/hosts输入:

127.0.0.1 api.example.com

在 NGINX 配置中,有:

server {
    server_name api.example.com;
    allow 127.0.0.1;
    allow ::1;
    deny all;
    ...
}

现在,当您的主网站与 对话时api.example.com,这将解析为127.0.0.1,从而确保也api.example.com能看到来自 的请求。来自外部的 的请求将被拒绝。127.0.0.1api.example.com

相关内容