PHP或Apache/Nginx服务器域名白名单配置及API安全鉴权咨询
Plesk + Ubuntu 环境下API域名白名单实现方案
下面是适配你场景的两种可落地方案,按优先级排序:
方案1:Plesk面板原生配置(优先选择,无服务器操作经验也可快速落地)
不需要登陆服务器改配置,所有操作都在Plesk可视化界面完成,配置出错会直接提示不会生效,不会影响线上业务。
- 第一步:确认站点Web引擎
登陆Plesk后台,进入对应API站点的「主机设置」页,找到Web服务器板块,确认运行的是Apache还是Nginx。 - 第二步:添加白名单配置
进入站点的「Apache & Nginx 设置」页,拉到页面最下方的「附加指令」板块:- 若使用Nginx,在Nginx附加指令输入框填写以下内容,将示例域名替换为你75个白名单域名即可:
# 定义白名单Origin映射 map $http_origin $allowed_origin { default ""; https://example1.com "https://example1.com"; https://example2.com "https://example2.com"; # 按以上格式依次添加剩余73个白名单,必须带完整http/https前缀,有端口的话也要带上 } # 配置CORS头 add_header Access-Control-Allow-Origin $allowed_origin always; add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always; add_header Access-Control-Allow-Headers "Content-Type, Accept" always; # 处理OPTIONS预检请求 if ($request_method = OPTIONS) { return 204; } # 非白名单请求直接返回403拦截 if ($allowed_origin = "") { return 403; }
- 若使用Apache,在Apache附加指令输入框填写以下内容,将正则内的域名替换为你的75个白名单即可:
# 匹配白名单Origin SetEnvIf Origin "^(https://example1\.com|https://example2\.com)$" allowed_origin # 所有75个域名都写到上面的正则里,用|分隔,注意域名里的.要转义成\. # 配置CORS头 Header always set Access-Control-Allow-Origin %{allowed_origin}e env=allowed_origin Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" env=allowed_origin Header always set Access-Control-Allow-Headers "Content-Type, Accept" env=allowed_origin <IfModule mod_rewrite.c> RewriteEngine On # 处理OPTIONS预检请求 RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=204,L] # 拦截非白名单请求 RewriteCond %{ENV:allowed_origin} ^$ RewriteRule ^(.*)$ - [R=403,L] </IfModule>
- 第三步:点击「应用」保存配置,Plesk会自动重载Web服务,配置完成后可以用非白名单域名发起请求测试是否返回403。
方案2:增强安全性补充方案
因为Origin/Referer头存在伪造的可能性,如果你对安全性要求更高,可以再加一层轻量校验:
- 提前和所有调用方约定一个固定密钥,要求调用方在请求头中携带
X-Req-Sign字段,值为MD5(请求路径 + 10位unix时间戳 + 约定密钥),同时携带X-Req-Time字段存时间戳 - 在CodeIgniter 3的公共控制器构造函数里加校验逻辑:先判断时间戳是否在前后5分钟范围内,再校验签名是否一致,即使Origin头被伪造也无法通过校验。
注意事项
- 如果有服务端直接调用API的场景(无Origin头),不要把这类调用放到域名白名单里,建议单独加IP白名单校验
- 75个域名数量较多,建议单独存成一个配置文件,Nginx/Apache都支持
include指令引入外部配置,后续更新白名单不需要修改核心配置,降低出错概率
内容的提问来源于stack exchange,提问作者vikas dhiman
相关产品推荐
相关产品推荐

