Try giving him a massive owl of porridge, or other filling food, straight before bed. It works for my ds. Then you can swap the milk for water, and you know it's not hunger.
Also, 18 moths old is about molar time, so how about setting the alarm (for you) for 2 am, and givinghim some calpol then, if he seems in pain. Has he had nasty nappies? That can be a sign of teething and always was in my ds.
4 am is a very cold time, is he kicking his blankets off? He may do better in a sleeping bag.
Is he getting enough sleep? At his age he should be getting 12-14 hours a day. This doesn't apply to all children, but if he is reluctant to wake from his nap it does point towards him still being very tired. Have you tried letting him finish his nap, putting him to bed when he seems to be getting tired instead of bedtime (but still using his normal routine) and seeing what happens?
What time does he go to bed? is it very early?
Other than that, I agree with Mud. It's not early waking at all, it's nighttime waking, and if you have the stomach for controlled crying once you have eliminated the possibilties, it usually works.