Puncte:0

Apache reverse proxy - URL-ul fără / este refuzat

drapel us

Folosesc proxy invers pentru a afișa conținutul serverului backend pentru un subdomeniu. Subdomeniul.mydomain.com (serverul A) ar trebui să afișeze conținutul serverului cu IP 123.123.123.123 portul 1111 (server B).

Gazdă virtuală a subdomain.mydomain.com (server A):

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName subdomain.mydomain.com

SSLEngine on
SecAuditEngine On
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Directory />
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Location />
    ProxyPass https://123.123.123.123:1111
    ProxyPassReverse https://123.123.123.123:1111
</Location>

ErrorLog /var/log/apache2/error.log

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key
 
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

</VirtualHost>                                  
</IfModule>

Gazdă virtuală a 123.123.123.123:1111 (server B):

<IfModule mod_ssl.c>
    <VirtualHost 123.123.123.123:1111>
        DocumentRoot /srv/www/site/htdocs

SSLEngine on
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Location "/">
   Require ip 222.222.222.222
</Location>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /srv/www/site/htdocs>
    Options -Indexes +FollowSymLinks +MultiViews
    DirectoryIndex index.php
    AllowOverride None
    Require all granted
</Directory>

ErrorLog /srv/www/site/log/error.log
CustomLog /srv/www/site/log/access.log combined
CustomLog /srv/www/site/log/ssl_request_log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key

        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

    </VirtualHost>
</IfModule>

Dacă încarc adresa URL: https://subdomain.mydomain.com/dir/

se incarca cu succes.

Dacă încarc adresa URL (fără bară oblică finală): https://subdomain.mydomain.com/dir

Rezultă pagina de eroare: ERR_CONNECTION_REFUSED.

EDIT1:

Execut comanda:

curl -IL https://subdomain.mydomain.com/dir

si am rezultatul asta:

HTTP/1.1 301 mutat permanent
Data: Luni, 23 august 2021 13:45:13 GMT
Server: Apache
Strict-Transport-Securitate: max-age=15768000; include SubDomains
Strict-Transport-Securitate: max-age=15768000; include SubDomains
Locație: https://subdomain.mydomain.com:1111/dir/
Tip de conținut: text/html; set de caractere=iso-8859-1

curl: (7) Nu s-a putut conecta la portul 1111 subdomain.mydomain.com: conexiune refuzată

EDIT2:

Am adăugat un slash final

<Location />
    ProxyPass https://123.123.123.123:1111/
    ProxyPassReverse https://123.123.123.123:1111/
</Location>

Dar încă primesc conexiune refuzata eroare.

Aveți idee de ce este eroarea rezultată, când lipsește slash-ul final?

Mulțumiri!

Chris avatar
drapel it
Aș încerca să adaug slash-ul final la directivele `ProxyPass`/`ProxyPassReverse` din blocul dvs. de locație. Din ceea ce văd în doc și configurația proprie, puteți scrie `ProxyPass "/" "something_with_trailing_slash/"` sau `ProxyPass "/url" "something_without_trailing_slash"`, în timp ce blocul dvs. de locație este echivalent cu `ProxyPass "/" "something_without_slash"
klor avatar
drapel us
Mai devreme am folosit `ProxyPass "/" "something_with_trailing_slash/"` cu același rezultat greșit.
mforsetti avatar
drapel tz
faceți atât `curl -IL https://subdomain.mydomain.com/dir` cât și `curl -IL https://subdomain.mydomain.com/dir/` și editați întrebarea pentru a include rezultatul.
klor avatar
drapel us
@mforsetti a adăugat rezultatul curl în OP
Puncte:1
drapel cm

Verificați setările firewall-ului și jurnalele de server pe serverul B și verificați dacă serverul A poate ajunge la serverul B cu adresa IP corectă ca expeditor (presupun că este 222.222.222.222). Listingurile dvs. pentru serverul B lipsesc și a Ascultă 1111 https directivă.

Editați | × Serverul backend forțează o redirecționare:

HTTP/1.1 301 mutat permanent
Locație: https://subdomain.mydomain.com:1111/dir/

Faptul că antetul HSTS este prezent și absența oricăror reguli de rescriere mă face să presupun că aplicația este cea care emite redirecționarea.

Verificați care este.

Ai declarat că cu „/” adăugat lucrurile funcționează bine. Forțarea finalului „/” cu mod_rewrite pe serverul frontend mi se pare o soluție acceptabilă.

klor avatar
drapel us
Am omis să menționez că Listen 1111, 443 este setat separat în ports.conf. Nu cred că este o problemă de firewall, deoarece funcționează pentru /dir/ dar nu funcționează pentru /dir
drapel cm
Aflați ce declanșează redirecționarea pe care o experimentați în funcție de rezultatul lui `curl`. Este foarte probabil ca serverul de backend (nu este evident din fragmentele de configurare pe care le-ai postat) sau aplicația însăși care îl forțează. Aplicarea unui `/` final cu reguli de rescriere ar putea fi o soluție acceptabilă.
Puncte:0
drapel fk

Proxy-ul dvs. invers nu ascultă (probabil nu ar trebui) pe portul 1111.

Cu toate acestea, serverul dvs. 123 redirecționează către portul 1111 (presupoziție bazată pe configurațiile pe care le-ați postat).

Puncte:0
drapel no

Se pare că la asta s-a răspuns deja Aici. Inca sa iti raspund la intrebare,

Vă lipsește o bară oblică la sfârșitul ambelor directive ProxyPass și ProxyPassReverse.

Citit acest dacă aveți nevoie de mai multe detalii despre motivul pentru care acesta este cazul.

klor avatar
drapel us
Am testat sugestia ta, dar încă primesc eroarea. Vezi OP modificat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.