mod_perl, похоже, разделяет модули между учетными записями пользователей

Пожалуйста, спросите, нужна ли вам дополнительная информация. Я просто пытаюсь понять, что происходит. Итак, у меня есть сервер с nginx в качестве интерфейса, а затем я перехожу к Apache (2.4.18) . В моем конфигурационном файле Apache для моего домена:

<VirtualHost *:8181>

    CustomLog /home/steampunkcom/web/uk.site.com/logs/uk.site.com.apache.log combined
    ErrorLog /home/steampunkcom/web/uk.site.com/logs/uk.site.com.apache.error.log

    LogLevel error

    RemoteIPHeader X-Forwarded-For

    # MOD_PERL
    LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

    ServerName uk.site.com
    ServerAlias www.uk.site.com
    ServerAdmin info@uk.site.com
    DocumentRoot /home/steampunkcom/web/uk.site.com/public_html

    # MOD_PERL
    PerlRequire  /home/steampunkcom/web/uk.site.com/startup.pl

    ScriptAlias /cgi-bin/ /home/steampunkcom/web/uk.site.com/public_html/cgi-bin/

    Alias /vstats/ /home/steampunkcom/web/uk.site.com/stats/
    Alias /error/ /home/steampunkcom/web/uk.site.com/document_errors/


    # Uncomment this part to make run as mod_perl - comment out above as well!
    <Directory "/home/steampunkcom/web/uk.site.com/*">

        Options +ExecCGI +FollowSymLinks +MultiViews
        AllowOverride AuthConfig

        PerlResponseHandler ModPerl::Registry
        AddHandler perl-script .cgi .pl
        Options +ExecCGI
        PerlOptions +ParseHeaders
        AllowOverride All
        Require all granted

    </Directory>

    <Directory /home/steampunkcom/web/uk.site.com/stats>
       AllowOverride All
       Require all granted
    </Directory>


    <IfModule mod_ruid2.c>
        RMode config
        RUidGid steampunkcom steampunkcom
        RGroups www-data
    </IfModule>
    <IfModule itk.c>
        AssignUserID steampunkcom steampunkcom
    </IfModule>

    IncludeOptional /home/steampunkcom/conf/web/apache2.uk.site.com.conf*

</VirtualHost>

Это отлично работает. Он хорошо работает под mod_perl. Проблема возникает, когда я пытаюсь включить mod_perl на другой учетной записи пользователя :

<VirtualHost *:8181>

    CustomLog /home/willr/web/anothersite.co.uk/logs/anothersite.co.uk.apache.log combined
    ErrorLog /home/willr/web/anothersite.co.uk/logs/anothersite.co.uk.apache.error.log

    LogLevel error

    RemoteIPHeader X-Forwarded-For

    LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

    PerlRequire  /home/willr/web/anothersite.co.uk/startup.pl

    ServerName anothersite.co.uk
    ServerAlias www.anothersite.co.uk
    ServerAdmin info@anothersite.co.uk
    DocumentRoot /home/willr/web/anothersite.co.uk/public_html


    #####
    ScriptAlias /cgi-bin/ /home/willr/web/anothersite.co.uk/public_html/cgi-bin/
    #####

    Alias /vstats/ /home/willr/web/anothersite.co.uk/stats/
    Alias /error/ /home/willr/web/anothersite.co.uk/document_errors/

    <Directory "/home/willr/web/anothersite.co.uk/*">
        Options +ExecCGI +FollowSymLinks +MultiViews
        AllowOverride AuthConfig

        PerlResponseHandler ModPerl::Registry
        AddHandler perl-script .cgi .pl
        Options +ExecCGI
        PerlOptions +ParseHeaders
        AllowOverride All
        Require all granted

    </Directory>


    <IfModule mod_ruid2.c>
        RMode config
        RUidGid willr willr
        RGroups www-data
    </IfModule>
    <IfModule itk.c>
        AssignUserID willr willr
    </IfModule>

</VirtualHost>

Сначала я думал, что все работает нормально, но потом я начал получать электронные письма от людей, которые говорили мне, что они не могут войти в систему. сайт. Изучив его, я обнаружил, что он разделяет модуль между учетными записями пользователей. Я пытаюсь понять, почему и что я могу с этим поделать. Я точно знаю, что mod_perl может работать с несколькими учетными записями пользователей без совместного использования модулей (как я делал это на других серверах, которыми управлял за меня), но я не уверен, как / почему он это делает здесь.

Приветствуются любые идеи! Тем временем мне пришлось отключить mod_perl для одного из сайтов, так как это вызывало слишком много проблем для другого сайта :(

Я только что нашел кое-что об использовании + Parent и ] PerlSwitches config:

 <VirtualHost ...>
      ServerName dev1
      PerlOptions +Parent
      PerlSwitches -I/home/dev1/lib/perl
  </VirtualHost>

https://perl.apache.org/docs/2.0/user/config/config.html#C_Parent_

Однако проблема в том, что из-за этого модули все еще получают "общий" для других учетных записей пользователей. Итак, у меня есть:

PerlOptions +ParseHeaders +Parent
PerlSwitches -Mlib=/home/steampunkcom/web/foo.co.uk/lib

Когда я смотрю на содержимое @INC, я вижу:

@INC = 
    /home/steampunkcom/web/foo.com/public_html/cgi-bin/admin
    /home/steampunkcom/web/foo.com/lib
    /etc/perl
    /usr/local/lib/x86_64-linux-gnu/perl/5.22.1
    /usr/local/share/perl/5.22.1
    /usr/lib/x86_64-linux-gnu/perl5/5.22
    /usr/share/perl5
    /usr/lib/x86_64-linux-gnu/perl/5.22
    /usr/share/perl/5.22
    /usr/local/lib/site_perl
    .
    /etc/apache2

Я действительно думал, что у меня есть решение, но, возможно, нет: (

1
задан 19 March 2019 в 15:55
1 ответ

OK, похоже это сработает.

PerlOptions +Parent
PerlInterpStart 2
PerlInterpMax 2
PerlSwitches -Mlib=/home/steampunkcom/web/uk.domain.com/lib
PerlRequire  /home/steampunkcom/web/uk.domain.com/startup.pl # my script to auto load modules

Похоже, что порядок тоже важен. Не уверен, было ли это тоже частью решения, но я дал серверу перезагрузку. Мне интересно, может быть, что-то "застряло", когда я играл с настройками, и неважно, сколько раз я перезапускал Apache, это не исправило бы проблему.

В любом случае - я думаю, это все уладило! По крайней мере, похоже, что у меня больше не будет конфликтов с модулями.

1
ответ дан 3 December 2019 в 23:06

Теги

Похожие вопросы