Încerc să configurez două subdomenii, pt A
și b
în domeniu.com
. Folosesc două fișiere .conf, care arată aproape la fel cu modificările corespunzătoare la ServerName și ProxyPass:
<VirtualHost *:80>
ServerName a.domain.com #This was added as a try for a fix.
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/a
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
ProxyPass / https://a.domain.com:8444/
ProxyPassReverse / https://a.domain.com:8444/
ProxyPass /a/ https://a.domain.com:8444/
ProxyPassReverse /a/ https://a.domain.com:8444/
ProxyPass /b/ https://b.domain.com:8445/
ProxyPassReverse /b/ https://b.domain.com:8445/
</VirtualHost>
Acest lucru se face în mediul meu de testare, replicând ceva similar cu ceea ce este în prezent în producție. În /etc/hosts, am adăugat a.domain.com
și b.domain.com
până la 127.0.0.1. DNS-ul în producție are înregistrări pentru ce a.domain.com
și b.domain.com
are, care este același IP (am făcut asta și în mașina de la care testez asta).
De asemenea, rețineți că nu difuzez conținut din directoarele lor rădăcină. Am adăugat că încercând să rezolv problema menționată în titlu. Există totuși un html simplu în ambele directoare.
Care este problema reală?
Pur și simplu, când încerci a.domain.com
, rezultatul este aplicația web de la localhost:8444
, cum era de așteptat. Când încerci b.domain.com
, rezultatul este de asemenea localhost:8444
, în loc de localhost:8445
. Ambii a.conf
și b.conf
sunt activate, iar dacă dezactivez a.conf
, atunci primesc corect localhost:8445
. Daca incerc si eu like a.domain.com/b
, redirecționarea se rezolvă înapoi la a.domain.com
.
Am citit mai multe întrebări și tutoriale, iar majoritatea dintre ele fie au ceva care funcționează ca în configurația mea, fie adaugă NameVirtualHost, care înțeleg că nu este necesar pentru versiunea mea de Apache.Am adăugat, de asemenea, un ServerName în portul 80, deoarece am crezut că poate cererea pentru b
a fost egalat de a.conf
deoarece sunt același IP, dar nici asta nu a funcționat.
Ce îmi lipsește aici? Este ceva cu mod_proxy pe care se pare că îl ignor? Dacă este posibil, aș dori să păstrez un fișier pentru fiecare aplicație web. Mulțumiri!
Aceasta este pe Ubuntu 18.04.2, Apache 2.4 (mod_proxy și mod_ssl), Tomcat 9. Orice alte informații doriți, voi încerca să le livrez.
ACTUALIZAȚI
Am incercat si cu aceasta configuratie. Același rezultat nedorit.
<VirtualHost *:80>
ServerAlias a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
ACTUALIZAȚI
Ok, tocmai am găsit ceva foarte enervant. Dacă intru cu browserul meu la oricare a.domain.com
sau b.domain.com
, amândoi se hotărăsc să a.domain.com
. Aceasta este problema pe care am descris-o inițial. DAR daca incerci https://a.domain.com
sau https://b.domain.com
, ambele rezolvă la serverul potrivit: A
la 8444
și b
la 8445
.
Deoarece este foarte frustrant, voi lua o frână și voi analiza asta peste un timp.
ACTUALIZAȚI
După o frână lungă, am încercat alte modificări aleatorii doar pentru a vedea ce s-a întâmplat și, din nou, nimic nu a funcționat conform așteptărilor, cu excepția utilizării HTTPS. Am instalat Postman pentru a vedea ce se trimite în cerere și am aflat că în Postman, atât HTTP, cât și HTTPS folosesc gazda corect. Și mai bine/mai rău: răspunsul real arată diferitele pagini de bun venit pentru a.domain.com
și b.domain.com
, ceea ce înseamnă că configurațiile mele funcționează corect când folosesc Postman.
Cred că toată această încercare ar putea fi doar o problemă de cache, dar browserul meu de testare ales (dev. Firefox) este setat să nu memoreze în cache. Voi verifica răspunsurile cu curl și cu celelalte browsere ale mele.