Мне нужна помощь, чтобы вспомнить, что я сделал, чтобы позволить 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 не работает так, как было объявлено.
Ура, друзья.