iamyojimbo
iamyojimbo

Reputation: 4699

Nginx sites-enabled, sites-available: Cannot create soft-link between config files in Ubuntu 12.04

I am trying to create soft links between config files containing server blocks in the sites-enabled and sites-available directories in /etc/nginx/.

The command I am using is:

sudo ln -s sites-available/foo.conf sites-enabled/

When I then execute:

ls -l

The result is:

lrwxrwxrwx 1 parallels parallels 27 Aug  6 20:44 immigrationinformation.conf -> immigrationinformation.conf

where the immigrationinformation.conf -> immigrationinformation.conf part has a charcoal with red typeface.

When I then try and access this soft-link, I am told that it is broken.

When I create the soft-link in the sites-available directory i.e.

sudo ln -s sites-available/foo.conf sites-available/foo_link.conf

it works as normal. However, if I then move this to the sites-enabled directory, the link is broken again.

I can create the soft link via the file manager GUI but not via the command line. I can also create hard-links with no problem.

I suspected it was a permissions issue so I have played around with setting all permissions to 777 of both directories and the directories themselves and also changing the owners to something other than root, but still with no luck.

Any help would me much appreciated, thank you.

Upvotes: 117

Views: 303903

Answers (5)

M. Hamza Rajput
M. Hamza Rajput

Reputation: 10276

In my case, I have multiple sites in site-available folder. All sites symbolic links are created with a single command:

ln -sf /etc/nginx/sites-available/* /etc/nginx/sites-enabled/

Then test and update nginx

# For testing nginx config
sudo nginx -t

# For updating nginx config
sudo nginx -s reload

Upvotes: 8

Rodney
Rodney

Reputation: 3051

You should start by understanding the target of a symlink is a pathname. It can be absolute or relative to the directory which contains the symlink.

Assuming you have foo.conf in /sites-available:

cd sites-enabled
sudo ln -s ../sites-available/foo.conf .
ls -l

Now, you will have a symlink in /sites-enabled called foo.conf which has a target ../sites-available/foo.conf.

Just to be clear, the normal configuration for Apache is for potential sites to live in /sites-available and the symlinks for the enabled sites to live in /sites-enabled, pointing at targets in sites-available.

That doesn't seem to be the case based on the way you described your setup; however that is not your primary problem.

If you want a symlink to ALWAYS point at the same file, regardless of the where the symlink is located, then the target should be the full path; ie:

ln -s /etc/apache2/sites-available/foo.conf mysimlink-whatever.conf

Here is (line 1 of) the output of my ls -l /etc/apache2/sites-enabled:

lrwxrwxrwx 1 root root  26 Jun 24 21:06 000-default -> ../sites-available/default

See how the target of the symlink is relative to the directory that contains the symlink (it starts with ".." meaning go up one directory).

Hardlinks are totally different because the target of a hardlink is not a directory entry but a filing system Inode.

Upvotes: 243

embarker
embarker

Reputation: 194

To shorten manual typing of each conf file, you can try from sites-enabled folder:

ln -s ../sites-available/*.conf .
sudo systemctl restart nginx

Upvotes: 2

Atif Tariq
Atif Tariq

Reputation: 2772

You can overwrite the existing file ../sites-enabled/myproject by forcing ln like this

sudo ln -sf ../sites-available/myproject ../sites-enabled/

then

sudo service nginx restart

Upvotes: 4

Bedram Tamang
Bedram Tamang

Reputation: 4374

My site configuration file is example.conf in sites-available folder So you can create a symbolic link as

ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/

Upvotes: 80

Related Questions