A megoldás: https://hup.hu/node/186283#comment-3113609
Hálásan köszönöm mindenkinek, aki idejéből áldozott a rám!
Sziasztok!
Adott egy Frontend angularjs, Backend .net alkalmazás. A frontend kiszolgálója windows IIS.
2db egyforma VM -en fut az IIS, mely előtt Sophos van, ami fogadja a webről érkező kéréseket és továbbítja a frontend szerverek felé.
Eddig Sophos látta el az L7 védelmet és továbbította a forgalmat a frontendek felé, most bizonyos okok miatt linux apache+mod-security lenne elé rakva.
Ha HA-Proxy-t alkalmazok, akkor az alkalmazás rendesen működik. Config részlet:
frontend https_front
bind *:443 ssl crt /etc/haproxy/domain.pem
monitor-uri /checkstatus
monitor fail if { nbsrv(https_back) eq 0 }
default_backend https_back
backend https_back
option httpchk
http-check connect ssl
http-check send meth HEAD uri / ver HTTP/2 hdr Host domain.hu
http-check expect status 200
cookie SERVERID insert indirect nocache
balance roundrobin
option forwardfor
http-request set-header Host domain.hu if { srv_id 1 }
http-request set-header Host domain.hu if { srv_id 2 }
server fe1 10.x.x.1:443 check ssl verify none
server fe2 10.x.x.2:443 check ssl verify none
Ezzel tehát rendesen megy az alkalmazás.
Az eredeti terv viszont apache+modsecurity lenne. Ezzel addig megy, amíg csak 1 gépnek proxyzom. Ha már balancert használok 2 gép között (vagy akár 1 gép van a balancer alá felvéve), akkor az alkalmazás elkezd betöltődni, majd leáll. Ha az IIS-en elhelyezek egy sima txt fájllt, ott nincs hiba, kiszolgája.
Íme a sima proxy-s config:
<VirtualHost *:443>
ServerName tomain.hu
SSLEngine On
SSLCertificateFile /etc/apache/SSL/domaincrt.pem
SSLCertificateKeyFile /etc/apache/SSL/domainkey.pem
Customlog /var/log/apache2/proxy-access.log combined
ErrorLog /var/log/apache2/proxy-error.log
UseCanonicalPhysicalPort Off
UseCanonicalName Off
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLVerifyClient none
SSLProxyVerify none
SSLProxyVerifyDepth 0
SSLInsecureRenegotiation on
ProxyRequests off
ProxyPreserveHost on
ProxyErrorOverride on
AllowEncodedSlashes NoDecode
RequestHeader set Host "domain.hu"
ProxyPass /server-status !
ProxyPass / https://10.x.x.1:443/ flushpackets=On connectiontimeout=300 timeout=300
ProxyPassReverse / https://10.x.x.1:443/
ProxyTimeout 300
</VirtualHost>
Ezzel pedig már nem működik:
<IfModule mod_proxy.c>
<proxy balancer://cluster>
BalancerMember https://10.x.x1:443/ loadfactor=1
BalancerMember https://10.x.x.2:443/ loadfactor=1
ProxySet lbmethod=byrequests
</proxy>
</IfModule>
<VirtualHost *:443>
ServerName tomain.hu
SSLEngine On
SSLCertificateFile /etc/apache/SSL/domaincrt.pem
SSLCertificateKeyFile /etc/apache/SSL/domainkey.pem
Customlog /var/log/apache2/proxy-access.log combined
ErrorLog /var/log/apache2/proxy-error.log
UseCanonicalPhysicalPort Off
UseCanonicalName Off
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLVerifyClient none
SSLProxyVerify none
SSLProxyVerifyDepth 0
SSLInsecureRenegotiation on
ProxyRequests off
ProxyPreserveHost on
ProxyErrorOverride on
AllowEncodedSlashes NoDecode
RequestHeader set Host "domain.hu"
ProxyPass /server-status !
ProxyPass /balancer-manager !
ProxyPass / balancer://cluster/ lbmethod=byrequests
ProxyPassReverse / balancer://cluster/ lbmethod=byrequests
ProxyTimeout 300
</VirtualHost>
Nem értem, hogy hol a hiba. HA-proxyval pöccre megy. Apache-csal is, ha nincs balancer. Ha balancerrel oldom meg, akár csak egy célgép felé, akkor már rögtön nem megy.
Hol a probléma?
A fejlesztő keresi az okot, egyelőre nem találjuk. Nem mi fejlesztettük, csak úgy vettük át. Van benne elvileg ajaxos kérés, visszacsatolás. Itt kapiskál, de nem biztos ő sem a dologban.
Abból indulok ki, ha a ha-proxyval megy, ráadásul ha-proxy esetén 2 fronend között balance-olva is működik rendesen.Apache-csal is illene rendesen.
A logokból semmi értelmes nem derül ki. A proxy-access logban minden kérés 200 HTTP státusszal tér vissza, majd pár másodperc után megáll a kérés folyam. Az oldal pedig üres megjelenítve. Forráskód szinten lefut teljesen a nyitótól a záró html tagig. A közepe erősen hiányos :)
Firefox hibakereső módban ezt találtam, ami csak balancer esetén mutatkozik:
Error: Invalid response Content-Type: text/html, from URL: https://domain.hu/.well-known/openid-configuration
A fejlesztő szerint itt egy jsnek kellene lefutnie, ehhez képest mappát akar megnyitni.
Szóval több ponton nem értjük. Nem is biztos, hogy innen ered a probléma. Ismétlem, proxy módban balancer nélkül tökéletes az oldal.
Van valakinek tippje miből adódhat ez az eltérés balancer használata esetén?