Разрешение отказано во время доступа к гипертабе в программе CGI

StackOverflow https://stackoverflow.com/questions/6324533

Вопрос

Я пытаюсь разработать веб -приложение в Perl, используя Гипертабельный. Анкет Образец кода:

#!/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>";

Проблема в том, что при попытке выполнить из веб -браузера я получаю ошибку:

$VAR1 = bless( { 'code' => 0, 'message' => 'TSocket: Could not connect to localhost:38080 (Permission denied)' }, 'Thrift::TException' );

Сценарии работают должным образом при запуске с терминала (под пользователем Apache), а также в браузере, если удалить весь гипертабильный код.

У меня есть 38080 порт в iptables:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 38080 -j ACCEPT

ОС: CentOS 5.6.

Это было полезно?

Решение 2

ОК, поэтому есть два решения этой конкретной проблемы: 1. Отключить Selinux - изменить конфигурацию в/etc/selinux/config 2. Запустить команду:

setsebool -p httpd_can_network_connect 1

Спасибо предыдущему ответу за то, что вернули меня на правильный путь.

Другие советы

В сообщении об ошибке говорится, что вам не хватает разрешения, так что это будет ответом (пользовательский Apache, не имеет разрешения на создание сокета для Localhost: 38080)

Обновление: чтобы уточнить, когда вы запускаете его из терминала, оно работает как обычный пользователь, но когда Apache запускает его, чаще всего он работает в учетной записи Apache, который может не иметь разрешения открывать сокеты

Возможно, вы используете SELINUX, в этом случае см. «Человек Чон» или поиск «Учебное пособия SELINUX: настройка RHEL 5 и веб -серверы»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top