【问题标题】:SSL settings for Nginx + expressNginx + express 的 SSL 设置
【发布时间】:2020-08-04 10:55:15
【问题描述】:

我正在使用 Nginx 和 express 构建一个 Web 服务器。

通过将请求从 80 端口重定向到 443 端口,Nginx 只允许加密连接。 并在443端口转发请求进行快递。

Nginx 的 conf 设置为:

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

server {
    listen 443 ssl;
    server_name api.domain.com;

    ssl_certificate /path
    ssl_certificate_key /path

    ...

    location / {
        proxy_pass http://localhost:3000;
    }
}

express 使用 CORS 中间件。

var app = express();

var cors = require('cors');
app.use(cors());

var server = http.createServer(app).listen(3000, 'localhost', function() { ... });

我尝试了https://www.steemcoinpan.com/sct/@morning/express-nginx-proxy-ssl-websocket 之类的方法,但还是不行。

我需要什么设置?

※ 新增

如果我调用类似“http://api.domain.com/login”之类的 API,[从源“http://localhost”访问“http://api.domain.com/login”处的 XMLHttpRequest: 3000' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。] 显示错误消息。

【问题讨论】:

  • 这对我来说也是一个有效的设置。您要解决的问题是什么?
  • 这能回答你的问题吗? Configuring HTTPS for Express and Nginx
  • 这里有什么问题?
  • 如果我调用类似“api.domain.com/login”的 API,[访问 XMLHttpRequest at 'api.domain.com/login' from origin'localhost:3000' 已被 CORS 策略阻止:对预检请求的响应没有' t pass access control check: Redirect is not allowed for a preflight request.] 显示错误消息。 @n9iels
  • 以上链接分别转发HTTP和HTTPS请求来表达。但是,我只想转发 HTTPS 请求来表达。 @Rob

标签: node.js express nginx


【解决方案1】:

您描述的问题与您的 SSL 设置或 Nginx 配置无关。您需要配置一个CORS policy。在排序中,请确保响应包含 Access-Control-Allow-Origin 标头。

在您的情况下,由于您正在尝试从 localhost:3000 访问 API,因此类似 Access-Control-Allow-Origin https://localhost:3000 的东西就可以了。在 Nginx 配置中使用 proxy_set_header 进行配置,或者在您的 NodeJs 应用程序中配置 Nginx 以使用 proxy_pass_header 传递此标头。

【讨论】:

  • 我是否也应该使用 HTTPS 运行 Node.js 服务器?
  • 这取决于环境。在您的设置中,有一个从客户端(例如浏览器)到 Nginx 的安全连接。从 Nginx 到您的 Node.js 应用程序的内部连接不安全。这很好,但请记住,其他有权访问您服务器的人可能会拦截此流量。
猜你喜欢
  • 2016-12-17
  • 1970-01-01
  • 2018-09-23
  • 2016-01-04
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2021-06-24
相关资源
最近更新 更多