Tuesday, September 3, 2013

Eliminate Apache "NameVirtualHost *:80 has no VirtualHosts", Or: Using Manual Virtual Hosts and Zend Server Application Deployment


The Problem

You restart Apache and get a nice NameVirtualHost *:80 has no VirtualHosts warning message, on the screen, or in the error log. Why, and how do you get rid of it?

The cause of this is simple, although the warning seems counterintuitive, since most likely you're seeing it after deliberately creating one or more virtual hosts in your Apache configuration.


If you're using Include configuration files, look carefully in the main configuration file, and in the Included files.  You will see multiple occurrences of the NameVirtualHost directive, like this:

In one configuration file (for example, httpd.conf):
NameVirtualHost *:80

In another configuration file (for example, extra/httpd-vhosts.conf):
NameVirtualHost *:80

The solution is to comment out the second one that is processed, and you will eliminate the warning.


How this manifested

For me, this occurred when I manually added a vhost to my development workstation, which is running Zend Server 6. I did not want to use its Application Deployment capability for local development, since I preferred in this case to just edit code, flip to my browser, and refresh.


I reserve Zend Server Application Deployment for deploying to a remote server, although I certainly test deployments locally first. There is a simple way to deploy once, and have edited code auto-saved to the server, so it is NOT at all necessary to avoid Application Deployment in local development, but that is a topic for another post.

Anyway, /usr/local/zend/apache2/conf/httpd.conf originally contained this commented directive:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

and /usr/local/zend/apache2/conf/extra/httpd-vhosts.conf originally contained the two dummy-host.example.com sample vhosts.  I commented these out and added my vhost:

# Virtual hosts
<VirtualHost *:10088>
    ServerName dev.florists.local
    ServerAdmin clark.e@zend.com
    DirectoryIndex index.php index.html

    SetEnv APPLICATION_ENV development

    DocumentRoot "/Users/eai/vhosts/florists/public"

    LogLevel warn

    php_value session.save_path "/path/to/my/development/session/directory"
    php_value upload_tmp_dir "/path/to/my/development/uploads/directory"

    <Directory /Users/eai/vhosts/florists/public>
        Options Indexes MultiViews FollowSymLinks
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ /index.php [NC,L]
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>


I then uncommented the #Include conf/extra/httpd-vhosts.conf line in httpd-vhosts.conf, and restarted apache with

$ sudo /usr/local/zend/bin/zendctl.sh restart-apache

and saw the warning:
Mon Sep 02 03:33:20 2013] [warn] NameVirtualHost *:10088 has no VirtualHosts

Looking at the two configuration files, this appeared in http.conf:
Include /usr/local/zend/apache2/conf.d/
#ZEND-{2F-blah-blah...}
NameVirtualHost *:10088

#ZEND-{13-blah-blah...}
Include "/usr/local/zend/etc/sites.d/zend-default-vhost-10088.conf"
#ZEND-{13-blah-blah...}

#ZEND-{2F-blah-blah...}
#ZEND-{AF-blah-blah...}
Include "/usr/local/zend/etc/sites.d/globals-*.conf"
Include "/usr/local/zend/etc/sites.d/vhost_*.conf"
#ZEND-{AF-blah-blah...}

And this was in http-vhosts.conf (this is what I hadn't paid any attention to):
#
# Use name-based virtual hosting.
#
NameVirtualHost *:10088

So, the directive was being processed twice.  This is merely a warning, since Apache will actually ignore the second directive and use only the first defined NameVirtualHost directive. If you're a Debian user and seeing this warning, take a peek at the ports.conf file.


How to Fix

Just comment out the second occurrence to be processed. In my case, this is the one in the main httpd.conf file, since the Include of the httpd-vhosts file comes before that line:

#ZEND-{2F-blah-blah...}
# Manually including conf/extra/httpd-vhosts.conf obviates this line - NameVirtualHost *:10088

#ZEND-{13-blah-blah...}

Restart again, and the warning is gone.


Tuesday, August 6, 2013

Use alternate SSH port with Zend Studio

To connect Zend Studio to a remote server using an alternate, non-standard SSH port (that is, other than port 22) you will do the following:
  • Create the connection.
  • View the properties of the connection.
  • Edit the port in the connection "Subsystem"

Create the connection

and specify only the hostname or IP address. Do not worry at this point about the port number. For instance, do not try to append the port to the hostname.

    Window | Open Perspective | Other | Remote System Explorer

    Window | Show View | Remote Systems


    Right-click in the blank area in the Remote Systems view, select New Connection then select SSH Only, click Next.

    Enter Host Name, Connection Name (a name for display purposes only), uncheck Verify host name, and click Next, th

    Under Available Services, click on Ssh / Sftp File Service, then click Finish.

    View the properties of the connection

    Expand the connection you just created, right-click on Sftp Files, and select Properties.  Click on Subsystem, and change the port number in the pane on the right. Click OK.

    Use the connection to view the remote files.

    Expand Sftp Files, expand either My Home or Root, enter the password (optionally selecting Save password) and click OK.