Laravel Websockets Setup on ubuntu server

author

By Freecoderteam

Apr 27, 2024

223

image

The configuration of a virtual host on Apache for a Laravel application that includes WebSockets involves setting up the virtual host to handle HTTP requests and to properly forward WebSocket connections to the Laravel WebSocket server. Here’s a basic example of what your Apache virtual host configuration might look like for a Laravel application using SSL and WebSockets:

Step-by-Step Configuration

1. Create or Edit Virtual Host File

You would typically create a new configuration file in /etc/apache2/sites-available/ for your site. For example:

sudo nano /etc/apache2/sites-available/yourdomain.com.conf

2. Configure the Virtual Host with SSL and WebSocket Support

Here’s an example configuration. Make sure to replace yourdomain.com with your actual domain and update paths to your certificates and Laravel project directory appropriately.

<VirtualHost *:443>
    ServerName yourdomain.com
    DocumentRoot "/var/www/yourdomain.com/public"

    # SSL Configuration
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

    <Directory "/var/www/yourdomain.com/public">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Log files
    ErrorLog ${APACHE_LOG_DIR}/yourdomain.com_error.log
    CustomLog ${APACHE_LOG_DIR}/yourdomain.com_access.log combined

    # WebSocket proxy
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/(.*) "ws://localhost:6001/$1" [P,L]

    ProxyPass /ws ws://localhost:6001/
    ProxyPassReverse /ws ws://localhost:6001/

</VirtualHost>

Explanation

  • SSL Configuration: Ensures that the connection is encrypted. You must have SSL certificates installed; the example assumes you're using Let's Encrypt.

  • Document Root: This is where you point Apache to the public directory of your Laravel application.

  • Directory Block: This configures the directory-specific settings, allowing overrides (like those from an .htaccess file).

  • Rewrite Conditions and Rule: These lines check if the request is a WebSocket upgrade and, if so, proxy the request to your WebSocket server running on localhost:6001.

  • ProxyPass and ProxyPassReverse: These directives are crucial for handling WebSocket connections properly through Apache. They ensure that WebSocket requests to /ws are forwarded to the WebSocket server and responses are handled correctly.

Enabling the Configuration

After setting up your virtual host configuration, you need to enable it and make sure all necessary Apache modules are enabled:

sudo a2ensite yourdomain.com.conf
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo systemctl restart apache2

This setup instructs Apache to handle both traditional HTTP requests and WebSocket connections on the same domain, ensuring that WebSocket requests are correctly proxied to the WebSocket server managed by Laravel.

Share this post :

Subscribe to Receive Future Updates

Stay informed about our latest updates, services, and special offers. Subscribe now to receive valuable insights and news directly to your inbox.

No spam guaranteed, So please don’t send any spam mail.