NGINX SSL配置忽略API位置块

时间:2017-12-15 20:22:26

标签: node.js reactjs ssl nginx

我最近一直在尝试使用Let的加密SSL服务将我的Web应用程序升级到https。我的应用程序是一个React前端,它在与Express后端/ api相同的AWS实例中运行。

我无法让网站的https版本正常工作,因为它向非SSL认证的Express服务器发出请求,有效地锁定了网站的https版本,无法使用后端。

我的解决方案是尝试配置NGINX块来代理Node.js服务器。我的NGINX配置并不复杂,看起来像这样:

server {
  listen 443 ssl default_server;
  server_name example.site.com;
  root /home/ubuntu/react/build;

  ssl_certificate /etc/letsencrypt/live/example.site.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/example.sitecom/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  location /api/ {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_pass http://localhost:3050/; //port where API runs
  }

  location / {
    try_files $uri $uri/ /index.html;
    add_header   Cache-Control public;
    expires      1d;
  }
}

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name example.site.com;

 return 301 https://$host$request_uri;
}

当我运行http版本时,此设置工作正常,但似乎已完全分解为https。 NGINX似乎完全忽略了/ api位置块 - 每当我尝试直接导航到/ api端点时,它会将我重定向到下面的位置块(为反应应用程序提供服务的静态文件)。我已经摆弄了各种各样的设置,并且在我的生活中无法弄清楚为什么NGINX没有考虑到/ api位置块,或者为什么SSL认证会改变它通过/读取的方式块。

0 个答案:

没有答案