nginx 配置以启用具有源匹配的 CORS

2023-12-21

我尝试过使用一个非常流行的配置 https://gist.github.com/Stanback/7145487对于nginx,它启用了CORS并支持使用正则表达式进行源匹配。

这是我的配置:

server {
    listen 80 default_server;
    root /var/www;

    location / {
        if ($http_origin ~ '^http://(www\.)?example.com$') {
            add_header Access-Control-Allow-Origin "$http_origin";
        }

        # Handling preflight requests
        if ($request_method = OPTIONS) {
            add_header Content-Type text/plain;
            add_header Content-Length 0;
            return 204;
        }
    }
}

但是,此配置必须使用两个条件:一是匹配原始域名,二是捕获预检请求。因此,当第二个条件匹配时,第一个条件中的标头不会添加到响应中。

根据如果是邪恶 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/官方文章,这是 nginx 的预期行为。

If If Is Evil那么如何在 nginx 中启用 CORS 呢?或者也许有办法以某种方式克服这个限制?


您可以尝试使用map而不是第一个if block:

map $http_origin $allow_origin {
    ~^http://(www\.)?example.com$ $http_origin;
}
map $http_origin $allow_methods {
    ~^http://(www\.)?example.com$ "OPTIONS, HEAD, GET";
}

server {
    listen 80 default_server;
    root /var/www;

    location / {
        add_header Access-Control-Allow-Origin $allow_origin;
        add_header Access-Control-Allow-Methods $allow_methods;

        # Handling preflight requests
        if ($request_method = OPTIONS) {
            add_header Content-Type text/plain;
            add_header Content-Length 0;
            return 204;
        }
    }
}

nginx 将拒绝添加空的 HTTP 标头,因此只有在以下情况下才会添加它们:Origin标头存在于请求中并与此正则表达式匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 配置以启用具有源匹配的 CORS 的相关文章

  • uWSGI重启时停机

    每次当我有代码更新时重新启动服务器时 我都会遇到 uwsgi 问题 当我使用 sudo restart account 重新启动 uwsgi 时 停止和启动实例之间存在一个小间隙 导致停机并停止所有当前请求 当我尝试 sudo reload
  • 比较 nginx+Apache+mod_wsgi 与 nginx+uWSGI?

    在生产中使用 nginx Apache mod wsgi 与 nginx uWSGI vurtualenv 有何优缺点 我在自 2007 年以来开发的 mod wsgi 中看到了第一个变体的优点 并且具有更稳定的版本和易于管理 第二种变体的
  • 安全灵活的跨域会话

    我有一个问题希望你能帮忙解决 假设我在一家名为 Blammo 的假设公司工作 我们有一个名为 Log 的假设产品 我正在尝试建立一个系统 人们可以登录 logfromblammo com 并订购我们的一些产品 然后当他们准备好购买时 前往
  • Kong - 验证上游 ssl(ssl_proxy 打开)

    我已经成功为 API 安装了 kong 网关 该 API 通过上游负载平衡到多个目标 应用程序服务器 现在 我有一个我的应用程序服务器的自签名证书 kong 和目标之间的 ssl 握手应该失败 我推断 kong 不验证上游证书 经过一些研究
  • Kubernetes nginx 入口控制器返回 502,但仅适用于 AJAX/XmlHttpRequest 请求

    我有一个在 nginx 入口控制器后面运行 Kubernetes 的 Web 应用程序 它对于请求浏览工作正常 但来自浏览器的任何 AJAX XMLHTTPRequest 都会从 nginx 收到 502 错误 我捕获了常规请求和 AJAX
  • 上传大文件(几 GB)时,nginx 返回内部服务器错误

    我在 nginx 后面有一个 Artifactory 上传大于 4 GB 的文件失败 我相当确定这是 nginx 的错误 因为如果文件从本地主机上传 上传到本地主机 则不会出现问题 nginx 设置为client max body size
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • Nginx 中 uwsgi_pass 和 proxy_pass 的区别?

    我在 Nginx 后面运行 uWSGI 并一直在使用proxy pass让 Nginx 访问 uWSGI 切换到有什么好处吗uwsgi pass 如果是这样 那是什么 uwsgi pass使用一个uwsgi协议 proxy pass使用普通
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Laravel 5.2 CORS,GET 不适用于预检选项

    可怕的 CORS 错误 跨源请求被阻止 同源策略不允许读取 远程资源位于http localhost mysite api test http localhost mysite api test 原因 CORS 标头 Access Cont
  • 使用 application/json contentType 的 AJAX POST 调用收到“no 'Access-Control-Allow-Origin' header”错误

    我有下面的 Javascript 函数 每当我运行它 使用 WebView 从 Android 应用程序调用它 时 它都会作为application x www form urlencoded尽管有dataType json 属性 如果我添
  • Docker:Nginx 和 php5-fpm docker 不说话

    我想进行完全 Docker 化的 Drupal 安装 我的第一步是让容器与 Nginx 和 php5 fpm 一起运行 两者都基于 Debian 我在 CoreOS alpha 频道 使用 Digital Ocean 我的 Dockerfi
  • nginx docker 容器:502 错误网关响应

    我有一个服务监听 8080 端口 这不是一个容器 然后 我使用官方镜像创建了一个 nginx 容器 docker run name nginx d v root nginx conf etc nginx conf d p 443 443 p
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • Django + uwsgi + ngnix + 调试关闭 = 服务器错误(500)

    我正在尝试设置一个由 Django uwsgi Nginx 组成的生产服务器 我正在关注的教程位于此处http www panta info blog 3 how to install and configure nginx uwsgi a
  • Http POST 删除 URL 中的端口

    我有一个用 Django 构建的网络应用程序 我目前正在家里的路由器后面的笔记本电脑上运行它 我将路由器配置为将发送到特定端口的所有流量路由到该笔记本电脑 我将 Nginx 作为 Apache 的反向代理 使用 mod wsgi 来运行 D
  • 使用nginx容器作为反向代理时的原始url

    我有一个 Web 应用程序部署为码头集装箱 我也有一个nginx容器 使用dnsmasq解析器 设置为充当 Web 应用程序前面的反向代理 它的 80 端口映射到主机 我的应用程序使用 SSO 身份验证 当我使用身份提供商登录时 回调 ur
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den

随机推荐

  • 使用 WPF 绘图时如何消除这些“尖峰”视觉伪影?

    我当前正在为地图应用程序绘制一些图块 小方形图像 我正在使用 WPF 在这些图块上绘制形状 我有一个地理空间坐标列表 它们组成了绘制的多边形 组成这些多边形的地理空间坐标被转换为像素坐标 这些图块是按照各种设定的细节级别创建的 在大多数细节
  • Angular:在配置/运行之前加载环境属性

    我正在开发一个 Angular 应用程序 该应用程序有大约 10 个可配置属性 取决于环境和客户端 我在 json 配置文件中拥有这些属性 但这确实很麻烦 每个环境 公司必须有特定的构建 所以我想在应用程序加载时从后端检索这些属性 所以为了
  • 使用 WPS 隐藏登录插件后,我被锁定在 WordPress 之外

    我有一个我建立的 WordPress 网站 我已经安装并使用了 WPS 隐藏登录插件来帮助提高安全性 如果有帮助的话 我将登录 URL 的值保留为我认为的默认值 login 当我去 login 登录屏幕出现 我输入正确的凭据 几秒钟后我被重
  • 在 O(E logV) 中求图中的单调最短路径

    创意题第 34 题这一页 http algs4 cs princeton edu 44sp 单调最短路径 给定一个边加权有向图 找到一条从 s 到所有其他顶点的单调最短路径 如果路径上每条边的权重严格递增或严格递减 则路径是单调的 部分解决
  • 如何使用 Scipy 处理巨大的稀疏矩阵构造?

    因此 我正在处理维基百科转储来计算大约 5 700 000 个页面的页面排名 这些文件经过预处理 因此不是 XML 格式 它们取自http haselgrove id au wikipedia htm http haselgrove id
  • 有什么方法可以从另一台计算机上使用 exe4j 运行由 jar 制成的 exe 吗?

    我制作了一个 GUI 程序来输入内容 然后将 javamail 发送到我的电子邮件 我必须从 javamail 1 4 5 导入许多 jar 库 然后将其构建 shift f11 为 jar 然后使用 exe4j 使其成为 exe 还添加
  • 使用不同的参数模拟相同的方法

    我正在使用mockito来测试我的业务服务 它使用了我想要模拟的实用程序 每个服务方法中至少有 2 3 个具有不同参数的实用程序调用 有没有推荐的方法来使用多个when thenReturn 对于相同的方法但不同的参数 我也想用any 游行
  • Android Studio 1.2 - 默认情况下项目编码不匹配

    我是一个Android菜鸟 刚刚升级到Android Studio 1 2 当我创建一个新项目 API 16 Android 4 1 Jelly Bean 时 我立即收到以下警告 警告 项目编码 windows 1252 与 Gradle
  • 如何用java实现SOA?

    我是 SOA 的新手 我想知道如何在 Java 中实现 SOA 我正在浏览各种仅处理概念的站点 它没有给出有关实现细节的清晰想法 以便在 Java 中使用 SOA 请提供有关如何实施 SOA 的详细信息 Thanks SOA 是关于设计原则
  • 向 Android SwipeRefreshLayout 添加文本提示

    如何在 listView 的顶部添加提示 例如 下拉刷新 该提示包含在 android support v4 的 swipeRefreshLayout 中 下拉刷新有效 但我想在用户稍微向下拉列表视图时添加文本 编辑 2014 年 10 月
  • Powershell 命令将断开连接的用户踢出服务器

    是否有一个 powershell 命令可以用来将 断开连接 的用户踢出服务器 一旦我知道踢单个用户的单行代码 我就可以编写脚本 例如 我想踢掉下面对话框中看到的 8 个用户 我不能尝试这个 pc qwinsta server YourSer
  • Ionic - 如何禁用 Android 键盘上的键盘建议

    我已经尝试了所有 ion textarea 的可能性 例如 type email 等 我无法让它在所有 Android 版本上工作 我已经安装了 cordova plugin ionic keyboard 它显示了没有建议的键盘 图 A 但
  • 使用 OpenID 登录时如何转义 URL 中的 & 符号?

    好吧 实际上我知道 我应该用 26 替换 但我使用此 URL 通过 OpenID 登录 如您所见 continue 参数已正确转义 但是在通过 Google 登录页面重定向后 它会将我重定向回 https innubili gidea ap
  • 如何为 UITabBarItem 创建操作?

    我创建了一个没有 UITabBarController 的 UITabBar 和 UITabBarItems 现在我想知道如何在单击 UITabBarItem 时放置一个操作 我应该使用什么方法对 UITabBarItem 执行操作 您无法
  • VSCode 重新映射键盘快捷键

    I have been trying for awhile now to remap the Ctrl Tab and Ctrl Shift Tab keys to switch editor tabs linearly Like they
  • 使用 Ruby 1.9.3 时出现“证书验证失败”OpenSSL 错误

    我在 Mac OS 10 6 8 上使用 Ruby 1 9 3p0 使用 rvm 安装 当我尝试使用创建新的 Rails 应用程序时托管在 GitHub 上的应用程序模板 https github com RailsApps rails3
  • 如何 printf 像表格一样对齐我的输出?

    printf 如何像表格一样对齐输出 Title Author BaokyBook Baoky2 Use basename commandUse basename command Baoky 我的部分代码是这样的 titlelength t
  • NSTimer 暂停不起作用

    我设置了三个按钮start stop pause 并给 NSTimer 提供控制来计算 开始停止按钮工作正常 给了我开始和停止时间 但是pause按钮没有给我准确的时间 它实际上是暂停时间 但再次开始它会添加暂停的计时和显示 ay 假设我在
  • OpenCV 框架:未找到架构 armv7 的符号

    我有预编译opencv2 framework http sourceforge net projects opencvlibrary files opencv ios 2 4 8 来自 OpenCV 我已将其添加到我的项目中 然而 尝试编译
  • nginx 配置以启用具有源匹配的 CORS

    我尝试过使用一个非常流行的配置 https gist github com Stanback 7145487对于nginx 它启用了CORS并支持使用正则表达式进行源匹配 这是我的配置 server listen 80 default se