簡體   English   中英

如何配置 localhost nginx 來代理 https 遠程后端

[英]How do I configure localhost nginx to proxy https remote backend

我正在用 JS 開發 Web UI 前端,用於現在使用 HTTPS 的后端 API。 我的開發機器上的以下 nginx 配置就是我所需要的:

http {
  include /etc/nginx/mime.types;
  disable_symlinks off;

  server {
    disable_symlinks off;
    listen 8080;
    server_name localhost;

    location /api/ {
        proxy_pass                http://www.my-api.com;
    }

    location /some-path/ {
      disable_symlinks off;
      root /var/www;
      index index.html;
    }
  }

}

但是現在www.my-api.com是一個 https 端點。

我需要對我的 nginx 配置進行哪些調整,以便將我的 localhost 請求轉發到 HTTPS 后端?

下面的配置偵聽本地主機端口 8080 並重定向到https://www.my-api.com 由於 API 可在端口 443 上訪問,因此它應包括 SSL 認證檢查。

http {
  include /etc/nginx/mime.types;
  disable_symlinks off;

  server {
    disable_symlinks off;
    listen 8080;
    server_name localhost;

    location /api/ {
        proxy_pass                https://www.my-api.com;
        proxy_http_version  1.1;
        proxy_cache_bypass  $http_upgrade;

        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        "upgrade";
        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;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-Port  $server_port;
    }

    location /some-path/ {
      disable_symlinks off;
      root /var/www;
      index index.html;
    }
  }

}

以下是對我有用的服務器部分。 @Jay Achar 讓我很接近,老實說,為了簡化配置,我應該嘗試一些事情。 我添加了以下幾行:-

    ssl_client_certificate /etc/ssl/certs/ca-certificates.crt;
proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
proxy_ssl_server_name on;

我還發現我的代理主機名不正確。 在我的情況下, www. 前面不對。 我懷疑主機的證書與那里的www不匹配。 也許只需將@Jay Achar 的答案與正確的遠程主機名一起使用就足夠了。

/etc/ssl/certs/ca-certificates.crt來自我的 openssl。 我認為它適合作為客戶端證書發送到代理主機。

我對@Jay Achar 的配置所做的唯一其他更改是在行中

  proxy_set_header Host              $proxy_host;
  proxy_set_header X-Real-IP         $upstream_addr;

同樣,也許這些改變是不必要的。

    server {
        disable_symlinks off;
        listen 8080;
        server_name pb.localhost;
        
        ssl_client_certificate /etc/ssl/certs/ca-certificates.crt;
        location /api {
            proxy_pass  https://my-api.com:443;

            proxy_ssl_server_name on;
                proxy_http_version  1.1;
                proxy_cache_bypass  $http_upgrade;

            proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
                proxy_set_header Upgrade           $http_upgrade;
                proxy_set_header Connection        "upgrade";
                proxy_set_header Host              $proxy_host;
                proxy_set_header X-Real-IP         $upstream_addr;
                proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Host  $host;
                proxy_set_header X-Forwarded-Port  $server_port;
        }

        location /some-path/ {
            disable_symlinks off;
            root /var/www;
            index index.html;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM