Justin
Justin

Reputation: 2049

Monit only using HTTP for HTTPS website

I'm trying to monitor a VHost on the local Apache instance via Monit. The same domain accepts both http and https traffic, so I wanted to monitor both.

Also, the IP that the domain resolves to goes to a server that load balances the traffic between the current Apache instance and another server running Apache. I need Monit to monitor the local instance, and I was hoping to avoid adding any records in the /etc/hosts file, so I was thinking that Monits config setting with http headers [] would suffice, and I think it is (Just monitoring localhost, but setting the headers Host to the vhost domain).

Anyways, the main problem I seem to be running into, is even though I configure Monit to monitor the host via both http and https protocols, it monitors both hosts via just http, however the port is set to 443 for the one I need using https protocol.

The Monit config file for Apache is:

check process httpd with pidfile /var/run/httpd/httpd.pid
    start program = "/bin/systemctl restart httpd.service" with timeout 60 seconds
    stop program  = "/bin/systemctl stop httpd.service"

check host localhost with address localhost
    if failed
        port 80
        protocol http
        with http headers [Host: www.domain.com, Cache-Control: no-cache]
        and request / with content = "www.domain.com"
            then restart
    if failed
        port 443
        protocol https
        with http headers [Host: www.domain.com, Cache-Control: no-cache]
        and request / with content = "www.domain.com"
            then restart
    if 5 restarts within 5 cycles
        then timeout

And here's the Monit status for that check:

[root@server enabled-monitors]# monit status localhost
The Monit daemon 5.14 uptime: 14m

Remote Host 'localhost'
  status                            Connection failed
  monitoring status                 Monitored
  port response time                FAILED to [localhost]:443/ type TCPSSL/IP protocol HTTP
  port response time                0.001s to [localhost]:80/ type TCP/IP protocol HTTP
  data collected                    Tue, 26 Apr 2016 10:44:32

So it's fairly obvious to me that the https is failing because its still trying to use port HTTP, even though I have protocol https in the configuration.

Any input would be much appreciated. I have a feeling this may be a bug, and ill create an issue in the Monit Github repo, but I wan't to make sure it's not something silly that I overlooked.

Thank you!

Upvotes: 3

Views: 3692

Answers (1)

Danila Vershinin
Danila Vershinin

Reputation: 9875

Late reply here, but I thought I would still post for readers who stumbled upon the same issue.

The problem seems to be not with Monit using port HTTP despite check configured for HTTPS. It always reports HTTP protocol in status (a display bug).

The real issue is likely with Monit not supporting SNI for SSL, so it ignores the with http headers [Host: www.domain.com ... in your https check. Thus the check fails because Monit is actually testing https://localhost.

I've filed bug with Monit developers here.

Upvotes: 1

Related Questions