go to  ForumEasy.com   
JavaPro  
 
 
   Home  |  MyForum  |  FAQ  |  Archive    You are not logged in. [Login] or [Register]  
Forum Home » Amazon AWS » Install Apache httpd on AWS EC2 instance
Email To Friend  |   Set Alert To This Topic Rewarding Points Availabe: 0 (What's this) New Topic  |   Post Reply
Author Topic: Install Apache httpd on AWS EC2 instance
Linux
member
offline   
 
posts: 120
joined: 01/24/2011
from: San Jose, CA
  posted on: 10/13/2011 06:58:40 PM    Edit  |   Quote  |   Report 
Install Apache httpd on AWS EC2 instance
So now we have:
  • A basic Linux box running in the cloud;
  • A public static ipAddress binding to the instance/box;
  • A public domain pointing to the ipAddress and hence the box;
  • A Tomcat container running in the box;

    Now we want an extra Apache web server sitting in front of Tomcat. Why? The advantages are:
  • Apache is efficient in handling static contents via caching mechanism.
  • Apache supports multiple domains on the same ipAddress via VirtualHost
  • Better security by hiding Tomcat

    AWS micro EC2 instance supports the yum package manager, which installs RPM packages from a repository.
    # yum install httpd
    

    The main stuff is loaded under /etc/httpd

    Before starting our server, we can configure parameters in Apache’s "/etc/httpd/conf/httpd.conf". For example, the default document root is:
    DocumentRoot /var/www/html
    

    You may want to change it into:
    DocumentRoot /home/ec2-user/public_html
    


    Let’s create a HTML file named "test.html" in public_html directory:
    <html> 
    <body> 
    <p>Apache httpd server is running on AWS EC2 instance!</p> 
    </body> 
    </html>
    


    Now it's time to start the server:
    # /etc/init.d/httpd start
    


    If you want your server to survive box reboot:
    # chkconfig httpd on
    


  •  Profile | Reply Points Earned: 0
    Linux
    member
    offline   
     
    posts: 120
    joined: 01/24/2011
    from: San Jose, CA
      posted on: 10/13/2011 08:59:31 PM    Edit  |   Quote  |   Report 
    Running multiple name-based websites on a single IP address
    Your server has a single IP address, for example, 123.123.123.123, and multiple aliases (CNAMES) point to this machine in DNS. Specifically, You want to run a web server for www.example1.com and www.example2.com on the same machine.

    
    
       example1.com  --- DNS ---|
                                |
                                |--- 123.123.123.123 --->   /home/ec2-user
                                |                            + -- /example1.com
       example2.com  --- DNS ---|                               + -- /html
                                                                  - -- index.html 
                                                             + -- /example2.com
                                                                + -- /html 
                                                                  - -- index.html 
    
    




    Here is the corresponding settings in "/etc/httpd/conf/httpd.conf"

    # Ensure that Apache listens on port 80
    Listen 80
    
    # Listen for virtual host requests on IP addresse: 123.123.123.123
    NameVirtualHost 123.123.123.123:80
    
    <VirtualHost 123.123.123.123:80>
      DocumentRoot /home/ec2-user/example1.com/html
      ServerName example1.com
      ServerAlias www.example1.com
      
      # Other directives here
    
    </VirtualHost>
    
    <VirtualHost 123.123.123.123:80>
      DocumentRoot /www/ec2-user/example2.com/html
      ServerName example2.com
      ServerAlias www.example2.com
    
      # Other directives here
    </VirtualHost>
    
    

     Profile | Reply Points Earned: 0
    Linux
    member
    offline   
     
    posts: 120
    joined: 01/24/2011
    from: San Jose, CA
      posted on: 10/18/2011 06:55:28 PM    Edit  |   Quote  |   Report 
    A working case for name-based virtual hosting
    For same reason, the name-based virtual hosting on explicit IP address is not working on AWS EC2 Micro instance. But the wildcard * is working which means it is going to accept all requests to this server. Any request with unmatched domain/server name will be served by the first <VirtualHost> block, which is the default one.

    # Listen for virtual host requests 
    NameVirtualHost *:80
    
    <VirtualHost *:80>
      ServerName example1.com
      ServerAlias www.example1.com
      DocumentRoot /home/ec2-user/example1.com/html
      SuexecUserGroup ec2-user ec2-user
    
      <Directory /home/ec2-user/example1.com/html>
        Options Indexes Includes FollowSymLinks
        AllowOverride All
      </Directory>
      
    </VirtualHost>
    
    <VirtualHost *:80>
      ServerName example2.com
      ServerAlias www.example2.com
      DocumentRoot /www/ec2-user/example2.com/html
    
      <Directory /home/ec2-user/example2.com/html>
        Options Indexes Includes FollowSymLinks
        AllowOverride All
      </Directory>
    
    </VirtualHost>
    

     Profile | Reply Points Earned: 0
    AwsEC2
    member
    offline   
     
    posts: 39
    joined: 08/28/2012
    from: CA
      posted on: 08/29/2012 09:07:34 PM    Edit  |   Quote  |   Report 
    Side Notes
    1) The settings should be
    # Listen for virtual host requests 
    NameVirtualHost *:80
    
    <VirtualHost *:80>
      ServerName example1.com
      ServerAlias www.example1.com
      DocumentRoot /home/ec2-user/example1.com/html
      SuexecUserGroup ec2-user ec2-user
    
      <Directory /home/ec2-user/example1.com/html>
        Options Indexes Includes FollowSymLinks
        AllowOverride All
      </Directory>
      
    </VirtualHost>
    
    <VirtualHost *:80>
      ServerName example2.com
      ServerAlias www.example2.com
      DocumentRoot /home/ec2-user/example2.com/html
    
      <Directory /home/ec2-user/example2.com/html>
        Options Indexes Includes FollowSymLinks
        AllowOverride All
      </Directory>
    
    </VirtualHost>
    


    2) Error Forbidden: http://www.example1.com/ returns the followings
    Forbidden
    
    You don't have permission to access / on this server.
    
    Apache/2.2.22 (Amazon) Server at www.example1.com Port 80
    


    By default, the folder /home/ec2-user comes with the permission rwx------. Even though you have made all your document root /home/ec2-user/example1.com/html accessible by 'others' via rwxr-xr-x, http://www.example1.com/index.html will be forbidden. You have to allow the read permission from the very top node.
    
     + -- home                    rwxr-xr-x  root
        + -- ec2-user             rwxr-xr-x  ec2-user
           + -- example1.com      rwxr-xr-x  ec2-user
              + -- html           rwxr-xr-x  ec2-user
                 - -- index.html  rwxr-xr-x  ec2-user
           + -- example2.com      rwxr-xr-x  ec2-user
              + -- html           rwxr-xr-x  ec2-user
                 - -- index.html  rwxr-xr-x  ec2-user
    
    


    3) For testing purpose, you can fake the DNS from the local file

    Location: C:\Windows\System32\drivers\etc\hosts
    # Copyright (c) 1993-2006 Microsoft Corp.
    #
    # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    #
    # This file contains the mappings of IP addresses to host names. Each
    # entry should be kept on an individual line. The IP address should
    # be placed in the first column followed by the corresponding host name.
    # The IP address and the host name should be separated by at least one
    # space.
    #
    # Additionally, comments (such as these) may be inserted on individual
    # lines or following the machine name denoted by a '#' symbol.
    #
    # For example:
    #
    #      102.54.94.97     rhino.acme.com          # source server
    #       38.25.63.10     x.acme.com              # x client host
    
    123.123.123.123    example1.com    www.example1.com
    123.123.123.123    example2.com    www.example2.com
    


    Apparently, it works only from your local machine.

    Type into your browser: http://www.example1.com, you should get response similar like:
    This is content from index file for www.example1.com
    

     Profile | Reply Points Earned: 0
    AwsEC2
    member
    offline   
     
    posts: 39
    joined: 08/28/2012
    from: CA
      posted on: 06/07/2017 10:35:59 PM    Edit  |   Quote  |   Report 
    For Apache2.4:

    If you want to avoid the following rejection:

    Forbidden
    
    You don't have permission to access / on this server.
    
    Apache/2.4.7 (Ubuntu) Server at 10.11.10.182 Port 80
    
    


    you have to specifically give the permission inside file /etc/apache2/sites-enabled/canvas.conf:
    <Directory /var/canvas/public>
        Options All
        AllowOverride All
        Require all granted
      </Directory>
    


    Because, the main configuration file /etc/apache2/apache2.conf has the following:
    <Directory />
    	Options FollowSymLinks
    	AllowOverride None
            Require all denied
    </Directory>
    


    which must be overridden from sub-directory.


     Profile | Reply Points Earned: 0
    AwsEC2
    member
    offline   
     
    posts: 39
    joined: 08/28/2012
    from: CA
      posted on: 12/20/2022 10:36:05 PM    Edit  |   Quote  |   Report 
    Restart httpd after configuration file change
    # systemctl restart httpd
    
    or
    
    # service httpd restart
    


    To show status
    # systemctl status httpd.service -l
    


     Profile | Reply Points Earned: 0

     
    Powered by ForumEasy © 2003-2005, All Rights Reserved. | Privacy Policy | Terms of Use
     
    Get your own forum today. It's easy and free.