Назад | Перейти на главную страницу

После обновления php.ini через Plesk мой файл htaccess перестал работать

Мне нужна помощь, чтобы вспомнить, что я сделал, чтобы позволить Plesk использовать .htaccess. Недавно я изменил размер загружаемого файла PHP в домене, и вдруг мой .htaccess директивы перестали работать. Значит, я кое-что "исправил", наверное, в httpd.conf, и по глупости не распространил исправление в файл, который не перезаписывается автоматически Plesk. (Ага, идиот ....)

Мой .htaccess В файле есть ряд записей, подобных показанной ниже. Это все, что в нем есть. Цель состоит в том, чтобы позволить мне иметь example.com/command выполнить файл command как если бы это было command.php. Я занимаюсь этим десятилетиями. Если вы меня простите, но если ваш ответ похож на «не делайте этого ...», пожалуйста, воздержитесь. Спасибо.

.htaccess

<Files support>
    SetHandler proxy:unix:///var/www/vhosts/system/example.com/php-fpm.sock|fcgi://127.0.0.1:9000
</Files>

Я пробовал размещать эти записи в соответствии с инструкциями Plesk в поле Apache «дополнительные директивы» (создавая vhosts.conf файл, я перенастроил его, чтобы он был правильно включен) безрезультатно.

http.conf

#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
#IF YOU REQUIRE TO APPLY CUSTOM MODIFICATIONS, PERFORM THEM IN THE FOLLOWING FILES:
#/var/www/vhosts/system/example.com/conf/vhost.conf
#/var/www/vhosts/system/example.com/conf/vhost_ssl.conf
<IfModule mod_ssl.c>

    <VirtualHost 216.55.178.166:7081 >
            ServerName "example.com:443"
            ServerAlias "www.example.com"
            ServerAlias "ipv4.example.com"
            ServerAdmin "me@me.org"
            UseCanonicalName Off

            DocumentRoot "/var/www/vhosts/example.com/web"
            CustomLog /var/www/vhosts/system/example.com/logs/access_ssl_log plesklog
            ErrorLog "/var/www/vhosts/system/example.com/logs/error_log"

            <IfModule mod_suexec.c>
                    SuexecUserGroup "me_phelps" "psacln"
            </IfModule>

            <IfModule mod_userdir.c>

                    UserDir "/var/www/vhosts/example.com/web_users/*"
            </IfModule>

            <IfModule mod_sysenv.c>
                    SetSysEnv PP_VHOST_ID "199da76e-b413-4968-8251-301b780838f1"
            </IfModule>

            ScriptAlias "/cgi-bin/" "/var/www/vhosts/example.com/web/cgi-bin/"

            Alias "/plesk-stat" "/var/www/vhosts/system/example.com/statistics"
            <Location  /plesk-stat/>
                    Options +Indexes
            </Location>
            <Location  /plesk-stat/logs/>
                    Require valid-user
            </Location>
            Alias /webstat /var/www/vhosts/system/example.com/statistics/webstat
            Alias /webstat-ssl /var/www/vhosts/system/example.com/statistics/webstat-ssl
            Alias /ftpstat /var/www/vhosts/system/example.com/statistics/ftpstat
            Alias /anon_ftpstat /var/www/vhosts/system/example.com/statistics/anon_ftpstat
            Alias /awstats-icon /var/www/html/awstats/icon

            SSLEngine on
            SSLVerifyClient none
            SSLCertificateFile /usr/local/psa/var/certificates/certW5TKkGV

            <Directory /var/www/vhosts/example.com/web>

                    <IfModule mod_fcgid.c>
                            <Files ~ (\.fcgi$)>
                                    SetHandler fcgid-script
                                    Options +ExecCGI
                            </Files>
                    </IfModule>
                    <IfModule mod_proxy_fcgi.c>
                            <Files ~ (\.php$)>
                                    SetHandler proxy:unix:///var/www/vhosts/system/example.com/php-fpm.sock|fcgi://127.0.0.1:9000
                            </Files>
                    </IfModule>

                    SSLRequireSSL

                    Options -Includes +ExecCGI
            </Directory>

            <Directory "/var/www/vhosts/system/example.com/statistics">
                    AuthType Basic
                    AuthName "Domain statistics"
                    AuthUserFile "/var/www/vhosts/system/example.com/pd/d..httpdocs@plesk-stat"
                    require valid-user
            </Directory>

            Alias /error_docs /var/www/vhosts/example.com/error_docs
            ErrorDocument 400 /error_docs/bad_request.html
            ErrorDocument 401 /error_docs/unauthorized.html
            ErrorDocument 403 /error_docs/forbidden.html
            ErrorDocument 404 /error_docs/not_found.html
            ErrorDocument 500 /error_docs/internal_server_error.html
            ErrorDocument 405 /error_docs/method_not_allowed.html
            ErrorDocument 406 /error_docs/not_acceptable.html
            ErrorDocument 407 /error_docs/proxy_authentication_required.html
            ErrorDocument 412 /error_docs/precondition_failed.html
            ErrorDocument 414 /error_docs/request_uri_too_long.html
            ErrorDocument 415 /error_docs/unsupported_media_type.html
            ErrorDocument 501 /error_docs/not_implemented.html
            ErrorDocument 502 /error_docs/bad_gateway.html
            ErrorDocument 503 /error_docs/maintenance.html

            DirectoryIndex "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml"

            Include "/var/www/vhosts/system/example.com/conf/vhost_ssl.conf"

            <Directory /var/www/vhosts/example.com>
                    AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,SymLinksIfOwnerMatch,MultiViews,FollowSymLinks,ExecCGI,Includes,IncludesNOEXEC
            </Directory>

    </VirtualHost>

</IfModule>

<VirtualHost 216.55.178.166:7080 >
    ServerName "example.com:80"
    ServerAlias "www.example.com"
    ServerAlias "ipv4.example.com"
    ServerAdmin "me@me.org"
    UseCanonicalName Off

    DocumentRoot "/var/www/vhosts/example.com/web"
    CustomLog /var/www/vhosts/system/example.com/logs/access_log plesklog
    ErrorLog "/var/www/vhosts/system/example.com/logs/error_log"

    <IfModule mod_suexec.c>
            SuexecUserGroup "me_phelps" "psacln"
    </IfModule>

    <IfModule mod_userdir.c>

            UserDir "/var/www/vhosts/example.com/web_users/*"
    </IfModule>

    <IfModule mod_sysenv.c>
            SetSysEnv PP_VHOST_ID "199da76e-b413-4968-8251-301b780838f1"
    </IfModule>

    ScriptAlias "/cgi-bin/" "/var/www/vhosts/example.com/web/cgi-bin/"

    Redirect permanent /plesk-stat https://example.com/plesk-stat
    Redirect permanent /webstat https://example.com/webstat
    Redirect permanent /webstat-ssl https://example.com/webstat-ssl
    Redirect permanent /ftpstat https://example.com/ftpstat
    Redirect permanent /anon_ftpstat https://example.com/anon_ftpstat
    Redirect permanent /awstats-icon https://example.com/awstats-icon

    <IfModule mod_ssl.c>
            SSLEngine off
    </IfModule>

    <Directory /var/www/vhosts/example.com/web>

            <IfModule mod_fcgid.c>
                    <Files ~ (\.fcgi$)>
                            SetHandler fcgid-script
                            Options +ExecCGI
                    </Files>
            </IfModule>
            <IfModule mod_proxy_fcgi.c>
                    <Files ~ (\.php$)>
                            SetHandler proxy:unix:///var/www/vhosts/system/example.com/php-fpm.sock|fcgi://127.0.0.1:9000
                    </Files>
            </IfModule>

            Options -Includes +ExecCGI

    </Directory>

    <Directory "/var/www/vhosts/system/example.com/statistics">
            AuthType Basic
            AuthName "Domain statistics"
            AuthUserFile "/var/www/vhosts/system/example.com/pd/d..httpdocs@plesk-stat"
            require valid-user
    </Directory>

    Alias /error_docs /var/www/vhosts/example.com/error_docs
    ErrorDocument 400 /error_docs/bad_request.html
    ErrorDocument 401 /error_docs/unauthorized.html
    ErrorDocument 403 /error_docs/forbidden.html
    ErrorDocument 404 /error_docs/not_found.html
    ErrorDocument 500 /error_docs/internal_server_error.html
    ErrorDocument 405 /error_docs/method_not_allowed.html
    ErrorDocument 406 /error_docs/not_acceptable.html
    ErrorDocument 407 /error_docs/proxy_authentication_required.html
    ErrorDocument 412 /error_docs/precondition_failed.html
    ErrorDocument 414 /error_docs/request_uri_too_long.html
    ErrorDocument 415 /error_docs/unsupported_media_type.html
    ErrorDocument 501 /error_docs/not_implemented.html
    ErrorDocument 502 /error_docs/bad_gateway.html
    ErrorDocument 503 /error_docs/maintenance.html

    DirectoryIndex "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml"

    Include "/var/www/vhosts/system/example.com/conf/vhost.conf"

    <Directory /var/www/vhosts/example.com>
            AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,SymLinksIfOwnerMatch,MultiViews,FollowSymLinks,ExecCGI,Includes,IncludesNOEXEC
    </Directory>

</VirtualHost>

Я думал об изменении AllowOverride к All, но используя vhost.conf файл должен был работать даже без него, не так ли? В vhost.conf файл - идеальное решение для меня, как и получение моего любимого .htacess возможности обратно (несмотря на падение производительности). Но пока пытаюсь выполнить example.com/support сети меня Access Prohibited ошибка. Когда я смотрю свои файлы ошибок, я нахожу ...

example.com/logs/error_log

[proxy_fcgi:error] [pid 19834] [client 67.161.220.240:48094] AH01071: Got error 'Access to the script '/var/www/vhosts/example.com/web/support' has been denied (see security.limit_extensions)\n'

Обратите внимание, что я пробовал установить security.limit_extensions = пустым, но это тоже не работает. Я понимаю ограничения безопасности, но я работаю на собственном сервере, поэтому я готов рискнуть.

example.com/log/proxy_error_log (nginx)

[error] 27192#0: *115850 connect() failed (111: Connection refused) while connecting to upstream, client: 46.17.42.140, server: exammple.com, request: "POST /support/contact_us HTTP/1.1", upstream: "http://1.1.1.1:7080/support/contact_us", host: "example.com"

И, для полноты, конфигурационный файл nginx.

nginx.conf

#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

server {
    listen 216.55.178.166:443 ssl;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    ssl_certificate             /usr/local/psa/var/certificates/certW5TKkGV;
    ssl_certificate_key         /usr/local/psa/var/certificates/certW5TKkGV;

    client_max_body_size 128m;

    root "/var/www/vhosts/example.com/web";
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";

    location / {
            proxy_pass https://216.55.178.166:7081;
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;
            access_log off;
    }

    location /internal-nginx-static-location/ {
            alias /var/www/vhosts/example.com/web/;
            internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
            proxy_pass https://216.55.178.166:7081;
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;
            access_log off;
    }

    add_header X-Powered-By PleskLin;

}

server {
    listen 216.55.178.166:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    client_max_body_size 128m;

    root "/var/www/vhosts/example.com/web";
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_log";
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";

    location / {
            proxy_pass http://216.55.178.166:7080;
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;
            access_log off;
    }

    location /internal-nginx-static-location/ {
            alias /var/www/vhosts/example.com/web/;
            internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
            proxy_pass http://216.55.178.166:7080;
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;
            access_log off;
    }

    add_header X-Powered-By PleskLin;

}

это удивительный как одни вещи работают, а другие нет в нашем сложном маленьком мире.

Мне действительно нужно было добавить следующее:

[php-fpm-pool-settings]
security.limit_extensions =

Проблема заключалась в том, что поле «Дополнительные директивы» Plesk в разделе «Настройки PHP» для домена очевидно ничего не делает. Что ж, может быть, он что-то делает, но что бы он ни делал, не сработало.

Мне пришлось вручную создать /var/www/vhosts/system/example.com/conf/php.ini file и добавьте к нему две строки выше. Затем мне пришлось «применить» пустые изменения (неважно, изменилось ли что-то на самом деле или нет) через страницу «Настройки PHP» Plesk, чтобы все конфигурации были правильно собраны вместе и правильные службы перезапустились ...

и тогда это сработало.

Я потратил два дня на отслеживание этой уродливой жучки, потому что поле «additonal directives» в Plesk не работает так, как было объявлено.

Ура, друзья.