Bird
Raised Fist0
Nginxdevops~5 mins

Separate config files per site in Nginx - Commands & Configuration

Choose your learning style10 modes available
Introduction
When you host multiple websites on one server, managing all settings in one big file gets confusing. Separating configuration files for each site helps keep things organized and easier to update.
When you want to host multiple websites on the same server without mixing their settings.
When you need to update one website's settings without affecting others.
When you want to enable or disable a website quickly by adding or removing its config file.
When you want to keep your server configuration clean and easy to understand.
When you want to share configuration files with others or back them up separately.
Config File - nginx.conf
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    keepalive_timeout 65;

    # Include separate site config files
    include /etc/nginx/sites-enabled/*;
}

This is the main nginx configuration file.

The key part is include /etc/nginx/sites-enabled/*; which tells nginx to load all configuration files inside the sites-enabled folder.

Each site will have its own config file in that folder, making management easier.

Commands
Create directories to store separate site config files and enable them.
Terminal
sudo mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
Expected OutputExpected
No output (command runs silently)
Create a config file for the site example.com with its own settings.
Terminal
sudo nano /etc/nginx/sites-available/example.com
Expected OutputExpected
No output (command runs silently)
Enable the site by linking its config file into the sites-enabled folder.
Terminal
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Expected OutputExpected
No output (command runs silently)
Test nginx configuration for syntax errors before reloading.
Terminal
sudo nginx -t
Expected OutputExpected
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reload nginx to apply the new site configuration without downtime.
Terminal
sudo systemctl reload nginx
Expected OutputExpected
No output (command runs silently)
Key Concept

If you remember nothing else from this pattern, remember: use separate config files per site and include them in the main nginx.conf for clean and easy management.

Common Mistakes
Editing the main nginx.conf directly for each site instead of using separate files.
It makes the file large and hard to manage, increasing risk of errors.
Create separate config files for each site in sites-available and enable them via sites-enabled.
Forgetting to test nginx configuration with 'nginx -t' before reloading.
Reloading with errors can cause nginx to fail and websites to go down.
Always run 'sudo nginx -t' to check for syntax errors before reloading.
Not creating a symbolic link in sites-enabled to enable the site config.
Nginx will not load the site config if it's only in sites-available.
Create a symbolic link from sites-available to sites-enabled to activate the site.
Summary
Create separate config files for each website in /etc/nginx/sites-available.
Enable sites by linking their config files into /etc/nginx/sites-enabled.
Include the sites-enabled folder in the main nginx.conf to load all site configs.
Test configuration syntax with 'nginx -t' before reloading nginx.
Reload nginx to apply changes without downtime.

Practice

(1/5)
1. What is the main benefit of using separate config files per site in nginx?
easy
A. It makes nginx run faster by loading fewer files.
B. It allows nginx to serve only one site at a time.
C. It automatically secures each site with HTTPS.
D. It keeps the nginx setup organized and easier to manage.

Solution

  1. Step 1: Understand config file organization

    Separate config files help keep settings for each site distinct and clear.
  2. Step 2: Recognize management benefits

    This organization makes it easier to update or troubleshoot individual sites without affecting others.
  3. Final Answer:

    It keeps the nginx setup organized and easier to manage. -> Option D
  4. Quick Check:

    Separate configs = better organization [OK]
Hint: Separate files mean easier site management [OK]
Common Mistakes:
  • Thinking separate files speed up nginx
  • Assuming separate files enable HTTPS automatically
  • Believing nginx serves only one site with separate files
2. Which nginx directive correctly includes all site config files from the sites-enabled directory?
easy
A. include /etc/nginx/conf.d/*;
B. include /etc/nginx/sites-available/*;
C. include /etc/nginx/sites-enabled/*;
D. include /etc/nginx/sites-enabled.conf;

Solution

  1. Step 1: Identify the correct directory for active sites

    The sites-enabled directory holds active site configs linked from sites-available.
  2. Step 2: Use the include directive properly

    Using include /etc/nginx/sites-enabled/*; loads all enabled site configs.
  3. Final Answer:

    include /etc/nginx/sites-enabled/*; -> Option C
  4. Quick Check:

    Include sites-enabled/* loads active sites [OK]
Hint: Include sites-enabled/* to load active sites [OK]
Common Mistakes:
  • Including sites-available instead of sites-enabled
  • Using wrong directory like conf.d for site configs
  • Missing the wildcard * to include all files
3. Given the command ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/, what is the effect?
medium
A. It creates a symbolic link to enable example.com site.
B. It copies the example.com config to sites-enabled.
C. It deletes the example.com config file.
D. It disables the example.com site.

Solution

  1. Step 1: Understand the ln -s command

    The command creates a symbolic link from the source to the target location.
  2. Step 2: Link sites-available to sites-enabled

    Linking example.com config into sites-enabled activates the site in nginx.
  3. Final Answer:

    It creates a symbolic link to enable example.com site. -> Option A
  4. Quick Check:

    ln -s from sites-available to sites-enabled enables site [OK]
Hint: ln -s link enables site by linking config [OK]
Common Mistakes:
  • Thinking ln -s disables the site
  • Assuming ln -s deletes or copies files
  • Confusing symbolic link with file copy
4. You added a new site config in sites-available but forgot to link it in sites-enabled. What happens when you reload nginx?
medium
A. The new site is ignored and not served.
B. Nginx throws a syntax error and fails to reload.
C. The new site is active and served by nginx.
D. Nginx deletes the config file automatically.

Solution

  1. Step 1: Understand sites-available vs sites-enabled

    Sites-available holds configs but only linked sites in sites-enabled are active.
  2. Step 2: Effect of missing link on reload

    Without a link, nginx ignores the new config and serves only enabled sites.
  3. Final Answer:

    The new site is ignored and not served. -> Option A
  4. Quick Check:

    Missing link means site ignored on reload [OK]
Hint: Link site config to sites-enabled to activate [OK]
Common Mistakes:
  • Expecting nginx to auto-enable new configs
  • Thinking nginx reload fails without link
  • Assuming nginx deletes unlinked configs
5. You want to add a new site with config in /etc/nginx/sites-available/newsite. Which sequence correctly enables it and reloads nginx safely?
hard
A. Copy config to sites-enabled, then run nginx -s reload
B. Create symbolic link in sites-enabled, test config with nginx -t, then reload nginx
C. Edit nginx.conf directly to add newsite, then restart nginx
D. Move config to sites-enabled, then reload nginx without testing

Solution

  1. Step 1: Enable site by linking config

    Create a symbolic link from sites-available/newsite to sites-enabled to activate it.
  2. Step 2: Test nginx config before reload

    Run nginx -t to check for syntax errors and avoid downtime.
  3. Step 3: Reload nginx to apply changes

    Use nginx -s reload to apply new config without stopping the server.
  4. Final Answer:

    Create symbolic link in sites-enabled, test config with nginx -t, then reload nginx -> Option B
  5. Quick Check:

    Link + test + reload = safe enable [OK]
Hint: Always test config before reload after linking site [OK]
Common Mistakes:
  • Copying instead of linking config files
  • Reloading nginx without testing config
  • Editing nginx.conf instead of using sites-available
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard