简而言之,我有一个网站和一个 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.1
api.example.com