Hỏi về cách proxy pass trong apache qua server mosca Nodejs



  • Chào mọi người !! Tình hình của em là em có một server ubuntu đang chạy apache2. Mà em đang có application mosca của Nodejs đang chạy ngầm ở port 8080 để xử lí các tác vụ về giao thức MQTT. Em có xài cách proxypass trong Apache để chuyển hướng request sang port 8080 để xứ lí. Ví dụ trong code client em xài mqtt.js connect vào http://mydomain.vn/server thì nó sẽ chuyển hướng tới ip của server và port 8080.

    Đây là cách em set up trong file /etc/apache2/sites-available/000-default.conf :

    <VirtualHost *:80>
    ServerName mydomain.vn
    ServerAlias www.mydomain.vn
    ServerAdmin [email protected]
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade}=^websocket$ [NC]
    RewriteRule /server ws://10.80.31.107:8080/$1 [P,L]
    RewriteCond %{HTTP:Upgrade}!=^websocket$ [NC]
    RewriteRule /server http://10.80.31.107:8080/$1 [P,L]
    ProxyRequests off
    ProxyPreserveHost on
    ProxyPass /server/ ws://10.80.31.107:8080/
    ProxyPassReverse /server/ ws://10.80.31.107:8080/
    ProxyPass / http://10.80.31.107:8081/
    ProxyPassReverse / http://10.80.31.107:8081/
    </VirtualHost>

    Nhưng chỉ khi xài mydomain.vn/ thì nó chuyển hướng được (qua server express của em để đổ giao diện) còn /server thì nó báo lỗi là Firefox can't establish connection to ws://mydomain.vn/server. Em đoán là do server mosca cần chạy websocket nên http thì nó không kết nối được, em cũng thử xài Rewrite để đổi lại url mà vẫn không kết nối được.

    Có cao nhân nào chỉ em cách để fix lỗi với ạ. Em cảm ơn !!!!



  • @Huya-Tran

    1. Bạn nhầm port: 8081 bạn config là cho http, 8080 cho websocket. Nhưng RewriteRule về hết 8080, vì rule cho websocket trước nên khi vào route /server bị trỏ về ws
    2. RewriteConf giống nhau nên Apache trỏ hết mọi kiểu kết nối về ws cmt trên mobile ko nhìn rõ thông cảm.
    3. Chung Route path /server nên dễ gây nhầm.

    Ngoài ra thì bạn kiểm tra xem bật wstunel chưa. Nói chung conf Apache mà gặp lỗi tổng hợp thế này thì sợ lắm ... phải cẩn thận.



  • This post is deleted!


  • Cảm ơn bạn mà mình chưa hiểu lắm. Tại cách config server apache mình cũng không rành, toàn lên google stackoverflow search ra cách thì thử thôi.

    • Mình muốn là khi mình gõ là http://mydomain.vn/ thì nó ra cái trang html mà server express trên port 8081 nó trả ra, cái này thì mình đã proxy pass qua được.
    • Trong cái trang http://mydomain.vn/ có một button để liên kết với server mosca để xài giao thức mqtt. Đại khái là khi user bấm vào button thì nó sẽ thực hiện dòng lệnh này :

    var client = mqtt.connect("ws://mydomain.vn/server/");

    thì nó sẽ kết nối được với mosca.js mình đã cho nó run trên port 8080 để client có thể giao tiếp với server bằng mqtt. Cơ mà mình cũng proxy pass với rewrite rule đủ các kiểu mà vẫn bị lỗi. Mình kiểm tra thì tất cả các mod_proxy mình đã bật lên rồi, mod proxy_wstunnel cũng đã bật, vẫn không biết lỗi là tại sao ???

    Đã nghĩ tới trường hợp là do domain mình chỉ là một subdomain nên chắc nó không lấy được ip của mình. Cơ mà thế mà tại sao server express vẫn chạy được ngon ơ, trong khi cái mosca thì ngược lại.

    Đoạn code ở trên mà mình thay bằng ip của con server mình với cái port kiểu ws://0.0.0.0:8080 thì nó lại chạy ngon ơ, cơ mà chỉ trong local thôi, ra internet là tạch liền. :((((((


Log in to reply