📒 

Sites Enabled with NGINX or Apache

NGINX and Apache are the two most widely used web servers in the world. Both are powerful, feature-rich, and highly configurable, making them the top choices for hosting websites. In Linux-based systems, NGINX and Apache handle website management by enabling and disabling websites using a system of configuration files, commonly referred to as sites-enabled and sites-available.

This article will guide you through the concepts of sites-enabled and sites-available, and explain how to enable and manage websites using NGINX and Apache web servers.

Understanding sites-available and sites-enabled

Both NGINX and Apache use a similar structure for managing websites. This structure separates the available sites from the enabled ones, allowing system administrators to easily manage which sites are live.

  • sites-available: This directory contains configuration files for all the websites that you can potentially serve with your web server. The files in this directory define the virtual hosts or server blocks (in the case of NGINX) and their configurations. These websites are not active until they are enabled.
  • sites-enabled: This directory contains symbolic links to the configuration files of websites that are currently enabled and being served by the web server. Only sites that have been “enabled” will be active and available to users.

Managing Sites with Apache

1. Apache Virtual Hosts Configuration

Apache uses virtual hosts to serve multiple websites from a single server. Each website has its own configuration file, which specifies how Apache should handle the domain, including directives like the document root, logs, and more.

Example Virtual Host Configuration File for Apache

You can create a virtual host configuration file in the /etc/apache2/sites-available/ directory. For example, to configure a website called example.com:

sudo nano /etc/apache2/sites-available/test.oo.md.conf

Inside the file, you would define the configuration for example.com:

<VirtualHost *:80>
ServerAdmin admin@test.oo.md
ServerName (your_domain or Ip_address)
ServerAlias www.test.oo.md
DocumentRoot /var/www/test.oo.md
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

*ServerName (your_domain or Ip_address)replace your_domain value which you use also for Ip_address.

2. Enable the Site

Once the virtual host configuration file is created, you can enable the site using the a2ensite command (Apache 2 Enable Site):

sudo a2ensite test.oo.md.conf

This creates a symbolic link from /etc/apache2/sites-available/test.oo.conf to /etc/apache2/sites-enabled/test.oo.md.conf, effectively enabling the website.

3. Reload Apache

After enabling the site, reload Apache to apply the changes:

sudo systemctl reload apache2

4. Disable the Site

To disable a site, you can use the a2dissite (Apache 2 Disable Site) command:

sudo a2dissite example.com.conf

This removes the symbolic link in the sites-enabled directory, and the site will no longer be served.

Managing Sites with NGINX

1. NGINX Server Block Configuration

NGINX uses server blocks, which are equivalent to Apache’s virtual hosts. Server block configuration files are placed in the /etc/nginx/sites-available/ directory.

Example Server Block Configuration for NGINX

To create a configuration file for example.com, run:

sudo nano /etc/nginx/sites-available/test.oo.md

Inside the file, you would define the server block for example.com:

server {
listen 80;
server_name example.com www.test.oo.md;
root /var/www/test.oo.md;
index index.html index.htm;
access_log /var/log/nginx/test.oo.md_access.log;
error_log /var/log/nginx/test.oo.md_error.log;
location / {
try_files $uri $uri/ =404;
}
}

2. Enable the Site

To enable the site, create a symbolic link in the sites-enabled directory that points to the configuration file in sites-available. You can do this with the ln command:

sudo ln -s /etc/nginx/sites-available/test.oo.md /etc/nginx/sites-enabled/

3. Test NGINX Configuration

Before reloading NGINX, it’s a good idea to test the configuration to ensure there are no syntax errors:

sudo nginx -t

4. Reload NGINX

If the configuration test passes, reload NGINX to apply the changes:

sudo systemctl reload nginx

5. Disable the Site

To disable a site, remove the symbolic link from the sites-enabled directory:

sudo rm /etc/nginx/sites-enabled/test.oo.md

Afterward, reload NGINX to apply the changes:

sudo systemctl reload nginx

Best Practices for Managing Sites with NGINX or Apache

  1. Keep Configuration Files Organized: Always create separate configuration files for each website or domain in the sites-available directory. This makes it easier to manage multiple websites.
  2. Test Configurations Before Reloading: Always test your configuration with apachectl configtest (for Apache) or nginx -t (for NGINX) before reloading the web server. This can help you avoid issues that may break your sites.
  3. Use Version Control for Config Files: If you’re managing a lot of websites or have a complex configuration, consider using version control (like Git) for your configuration files. This allows you to track changes and roll back if necessary.
  4. Use HTTPS: Always configure SSL certificates for your sites. Let’s Encrypt provides free SSL certificates and can easily be integrated with Apache or NGINX for HTTPS support.
  5. Monitoring and Logs: Always configure access and error logs for each site. This helps in troubleshooting issues and monitoring traffic.

Conclusion

Both NGINX and Apache provide powerful ways to manage websites with the sites-available and sites-enabled directories. This structure allows you to easily enable, disable, and manage multiple websites from a single server.

For Apache, you can use commands like a2ensite and a2dissite, while in NGINX, you can manually create and remove symbolic links to enable or disable sites. Regardless of the web server you’re using, remember to reload the server after making changes, and always test configurations before applying them.

By following these practices, you’ll have a smooth experience managing multiple sites on your NGINX or Apache web server.

Let me know if you need further clarification or assistance!