【问题标题】:Nginx + nodejs, socket.io for https dosnt workNginx + nodejs,https的socket.io不起作用
【发布时间】:2020-10-05 03:33:20
【问题描述】:

我在服务器(https、socket.io)上自定义我的 nodejs 应用程序时遇到问题。 我使用:pm2、nginx(在端口:3000 上工作)、nodejs Prev 我为 :80 端口(http)定制了 nginx - 工作正常! 但是当我插入 ssl 证书并自定义他时,我在控制台中收到错误:

"Access to XMLHttpRequest at 'https://example:2053/socket.io/?EIO=3&transport=polling&t=NAPoEIt' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的 nginx 设置:


server {
    listen 80 default_server;
    server_name example.com www.example.com;
    return 301 http://skinsgaben.com$request_uri;
}

server {
    listen 443 ssl;

    server_name site.com www.example.com;
    ssl_certificate /var/www/site/ssl/example.crt;
    ssl_certificate_key /var/www/site/ssl/example.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://localhost:3000/;
        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

        location /socket.io/ {
                proxy_pass             http://localhost:3000/;
                proxy_redirect off;

                proxy_http_version      1.1;

                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;
    }

    error_log /var/www/site-log/error.log;
    access_log /var/www/site-log/access.log;
}

【问题讨论】:

  • 嗨 Maxim,你是否也对 nodejs 的服务器创建进行了更改?
  • 没有,我只是自定义了nginx
  • 是的,您还需要更改服务器的创建。您可以查看nodejs.org/en/knowledge/HTTP/servers/…

标签: node.js nginx https socket.io


【解决方案1】:

我主要将此模式用于本地和远程 nodejs 应用程序。

let host = process.env.host || 'your host';
let PORT = process.env.port || 'your port';

let protocol = 'http';
let options = {};
if (APP_ENV === 'production') {
    protocol = 'https';
    options = {
        key: fs.readFileSync(SSL.KEY),
        cert: fs.readFileSync(SSL.CERT)
    };
}

const server = require(protocol).createServer(options, app);
server.listen({ host, port: PORT }, () => {
    console.log(`Server listening on `);
});

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2020-02-22
    • 2021-06-18
    相关资源
    最近更新 更多