您好我正在使用apache 2.2和feathersjs在网站上工作。 在这个网站上我们有DV SSL,因此我们无法使用https访问子域名。
我的节点应用程序在3030端口上运行。所以我可以使用以下地址访问feathersjs应用程序:
但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文件中但问题仍然存在。
我的配置有什么问题?
答案 0 :(得分:0)
问题解决了。 Apache与nginx存在冲突,301错误形成了它。所以我使用nginx代理websocket,它正在子域上工作而没有任何问题。