在CGI程序中访问Hypertable时,权限被拒绝

| 我正在尝试使用Hypertable在Perl中开发Web应用程序。样例代码:
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use CGI::Session (\'-ip_match\');
use Hypertable::ThriftClient;
use Data::Dumper;

my $q = new CGI;
print $q->header(-cache_control => \"no-cache, no-store, must-revalidate\");

eval {
    my $client    = new Hypertable::ThriftClient(\"localhost\", 38080);
    my $namespace = $client->open_namespace(\"glinpe\");
    my $result    = $client->hql_exec($namespace, \"select * from words where row=\\\"maths\\\" keys_only\");
};

if ($@) {
    if ($@->isa(\'Thrift::TException\')) {
        print Dumper($@);
    } else {
        print Dumper($@);
    }
}
print \"<h1>works</h1>\";
问题是,当尝试从Web浏览器执行时,出现错误:
$VAR1 = bless( { \'code\' => 0, \'message\' => \'TSocket: Could not connect to localhost:38080 (Permission denied)\' }, \'Thrift::TException\' );
从终端(在apache用户下)运行脚本时,以及在删除所有Hypertable代码的浏览器中,脚本均能正常运行。 我在iptables中打开了38080端口:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 38080 -j ACCEPT
作业系统:Centos 5.6。     
已邀请:
        错误消息说您缺少权限,因此可以解决(用户apache,没有创建本地主机套接字的权限:38080) 更新:详细说明,从终端运行时,它以常规用户身份运行,但是当apache运行时,它通常以apache用户帐户运行,该用户帐户可能没有打开套接字的权限 可能是您正在使用SELinux,在这种情况下,请参见\'man chcon \' 或搜索“ SELinux教程:配置RHEL 5和Web服务器”     
        好的,因此有两种解决此特定问题的方法: 1.禁用selinux-更改/ etc / selinux / config中的配置 2.运行命令: setsebool -P httpd_can_network_connect 1 感谢先前的回答,让我重回正轨。     

要回复问题请先登录注册