socket.io的apache代理配置(项目不在root中)

gig*_*604 4 apache proxy node.js socket.io

我知道有几个这样的问题,但我找不到一个解决我的问题的项目不在服务器根目录.我有以下情况:我有一个Apache服务器,它运行几个项目,如:

  • 0.0.0.0/project1
  • 0.0.0.0/project2
  • ...

我添加了一个node.js项目,我们称之为nodeproject.使用ProxyPass,我将对0.0.0.0/nodeproject的请求传递给我的节点服务器正在运行的0.0.0.0:8080.除了socket.io的websocket配置之外,这一切都正常.在我的/etc/apache2/apache2.conf文件中,我放置了此代码来进行代理.(mod_proxy_wstunnel是enabeld)我基本上从这里复制.

 0.0.0.0/project1
 0.0.0.0/project2
Run Code Online (Sandbox Code Playgroud)

失败的请求如下所示:

ProxyRequests off
ProxyVia on

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/nodeproject/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:8080/$1 [P,L]

ProxyPass        /nodeproject/socket.io http://localhost:8080/socket.io
ProxyPassReverse /nodeproject/socket.io http://localhost:8080/socket.io

<Location /nodeproject>
    ProxyPass http://localhost:8080
    ProxyPassReverse http://localhost:8080
</Location>
Run Code Online (Sandbox Code Playgroud)

我得到一个错误的请求400响应.

我不是配置这种东西的专家我哪里出错了?

提前致谢!

sn0*_*n0r 11

您不应将重写条件放在/etc/apache2/apache2.conf中,而是放在虚拟主机指令中(在/etc/apache2/sites-available/000-project-whatever.conf中).

这是我自己的一个小项目的例子.

<VirtualHost *:80>

ServerName sockey.api
ServerAdmin webmaster@localhost
DocumentRoot /var/www/sockey.api
<Directory /var/www/sockey.api>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
</Directory>

ErrorDocument 404 /index.html
ErrorLog ${APACHE_LOG_DIR}/sockey.api.error.log
CustomLog ${APACHE_LOG_DIR}/sockey.api.access.log combined

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:8081/$1 [P,L]

ProxyPass        /socket.io http://localhost:8081/socket.io
ProxyPassReverse /socket.io http://localhost:8081/socket.io

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)