Գործիքներ որոշելու համար, թե Apache- ի հրահանգը ինչն է ստիպում վերահղումները

Սկզբնական հարց.

Կա՞ն որևէ գործիք Apache դիրեկտիվների կարգաբերման համար, որոնք ինձ կասեն, թե որ տողն է առաջացրել տվյալ վերահղումը:

Պատճառ. Ես ունեմ ALB AWS- ով: Ես ստեղծեցի healthCheck.php էջ բոլոր ատյաններում, բայց երբ դա անում է, արդյունքը միշտ 301 է, ինչը նշանակում է, որ բոլոր ատյանները նշվում են որպես «Անառողջ»: Կարող էի 301-ը դնել որպես հաջողություն, բայց հետո չգիտեմ `իրականում իմ սերվերը խզվա՞ծ է, թե ոչ: Նույն VPC- ում curl- ով ստուգում, դա իսկապես այդպես է.

curl http://192.0.2.56/healthCheck.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.192.0.2.56/healthCheck.php">here</a>.</p>
</body></html>

Այսպիսով, ես նայեցի իմ Apache Config ֆայլին և ոչինչ չէի տեսնում: Այն անձեռնմխելի է CentOS 7 ստանդարտ կազմաձևի վրա, ներքևում ներքևում կան մի քանի վիրտուալ սերվերներ:

Որպես գերարագ թեստ, ես ստեղծեցի մեկ այլ ALB ճիշտ նույն ձևով, դուրս բերեցի սերվեր պաշտոնական CentOS 7 AMI- ից և փորձարկեցի , և այն չի վերահղվում www. Այսպիսով, ես համեմատեցի երկու արդյունքները: Բառացիորեն հիմնական ֆայլերի մեջ ոչ մի տարբերություն չկա, բացի վիրտուալ հոսթերից: Ես շատ ժամանակ եմ ծախսել փորփրելու այն, ինչ կարող էր լինել: Գաղափարներ ունե՞ք: Գործիքներ, որոնց միջոցով ես կարող եմ գտնել յուրաքանչյուր քայլը մինչև վերջնական պատասխանը գոյանալը:

Այս 301 վերահղումը ստացող սերվերները բոլորը 80-րդ պորտն են, իսկ ALB- ն անջատում է HTTPS- ը: ԼԱՄՊ ՝ PHP-FPM- ով: Արդյո՞ք այն պատճառով, որ իմ վիրտուալ հոսքերը բոլորը *: 80-ն են:

Լուծում ՝

Վերահղման սխալների վերացման ընդհանուր գործիքները կարող եք գտնել ստորև, բայց ահա թե ինչն է առաջացրել իմ թողարկումը: Քանի որ ես ունեի VirtualHosts, առաջին (լռելյայն) Վիրտուալ Հոստը ստացավ հարցումը: Դա Drupal կայք է, և մենք միացված ենք դրան ՝ www:

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

հավելվածը: Այսպիսով, ես պարզապես հրահանգ եմ ավելացրել ՝

RewriteCond %{HTTP_HOST} .
RewriteCond %{REQUEST_URI} !healthCheck.php
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

–ի նման իմ healthCheck.php- ն անտեսելու համար: Այնուհետև ես նկատեցի, որ այն դեռ 301 վերահղում է անում healthCheck.php- ից ինդեքս: php, այնպես որ .htaccess- ում պարզ որոնումը պարզեց, որ դա տեղի է ունենում, երբ ֆայլը չի ​​գտնվել: Ես ստուգումը տեղափոխեցի VHost գրացուցակ և ավարտեցինք:

Եթե php-fpm - ը ձախողվի, ես կստանամ 503 ծառայություն, որն անհասանելի է, և եթե httpd - ը ձախողվի, ես կստանամ Միացումը մերժվեց : Շատ ավելի լավ և խոսուն:

1
задан 2 August 2019 в 21:58
1 ответ

Добавьте rewrite: trace в LogLevel. Подробнее см. Документация Apache 2.4 .

Также обратите внимание:

Использование высокого уровня журнала трассировки для mod_rewrite замедлит вашу HTTP-сервер Apache радикально! Используйте уровень журнала выше, чем trace2 только для отладки!

<VirtualHost *:80>
ServerName site1.org
ServerAlias www.site1.org
...
LogLevel alert rewrite:trace3
...
</VirtualHost>

Журналы можно найти там, где вы указали ErrorLog , обычно это / var / log / httpd / error_log . Обратите внимание, что если у вас есть виртуальные хосты, первый сервер является сервером по умолчанию, поэтому также проверьте журнал ошибок.

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

Теги

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