配置apache和nodejs socket.io

时间:2017-11-03 12:07:21

标签: node.js apache sockets socket.io feathersjs

您好我正在使用apache 2.2和feathersjs在网站上工作。 在这个网站上我们有DV SSL,因此我们无法使用https访问子域名。

我的节点应用程序在3030端口上运行。所以我可以使用以下地址访问feathersjs应用程序:

http://mywebsite.com:3030

https://mywebsite.com:3030无效。

我需要使用像https://mywebsite.com/socket/这样的位置连接到feathersjs websocket(猜ws:// localhost:3030)

这是客户端代码:

const host = 'https://mywebsite.com/socket';
const socket = io(host,{
            transports: ['websocket'],
            forceNew: true
        });

我需要httpd配置来通过https连接ws。

post_virtualhost_global.conf

<VirtualHost 185.173.106.42:80>
  ServerName mywebsite.com

    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* ws://localhost:3030%{REQUEST_URI} [P]

    ProxyPass /socket http://localhost:3030/
    ProxyPassReverse /socket http://localhost:3030/

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

</VirtualHost>

<VirtualHost 185.173.106.42:443>
  ServerName freevery.com

    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* ws://localhost:3030%{REQUEST_URI} [P]

    ProxyPass /socket http://localhost:3030/
    ProxyPassReverse /socket http://localhost:3030/

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location /feathers>
        ProxyPass http://localhost:3030/
        ProxyPassReverse http://localhost:3030/
    </Location>

</VirtualHost>

如果我尝试使用http://mywebsite.com/socket连接网络套接字,则说

  

无法加载   http://mywebsite.com/socket.io/?EIO=3&transport=polling&t=L-1lgZ1:   重定向   'http://mywebsite.com/socket.io/?EIO=3&transport=polling&t=L-1lgZ1'来   'https://mywebsie.com/socket.io/?EIO=3&transport=polling&t=L-1lgZ1'   被CORS政策阻止:没有'Access-Control-Allow-Origin'   标头出现在请求的资源上。起源   因此,“http://localhost:3001”不允许访问。

如果我尝试使用https://mywebsite.com/socket连接网络套接字,则说

  

无法加载   https://mywebsite.com/socket.io/?EIO=3&transport=polling&t=L-1lUP5:不   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:3001”   访问。响应的HTTP状态代码为404.

我将Header set Access-Control-Allow-Origin "*"添加到我的.htaccess文件中但问题仍然存在。

我的配置有什么问题?

1 个答案:

答案 0 :(得分:0)

问题解决了。 Apache与nginx存在冲突,301错误形成了它。所以我使用nginx代理websocket,它正在子域上工作而没有任何问题。