[英]apache proxy configuration for socket.io (project not in root)
我知道有幾個這樣的問題,但我找不到一個解決我的問題的項目不在服務器根目錄中。 我有以下情況:我有一個運行多個項目的 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
是啟用的,我基本上是從這里復制的。
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>
失敗的請求如下所示:
ws://0.0.0.0/nodeproject/socket.io/?EIO=3&transport=websocket&sid=MDuVcHmt3T1sa8ruAAAa
我得到一個錯誤的請求 400 響應。
我不是配置這類東西的專家,我哪里出錯了?
提前致謝!
您不應將重寫條件放在/etc/apache2/apache2.conf
,而應放在/etc/apache2/apache2.conf
中的虛擬主機指令in /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>
使用以下配置,我能夠使用 Apache 作為 socket.io 的代理:
RewriteEngine On
RewriteCond %{QUERY_STRING} transport=polling [OR]
RewriteCond %{REQUEST_URI} /socket.io/socket.io.js
RewriteRule /socket.io/(.*)$ http://localhost:8082/socket.io/$1 [P]
ProxyPass /socket.io/ ws://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:8082/socket.io/
考慮到有兩種類型的請求通過 https:對 js 文件socket.io.js
本身的請求和輪詢請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.