Eu tenho um problema com os vhosts do Apache. Solicitei o redirecionamento de HTTP para HTTPS (5001=http e 5002=https). O problema é que estou enfrentando um redirecionamento de um domínio para outro, mesmo nunca tendo definido essa regra.
Alguém poderia explicar por que isso está acontecendo?
Meus VHosts
<VirtualHost *:80>
ServerName sub2.domain.com
ServerAlias www.sub2.domain.com
Redirect permanent / https://sub2.domain.com/
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/sub2_domain
ServerName sub2.domain.com
ServerAlias www.sub2.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/domain.crt
SSLCertificateKeyFile /etc/ssl/private/domain.key
<Directory /var/www/sub2_domain>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/domain_error.log
CustomLog ${APACHE_LOG_DIR}/sub2_domain_access.log combined
</VirtualHost>
<VirtualHost *:5001>
ServerName sub1.domain.com
ServerAlias www.sub1.domain.com
Redirect permanent / https://sub1.domain.com:5002/
</VirtualHost>
<VirtualHost *:5002>
DocumentRoot /var/www/sub1_domain
ServerName sub1.domain.com
ServerAlias www.sub1.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/domain.crt
SSLCertificateKeyFile /etc/ssl/private/domain.key
<Directory /var/www/sub1_domain>
Options Indexes FollowSymLinks
AllowOverride All
Require ip 192.168.1.0/24
</Directory>
ErrorLog ${APACHE_LOG_DIR}/domain_error.log
CustomLog ${APACHE_LOG_DIR}/sub1_domain_access.log combined
</VirtualHost>
Exibição do Apache
VirtualHost configuration:
*:5001 sub1.domain.com (/etc/apache2/sites-enabled/sub1_domain.conf:1)
*:5002 sub1.domain.com (/etc/apache2/sites-enabled/sub1_domain.conf:8)
*:80 sub2.domain.com (/etc/apache2/sites-enabled/sub2_domain.conf:1)
*:443 sub2.domain.com (/etc/apache2/sites-enabled/sub2_domain.conf:8)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex fcgid-proctbl: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex fcgid-pipe: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
Minha solicitação cUrl
C:\Users\user>curl -sv -o nul sub1.domain.com
* Host sub1.domain.com:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.1.201
* Trying 192.168.1.201:80...
* Connected to sub1.domain.com (192.168.1.201) port 80
> GET / HTTP/1.1
> Host: sub1.domain.com
> User-Agent: curl/8.7.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Sat, 17 Aug 2024 19:31:10 GMT
< Server: Apache/2.4.61 (Debian)
< Location: https://sub2.domain.com/
< Content-Length: 328
< Content-Type: text/html; charset=iso-8859-1
<
{ [328 bytes data]
* Request completely sent off
* Connection #0 to host sub1.domain.com left intact
Obrigado
Você configurou o VirtualHost na porta 5001, mas sua solicitação curl não especificou uma porta e, portanto, conectou-se à porta 80 padrão.
Como o httpd não consegue encontrar uma correspondência
<VirtualHost :80>
para o domínio solicitado, ele usa a configuração do primeiro VirtualHost (mais superior) para essa porta.Se você deseja que ambos os domínios sejam acessíveis sem a necessidade de especificar o número da porta, ambos os VirtualHosts de texto simples devem estar na mesma porta 80 (e ambos os VirtualHosts HTTPS na mesma porta 443).
Se você deseja especificamente números de porta diferentes por algum motivo, mas deseja evitar o redirecionamento errado caso o visitante esqueça de especificar o número da porta, crie um novo VirtualHost na porta 80 que apenas exibe uma mensagem de erro (por exemplo, retorna o erro 400) e coloque-o acima de todos os outros VirtualHosts.