袁紹又收羅了汝南地區的黃巾劉辟部,讓劉備與之配合,率軍抄掠許都西側的潁川和南部的汝南,在曹軍背後開辟戰場。劉備剛至,即被嚴陣以待的議郎督騎、曹操的堂弟曹仁擊潰。劉備回袁紹大營,看看形勢不妙,提出請求:讓他南下勸說劉表襲擊曹軍。袁紹答應了,並讓他經過汝南,與黃巾統帥龔都聯絡。劉備到達汝南,與龔都合兵數千,襲殺曹軍將領蔡楊,展開了遊擊戰。不久,袁紹又派出部將韓荀抄斷許都西側道路,又被曹仁打得大敗。袁紹侵擾曹軍後方的戰略企圖未能得逞。
七月,袁紹大軍南進陽武,與官渡隔汴水相望。八月,袁軍又向前逼近,依沙丘屯下大營,東西長達幾十裏,氣勢雄壯。
曹操也將大營紮在沙丘地帶,與袁紹相拒。
九月一日庚午,兩軍陣前天昏地暗,發生了日全食。雙方士兵的心理都異常緊張。
當日光射出刺眼的光芒,曹操麾動大軍殺向袁紹的大營。損失一批士兵之後,曹操隻得退守營寨,堅壁不出。於是輪到袁紹來打他了。袁紹在曹軍的營外堆了土山,構築了木樓,在上麵把箭矢像下雨一樣地射向曹營,打得曹軍頂著盾牌趴在地上。曹操下令用拋石機擊折袁軍的木樓。袁紹天上不行,又來地下,夜裏挖地道攻擊曹營。曹操命工兵在營前開了一條又寬又深的橫溝,袁紹的地道斷了頭。打了半個月,曹操的軍糧緊張了起來,士卒疲憊不堪,甚至有些百姓也叛歸袁紹。曹操一見到運糧的軍士,就撫著他們的背說:“勞駕諸位,再辛苦十五天,看我為你們破了袁紹,就不再勞累諸位了。”過了些時,曹操也吃不消了,寫信給他的總參謀長荀彧,提出退守許都。荀彧回信說成敗在此一舉,主公你可不能讓我們難堪。曹操隻得硬起頭皮,去堵那像螞蟻一般多的袁軍。