如何在 Nginx 中设置双向 SSL 以实现自定义位置?

2024-03-13

我有一个带有一些 API 的 Rails 4 项目。

该项目运行于nginx v.1.6.3 and https关于生产。

Nginx 配置:

upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/tmp/unicorn.my_domain.sock fail_timeout=0;
}

server {
       listen         80;
       server_name    my_domain.com;
       return         301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/public.crt;
    ssl_certificate_key /etc/nginx/ssl/private.rsa;    

    server_name my_domain.com;

    root /var/www/current;

    location /assets {
        root /var/www/current/public;
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

Problem

API 请求(POST /api/some_path/create等)应使用双向 SSL 进行保护。

只有一个服务会使用此 API(只有 1 个客户端拥有一个证书)

Question

  1. nginx能处理吗two-way SSL?
  2. two-way SSL应实施于nginx层,而不是 Web 应用程序逻辑。我对吗?
  3. 如何设置nginx捕获发送请求的客户端/api/...url 并对其进行身份验证two-way SSL?

我只需要一个基本示例来了解它应该如何工作。


  1. 是的(参见ssl_客户端_证书 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate and ssl_验证_客户端 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_verify_client指令)。
  2. 取决于您的应用程序,但在这种情况下,您只需要验证证书是否由某个 CA 签名,这是正确的。
  3. 您需要创建一个 CA 和由该 CA 签名的客户端证书,并使用该 CA 来验证服务器端的客户端证书。

    现在,你需要考虑的是如何解决这个问题ssl_客户端_证书 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate and ssl_验证_客户端 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_verify_client指令不支持在 location 块中使用(例如,它们只能在 http 或 server 块中使用)。

    我建议为 API 创建一个自己的子域(例如 api.my_domain.com),并使用该地址从服务访问 API。

配置示例:

server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/public.crt;
    ssl_certificate_key /etc/nginx/ssl/private.rsa;

    ssl_client_certificate /etc/nginx/ssl/client_ca.pem;
    ssl_verify_client on;

    server_name api.my_domain.com;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app/api;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Nginx 中设置双向 SSL 以实现自定义位置? 的相关文章

  • 地址栏中的 https 锁和公司名称

    我注意到在查看贝宝的网站时 他们的公司名称位于 Chrome 中的锁定图标旁边 这是因为他们创作了 ssl 证书 还是您认为他们是如何实现这一目标的 这是我一直很好奇的事情 但在搜索过程中我很难找到任何答案 您需要一个称为 扩展验证 EV
  • 自动化脚本:如果 FieldA = 1,则将 FieldB 设置为“one”

    我试图将这个问题分解为可管理的部分 空间查询 https stackoverflow com questions 56587515 maximo spatial query 我认为第一步是创建一个自动化脚本这样做是这样的 从字段中获取值 用
  • 企业库 CacheFactory.GetCacheManager 抛出空引用

    我正在尝试将使用 1 1 版本的企业库缓存块的应用程序转换为 2 0 版本 我认为我真正遇到的问题是不同 EntLib 部分的配置被分成几个文件 显然 这曾经是由ConfigurationManager 部分处理程序 但现在已经过时 取而代
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Nginx - 自定义 404 页面

    Nginx PHP 在 fastCGI 上 对我来说非常有用 当我输入不存在的 PHP 文件的路径时 我不会得到默认的 404 错误页面 任何无效的 html 文件都会出现该错误页面 而只会得到 未指定输入文件 如何自定义此 404 错误页
  • 如何以编程方式创建证书签名请求 (CSR)?

    如何用C实现呢 openssl req new key cert key out cert csr openssl x509 req in cert csr CA rootCA crt CAkey rootCA key CAcreatese
  • Docker:Nginx 和 php5-fpm docker 不说话

    我想进行完全 Docker 化的 Drupal 安装 我的第一步是让容器与 Nginx 和 php5 fpm 一起运行 两者都基于 Debian 我在 CoreOS alpha 频道 使用 Digital Ocean 我的 Dockerfi
  • WebSockets 监听 UNIX 域套接字?

    是否可以在 nginx 服务器后面设置一个 WebSockets 服务器来处理 UNIX 域套接字上的连接 我目前在同一台计算机上有多个 WebSocket 服务器实例 并且存在端口共享问题 所有实例都必须分配一个唯一的端口 我想避免这种情
  • 如何使用代理将 boost::asio 连接到 HTTPS 服务器?

    在我们的应用程序中 我们使用 boost asio 来使用 HTTP 和 HTTPS 进行连接 我们还可以使用 HTTP 代理 现在我需要使用代理添加对 HTTPS 服务器的支持 我研究了相当多的样本 发现所需的步骤似乎是 创建到代理的 H
  • 如何在 AWS Elastic Beanstalk 上配置 WSGI 应用程序的名称?

    我的 Python Web 应用程序称为app example py import flask app flask Flask name split 0 当我尝试使用 AWS EB 启动它时 run py set correctly wit
  • WebView ssl 错误

    对不起我的英语不好 我需要加载 url https 我有一些问题 当我尝试加载页面时 webView 给我错误 primary error 3 certificate Issued to CN my site com Issued by C
  • OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

    我几天来一直在努力让它发挥作用 我正在尝试通过以下方式连接到我的服务器https带有自签名证书 我认为现在没有任何页面或示例是我未读过的 我做了什么 按照本教程创建了 bks 密钥库 http blog crazybob org 2010
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 如何正确配置Tomcat SSLHostConfig?

    我正在按照本教程在 tomcat 中启用 ssl https medium com raupach how to install lets encrypt with tomcat 3db8a469e3d2 https medium com
  • 在 Spring Boot application.properties 中指定信任存储信息

    我在用springBoot版本1 2 0 RELEASE 我正在尝试通过配置我的密钥库和信任库application properties 当我添加以下设置时 我可以使密钥库正常工作 但不能使信任库正常工作 server ssl key s
  • nginx 反向代理到 apache-wordpress 可以工作,但到外部 url 的 proxy_pass 失败

    我有一个针对 apache wordpress 的 nginx 反向代理设置 效果很好 但是 根据位置需要重定向到失败的外部 url 请检查以下配置 这是一个有效的设置吗 https platform com https platform
  • 为什么 opcache 没有刷新?

    我用guzzlehttp guzzle封装在拉拉维尔 8 升级到后PHP 8 I get Symfony Component ErrorHandler Error FatalError Invalid opcode 117 2 0 in f
  • 将代码从 htaccess 重写为 nginx 配置?

    我在将 htaccess 文件中的重写代码实现到 nginx 配置中时遇到问题 我已经尝试过生成器 http winnginx com htaccess http winginx com htaccess用于生成我的重写 代码 我的ngin
  • PHP 文件由浏览器下载,而不是由本地开发服务器(MAMP)处理

    一切都很顺利 直到我添加AddHandler application x httpd php5s php到本地服务器文档根目录中的 htaccess 文件 根据我正在使用的站点 我经常更改该文件 因为我访问时这样做了http 本地主机 88

随机推荐