When setting up multiple websites on Ubuntu with Nginx, the most conventional approach is to use /var/www/
as the root directory. This follows the Filesystem Hierarchy Standard (FHS) and is widely adopted in the Linux community.
For your specific case with multiple domains, here's the recommended structure:
/var/www/
├── mysite1.co.uk/
│ ├── www/ # Public files
│ ├── logs/ # Site-specific logs
│ └── private/ # Non-public files
└── mysite2.co.uk/
├── www/
├── logs/
└── private/
Here's how to create this structure with proper permissions:
sudo mkdir -p /var/www/{mysite1.co.uk,mysite2.co.uk}/{www,logs,private}
sudo chown -R $USER:$USER /var/www
sudo chmod -R 755 /var/www
For each site, create a server block configuration in /etc/nginx/sites-available/
:
server {
listen 80;
server_name mysite1.co.uk www.mysite1.co.uk;
root /var/www/mysite1.co.uk/www;
index index.html index.htm;
access_log /var/www/mysite1.co.uk/logs/access.log;
error_log /var/www/mysite1.co.uk/logs/error.log;
location / {
try_files $uri $uri/ =404;
}
}
While /var/www/
is standard, some alternatives exist:
/srv/www/
- For service-specific data/home/user/www/
- For development environments
For enhanced security:
sudo chown -R www-data:www-data /var/www/mysite1.co.uk/www
sudo find /var/www/mysite1.co.uk/www -type d -exec chmod 750 {} \;
sudo find /var/www/mysite1.co.uk/www -type f -exec chmod 640 {} \;
After creating the config file, enable it with:
sudo ln -s /etc/nginx/sites-available/mysite1.co.uk /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
When setting up websites on Ubuntu with Nginx, the most common and recommended location is under /var/www/
. This directory is specifically designated for web content and follows Linux Filesystem Hierarchy Standard (FHS).
/var/www/
├── domain1.com
│ ├── public_html/ # Public files (equivalent to www/)
│ ├── private/ # Non-public files
│ └── logs/ # Domain-specific logs
└── domain2.com
├── public_html/
├── private/
└── logs/
Here's how to properly set up your directory structure for Nginx:
sudo mkdir -p /var/www/mysite1.co.uk/public_html
sudo mkdir -p /var/www/mysite1.co.uk/private
sudo mkdir -p /var/www/mysite2.co.uk/public_html
sudo mkdir -p /var/www/mysite2.co.uk/private
# Set proper permissions
sudo chown -R $USER:$USER /var/www/mysite1.co.uk
sudo chown -R $USER:$USER /var/www/mysite2.co.uk
sudo chmod -R 755 /var/www
For each site, create a server block in Nginx:
server {
listen 80;
server_name mysite1.co.uk www.mysite1.co.uk;
root /var/www/mysite1.co.uk/public_html;
index index.html index.htm index.php;
location /private/ {
deny all;
return 404;
}
# Additional configuration...
}
While /var/www/
is standard, some administrators prefer:
/srv/www/
- For service-specific data/home/user/www/
- For development environments
Key factors when choosing location:
- Security implications
- Backup strategy
- Server maintenance procedures
- Multi-user access requirements
Always follow the principle of least privilege:
# Recommended permission structure
sudo chown -R www-data:www-data /var/www/mysite1.co.uk/public_html
sudo find /var/www/mysite1.co.uk/public_html -type d -exec chmod 750 {} \;
sudo find /var/www/mysite1.co.uk/public_html -type f -exec chmod 640 {} \;