Jump to content

Adding second website config to Apache


Go to solution Solved by foxclone,

Recommended Posts

My Apache2 local server is working fine for my website. I've added a test.conf to sites-available and added it to my hosts file so I can do some experimentation without messing with my production website. The problem is that when I try to go to it in my web browser, I get a Not Found. This is on a Linux system, and yes, I did restart apache after I added test.conf. There's nothing in either the error log or the access log. My entry from sites-enabled follows:

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName test
ServerAlias test
DocumentRoot /var/www/test/public_html
<Directory />
AllowOverride All
</Directory>
<Directory /var/www/test/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
ErrorLog /var/log/apache2/test-error.log
LogLevel error
CustomLog /var/log/apache2/test-access.log combined
</VirtualHost>

I'm beginning to wonder if test is a reserved word for apache. I'd appreciate some help on this.

Thanks in advance.

Link to comment
https://forums.phpfreaks.com/topic/314685-adding-second-website-config-to-apache/
Share on other sites

I did some testing. If I enter 127.0.0.1/test/public_html, the new test website appears in the web browser. This tells me the problem isn't in the hosts file. If I enter http://test/public_html in the web browser, I get a Not Found. This tells me that the the problem is with Apache.

The servername needs to be a domain name -- something that the DNS of your workstation can resolve.  

What you want to do is use an appropriate top level domain (ie. .com, .net etc)  for testing, and set that up in your hosts file on your workstation.

The IETF set aside a number of development tld's, and of these you should use either .test or .example.  You should avoid using .localhost even though that is also reserved, just in case you get some loopback conflict.

 

so what I'd suggest is that you add something like this in your /etc/hosts
 

127.0.0.1 www.project1.test
127.0.0.1 www.project2.test

 

It doesn't matter what project1 or project2 actually is.  One argument in favor of using one domain like (projects.test), is that you can setup a local SSL cert on your machine, and use that for multiple projects.  You would then use www.projects.test, cms.projects.test, admin.projects.test or whatever else makes sense for your development work.  It doesn't matter how you do it, so long as it works for you.  

In this example, I will stay with the 2 separate domains example.  Here is the apache vhosts config you would want:

 

<Directory />
  AllowOverride None
</Directory>

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName www.project1.test
DocumentRoot /var/www/public_html
<Directory /var/www/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
ErrorLog /var/log/apache2/project1-error.log
LogLevel error
CustomLog /var/log/apache2/project1-access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName www.project2.test
DocumentRoot /var/www/test/public_html
<Directory /var/www/test/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
ErrorLog /var/log/apache2/project2-error.log
LogLevel error
CustomLog /var/log/apache2/project2-access.log combined
</VirtualHost>

 

Notice that I fixed the Directory statements for each of your vhosts.  These refer to the directory structure of your server, so you can't redefine those perms, as they aren't relative to a specific vhost. 

Apache starts out with (or should, depending on your OS/Distribution) a definition of <Directory />AllowOverride None</Directory>  as a way of blacklisting the entire directory structure by default.  You are then meant to override specific directories from which you are actually serving content.  Usually this type of configuration is set so that you can/will have a .htaccess file in the root of your project directory that you will use for things like mod_rewrite rules.

@gizmola - Does that get put in as one long file? I did, and both project1 and project2 take me to the test folder. project1 should be taking me to the foxclone folder.

Edited by foxclone
additional info

No worries.  To answer your question, typically apache's main config file will load files in one or two other directories.  Some linux distros have schemes for turning vhosts on/off via symlinks from one directory to another.  It really depends on your OS/Linux distro and the defaults.  Reading through the conf files is worth doing.  The general best practice is to put each vhost in its own conf file.  You also want to have each virtual host site in its own directory, and not have any nesting.  In other words 

 

Do this:

/var/www/site1

/var/www/site2

Don't do this:

/var/www/site1

/var/www/site1/site2

Really, the best practice for php projects is to do this:

/var/www/site1/public  <- set webroot to this for site1.  

/var/www/site2/public <- webroot for site2

This allows you to have other directories with php files in them that you want to include, but can't be directly accessed via a url.  Things like config files, class definitions, function libraries etc. can all be kept out of webspace, but are still available by scripts in or beneath site1/public.  

 

@gizmola - I've run into a problem. I tried adding project2 to the file but it's not working. I did add an entry for it in hosts file. Here's what I have:

<Directory />
  AllowOverride None
</Directory>

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName foxclone
DocumentRoot /var/www/foxclone/public_html
<Directory /var/www/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
ErrorLog /var/log/apache2/foxclone-error.log
LogLevel error
CustomLog /var/log/apache2/foxclone-access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName www.project1.test
DocumentRoot /var/www/test/public_html
<Directory /var/www/test/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
ErrorLog /var/log/apache2/test-error.log
LogLevel error
CustomLog /var/log/apache2/test-access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName www.project2.test
DocumentRoot /var/www/brown/public_html
<Directory /var/www/brown/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
ErrorLog /var/log/apache2/test-error.log
LogLevel error
CustomLog /var/log/apache2/test-access.log combined
</VirtualHost>

What I get when I enter http://www.project2.test  in my browser is just an "Index of /" and a blank page. There is an index.php in the public_html folder.

 

I appreciate your help.

 

 

Edited by foxclone

I've split the combined file into individual files and get the same results. I'm totally stumped. Here's my project2.conf file:

<VirtualHost *:80>
ServerAdmin webmaster@test
ServerName www.project2.test
DocumentRoot /var/www/blue/public_html
<Directory /var/www/blue/public_html>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>
ErrorLog /var/log/apache2/test-error.log
LogLevel error
CustomLog /var/log/apache2/test-access.log combined
</VirtualHost>

 

Putting the vhosts into separate conf files is an option.  It's not a necessity.

In your original file i saw this mismatch:

DocumentRoot /var/www/foxclone/public_html
<Directory /var/www/public_html>

You declare the docroot to be /var/www/foxclone/public_html but then your Directory doesn't match that.  See the issue?

In order for an index.php to be the default file loaded you need a 

DirectoryIndex index.php

Somewhere in the loading of files.  

One other thing that can cause issues is that the user that apache is running as, needs at very least  "rx" permissions to directories, and "r" perms for the files.  It doesn't matter if they get those permissions as owner,group or other, although it's best practice not to use "other" perms.

Typically your apache process is going to be configured to run as "apache".  You can do a quick check from a shell using "ps aux | grep http" 

@gizmola- I fixed the foxclone problembefore my last message. The problem is that project 2,3, and 4 don't work. That's why I posted project2, hoping you'd see a problem. Here's the result of "ps aux | grep http" :

larry@t430:~$ ps aux | grep http
larry       2130  0.0  0.0   2420   520 ?        S    06:02   0:00 sh -c /usr/lib/x86_64-linux-gnu/libproxy/0.4.17/pxgsettings org.gnome.system.proxy org.gnome.system.proxy.http org.gnome.system.proxy.https org.gnome.system.proxy.ftp org.gnome.system.proxy.socks
larry       2131  0.0  0.0 233200  8556 ?        Sl   06:02   0:00 /usr/lib/x86_64-linux-gnu/libproxy/0.4.17/pxgsettings org.gnome.system.proxy org.gnome.system.proxy.http org.gnome.system.proxy.https org.gnome.system.proxy.ftp org.gnome.system.proxy.socks
larry       2185  0.0  0.0 16798540 3020 ?       Sl   06:03   0:00 /opt/google/chrome/chrome_crashpad_handler --monitor-self --monitor-self-annotation=ptype=crashpad-handler --database=/home/larry/.config/google-chrome/Crash Reports --url=https://clients2.google.com/cr/report --annotation=channel= --annotation=lsb-release=LMDE 5 (elsie) --annotation=plat=Linux --annotation=prod=Chrome_Linux --annotation=ver=100.0.4896.75 --initial-client-fd=5 --shared-client-connection
larry       2187  0.0  0.0 16790328 1324 ?       Sl   06:03   0:00 /opt/google/chrome/chrome_crashpad_handler --no-periodic-tasks --monitor-self-annotation=ptype=crashpad-handler --database=/home/larry/.config/google-chrome/Crash Reports --url=https://clients2.google.com/cr/report --annotation=channel= --annotation=lsb-release=LMDE 5 (elsie) --annotation=plat=Linux --annotation=prod=Chrome_Linux --annotation=ver=100.0.4896.75 --initial-client-fd=4 --shared-client-connection
larry       7522  0.0  0.0 277312 13336 ?        Sl   06:58   0:00 /usr/libexec/gvfsd-http --spawner :1.17 /org/gtk/gvfs/exec_spaw/1
larry      32030  0.0  0.0   6180   716 pts/0    S+   15:43   0:00 grep http

Thanks again.

Edited by foxclone

@gizmola - I just checked the status of Apache2 and got the following error:

Quote

larry@t430:~/Downloads$ apache2 --status
[Mon Apr 11 16:39:20.266821 2022] [core:warn] [pid 36331] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

Could this be part of the problem? Apache is installed in /etc/apache2. I'll set it and see what happens.

NOTE: I just found out only the config files are located in /etc/apache2. Don't know where the runtimes are.

Edited by foxclone
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.