2013-01-22 28 views
18

Tôi đã làm việc trên một dự án Perl Mojolicious sử dụng websockets. Tôi muốn khởi chạy nó trên một máy chủ chia sẻ chạy apache và sử dụng proxyPass và proxyPassReverse để làm cho url đẹp hơn cho mã Mojolicious của tôi đang chạy với Hypnotoad.Apache proxyPassReverse và Websockets

Tôi đã thiết lập nó như sau.

Apache url:

mydomain.com 

Hypnotoad url:

mydomain.com:8080 

Với mục apache sau tôi có thể đảo ngược proxy server Hypnotoad để

project.mydomain.com 

nhập apache.conf

<VirtualHost *:80> 
    ServerName project.mydomain.com 
    DocumentRoot /var/www/project 
    <Directory /var/www/project/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
    </Directory> 
    ProxyRequests Off 
    ProxyPreserveHost On 
    ProxyPass/http://mydomain.com:8080/ keepalive=On 
    ProxyPassReverse/http://mydomain.com:8080/ 
    RequestHeader set X-Forwarded-HTTPS "0" 
</VirtualHost> 

Tuy nhiên yêu cầu WebSocket tôi đưa ra một lỗi 404 khi tôi sử dụng:

ws://project.mydomain.com/get-data 

và một lỗi 302 khi tôi sử dụng:

ws://mydomain.com:8080/get-data 

Tôi đoán đây sẽ không phải là một vấn đề được các WebSocket đã không kiểm tra xác thực, nhưng họ sử dụng các tuyến đường Mojolicious để kiểm tra xem bạn có thể đăng thông qua websocket hay không.

Từ những gì tôi có thể thấy, Apache không hỗ trợ websockets proxy ngược. Trong tập tin conf apache/httpd.

Có ai đã tìm thấy giải pháp có thể sử dụng cho việc này bằng Apache ổn định cho môi trường sản xuất không?

Trả lời

15

Trong tháng 1 a patch was committed to the Apache trunk bởi Jim Jagielski cho phép websockets được proxy chính xác. Bản vá thêm một mô-đun con mới được gọi là proxy_wstunnel mà allows mod_proxy to work with the "ws" and "wss" protocols.

Mô-đun chưa có trong bất kỳ bản phát hành Apache chính thức nào (kể từ ngày 8 tháng 6 năm 2013), do đó bạn sẽ cần phải tự biên dịch. Voyageur's blog mô tả quy trình cho Apache 2.2, nhưng sẽ dễ dàng hơn cho Apache 2.4

+0

@ user1439590 bạn nên chấp nhận điều này làm câu trả lời – lkraav

15

Apache httpd 2.4.6 bao gồm các yêu cầu webs proxy.

+6

Điều này phù hợp hơn với nhận xét chứ không phải là câu trả lời. Khi bạn [có đủ danh tiếng] (http://stackoverflow.com/help/privileges/comment), hãy cân nhắc việc chuyển bài đánh giá này sang nhận xét về câu hỏi. –

+3

@SameerSingh Tôi nghĩ rằng đây chính là câu trả lời cho câu hỏi, bởi người bắt đầu bản vá. – iwein

Các vấn đề liên quan