OpenVPN configuration has a port-share
directive. It allows OpenVPN to listen on port 443. It detects the type of traffic. If it's VPN traffic, proccesses it. If it's http, redirects it to a designated server.
From OpenVPN documentation:
--port-share host port [dir]
When run in TCP server mode, share the OpenVPN port with another application, such as an HTTPS server. If
OpenVPN senses a connection to its port which is using a non-OpenVPN
protocol, it will proxy the connection to the server at host:port.
Currently only designed to work with HTTP/HTTPS, though it would be
theoretically possible to extend to other protocols such as ssh. dir
specifies an optional directory where a temporary file with name N
containing content C will be dynamically generated for each proxy
connection, where N is the source IP:port of the client connection and
C is the source IP:port of the connection to the proxy receiver. This
directory can be used as a dictionary by the proxy receiver to
determine the origin of the connection. Each generated file will be
automatically deleted when the proxied connection is torn down.
--port-share
as suggested by @MikeB, but it can't be guessed from your post if that is what you want. In general, you should avoid running OpenVPN on TCP, use UDP instead, so whatever your problem with mixing Apache httpd and OpenVPN is, it will be gone anyway.