Forum

fastcgi from web..behind a firewall

yagnaram
25 March 2013, 02:38
Hi,
I installed Hiawatha (webserver) on port 8000 and started a fastcgi program ( see below) called fastcgiperl on another server(fcgi1server) to run in the background. The program runs fine (except for a quirk: a counter i have in my program increments by 2 for every request) . I am able to view the fastcgi program as long as I use intranet ip address.

I run the server on 192.168.2.10 on port 8000, the fastcgiperl run on 192.168.2.11

I am able to view the fastcgiperl output when i use http://192.168.2.10:8000/fastcgiperl

I wanted to make this program available over internet. I have a firewall and the two machines sit behind the firewall. Let us say my web ip address is 123.45.6.78. I used portforwarding to forward requests to port8000 to 192.168.2.10. I am able to load the index.html by:
http://123.45.6.78:8000

However when I try: http://123.45.6.78:8000/fastcgiperl, it returns "Not found 404" error page.

Am I missing anything? Am I supposed to open ports for fastcgi server too? It does not make sense.

Any help would be greatly appreciated. I do love you Hiawatha for its simplicity!


Hiawatha version: I used a freebsd port in january 2013 ( How do I find out the version?)
Operating System: freebsd
#fastcgi.pl
#!/usr/bin/perl

use strict;
use FCGI;

my $socket = FCGI::OpenSocket(":2005", 5);
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);
my $counter =0;
while ($request->Accept() >= 0) {
print "Content-Type: text/plain\r\n\r\n";

print $ENV{"REQUEST_METHOD"}." ".$ENV{"REQUEST_URI"};
if ((my $param = $ENV{"QUERY_STRING"}) ne "") {
print "?".$param;
}
print "Counting".$counter."\n";
print " ".$ENV{"SERVER_PROTOCOL"};
$counter=$counter+1;
}

FCGI::CloseSocket($socket);
Hugo Leisink
25 March 2013, 19:17
Do requests for 192.168.2.10 and 123.45.6.78 end up in the same virtual host? Can you show me your configuration file?
yagnaram
25 March 2013, 20:39
Hi Hugo,

Here is my config file.

Thanks a ton for looking!

Yag
# Hiawatha main configuration file
#


# GENERAL SETTINGS
#
#ServerId = www-data
ConnectionsTotal = 150
ConnectionsPerIP = 10
SystemLogfile = /var/log/hiawatha/system.log
GarbageLogfile = /var/log/hiawatha/garbage.log


# BINDING SETTINGS
# A binding is where a client can connect to.
#
Binding {
Port = 8000
# Interface = 127.0.0.1
# MaxKeepAlive = 30
# TimeForRequest = 3,20
}
#
#Binding {
# Port = 443
# Interface = ::1
# MaxKeepAlive = 30
# TimeForRequest = 3,20
# SSLcertFile = hiawatha.pem
#}


# BANNING SETTINGS
# Deny service to clients who misbehave.
#
#BanOnGarbage = 300
#BanOnMaxPerIP = 60
#BanOnMaxReqSize = 300
#KickOnBan = yes
#RebanDuringBan = yes


# COMMON GATEWAY INTERFACE (CGI) SETTINGS
# These settings can be used to run CGI applications. Use the 'php-fcgi'
# tool to start PHP as a FastCGI daemon.
#
#CGIhandler = /usr/local/bin/perl:pl
#CGIhandler = /usr/local/bin/php-cgi:php
#CGIhandler = /usr/local/bin/python:py
#CGIhandler = /usr/local/bin/ruby:rb
#CGIhandler = /usr/local/bin/ssi-cgi:shtml
#CGIextension = cgi
#
#FastCGIserver {
# FastCGIid = PHP5
# ConnectTo = 127.0.0.1:2005
# Extension = php
#}
FastCGIserver {
FastCGIid = QFastCGI
ConnectTo = 192.168.2.12:2005
Extension = f1
}
FastCGIserver {
FastCGIid = QFastCGI2
ConnectTo = 192.168.2.12:2006
Extension = f2
}
# URL TOOLKIT
# This URL toolkit rule was made for the Banshee PHP framework, which
# can be downloaded from http://www.hiawatha-webserver.org/banshee
#
#UrlToolkit {
# ToolkitID = banshee
# RequestURI isfile Return
# Match ^/(css|files|images|js|slimstat)($|/) Return
# Match ^/(favicon.ico|robots.txt|sitemap.xml)$ Return
# Match .*\?(.*) Rewrite /index.php?$1
# Match .* Rewrite /index.php
#}
UrlToolkit {
ToolkitID = app_toolkit
RequestURI exists Return
Match .f1 UseFastCGI QFastCGI
Match .f2 UseFastCGI QFastCGI2
}

# DEFAULT WEBSITE
# It is wise to use your IP address as the hostname of the default website
# and give it a blank webpage. By doing so, automated webscanners won't find
# your possible vulnerable website.
#
Hostname = 123.45.6.78 #127.0.0.1
WebsiteRoot = /usr/local/www/hiawatha
StartFile = index.html
AccessLogfile = /var/log/hiawatha/access.log
ErrorLogfile = /var/log/hiawatha/error.log
#ErrorHandler = 404:/error.cgi


# VIRTUAL HOSTS
# Use a VirtualHost section to declare the websites you want to host.
#
#VirtualHost {
# Hostname = www.my-domain.com
# WebsiteRoot = /var/www/my-domain/public
# StartFile = index.php
# AccessLogfile = /var/www/my-domain/log/access.log
# ErrorLogfile = /var/www/my-domain/log/error.log
# TimeForCGI = 5
# UseFastCGI = PHP5
# UseToolkit = banshee
#}

VirtualHost {
Hostname =192.168.2.11
WebsiteRoot = /usr/local/www/hiawatha
AccessLogfile = /var/log/app/access.log
ErrorLogfile = /var/log/app/error.log
TimeForCGI = 5
UseToolkit = app_toolkit
}

VirtualHost {
Hostname = 123.45.6.78
WebsiteRoot = /usr/local/www/hiawatha
AccessLogfile = /var/log/hiawatha/access.log
ErrorLogfile = /var/log/hiawatha/error.log
TimeForCGI = 5
UseToolkit = app_toolkit
UseFastCGI = QFastCGI
}
# DIRECTORY SETTINGS
# You can specify some settings per directory.
#
#Directory {
# Path = /home/baduser
# ExecuteCGI = no
# UploadSpeed = 10,2
#}
Hugo Leisink
25 March 2013, 21:22
The hostname of the last virtual host is the same as the default website hostname, so that virtual host is never used.
yagnaram
26 March 2013, 04:29
Hugo,

Thanks! It worked. I changed the host name to be different and the virtual host settings work.

Thanks for your time!

Yag
This topic has been closed.