劉備逃到了鄴城(冀州的治所,在今河北臨漳西南),袁紹才感到曹操是個強大的敵人,決心進攻許都。原來勸他攻打許都的田豐,這時候卻不讚成馬上進攻。他說:“現在許都已經不是空虛的了,怎麼還能去襲擊呢!曹操兵馬雖然少,但是他善於用兵,變化多端,可不能小看他。我看還是作長期的打算。”
袁紹不聽田豐的話,田豐一再勸諫,袁紹反認為他擾亂軍心,把他下了監獄,他向各州郡發出文書,聲討曹操。公元200年,袁紹集中了十萬精兵,派沮授(沮音jū)為監軍,從鄴城出發進兵黎陽(今河南浚縣)。他先派大將顏良渡過黃河,進攻白馬(今河南滑縣)。
這時候,曹操早已率領兵馬回到官渡,聽到白馬被圍,準備親自去救。他的謀士荀攸勸他說:“敵人兵多,我們人少,不能跟他硬拚。不如分一部分人馬往西在延津(在今河南延津西北)一帶假裝渡河,把袁軍主力引到西邊。我們就派一支輕騎兵到白馬,打他個措手不及。”
曹操采納了荀攸的意見,來個聲東擊西。袁紹聽說曹操要在延津渡河,果然派大軍來堵截。哪兒知道曹操已經親自帶領一支輕騎兵襲擊白馬。包圍白馬的袁軍大將顏良沒防備,被曹軍殺得大敗。顏良被殺,白馬之圍也解除了。
袁紹聽到曹操救了白馬,氣得直跳腳。監軍沮授勸袁紹把主力留在延津南麵,分一部分兵力出擊。但是袁紹心急火燎,不聽沮授勸告,下令全軍渡河追擊曹軍,並且派大將文醜率領五六千騎兵打先鋒。這時候,曹操從白馬向官渡撤退。聽說袁軍來追,就把六百名騎兵埋伏在延津南坡,叫兵士解下馬鞍,讓馬在山坡下蹓躂,把武器盔甲丟得滿地都是。
文醜的騎兵趕到南坡,看見這樣子,認為曹軍已經逃遠了,叫兵士收拾那丟在地上的武器。曹操一聲令下,六百名伏兵一齊衝殺出來。袁軍來不及抵抗,被殺得七零八落。文醜也糊裏糊塗地丟了腦袋。
兩場仗打下來,袁紹一連損失了他手下的顏良、文醜兩員大將,袁軍將士打得垂頭喪氣。但是袁紹不肯罷休,一定要追擊曹操。監軍沮授說:“我們人盡管多,可沒像曹軍那麼勇猛;曹軍雖然勇猛,但是糧食沒有我們多。所以我們還是堅守在這裏,等曹軍糧草完了,他們自然會退兵。”
袁紹又不聽沮授勸告,命令將士繼續進軍,一直趕到官渡,才紮下營寨。曹操的人馬也早已回到官渡,布置好陣勢,堅守營壘。
袁紹看到曹軍守住營壘,就吩咐兵士在曹營外麵堆起土山,築起高台,讓兵士們在高台上居高臨下向曹營射箭。
曹軍隻得用盾牌遮住身子,在軍營裏走動。
曹操跟謀士們一商量,設計了一種霹靂車。這種車上安裝著機紐。兵士們扳動機紐,把十幾斤重的石頭發出去,打坍了袁軍的高台,許多袁軍兵士被打得頭破血流。
袁紹吃了虧,又想出一個辦法。他叫兵士在深夜裏偷偷地挖地道,打算從地道裏鑽到曹營去偷襲。但是他們的行動早被曹軍發現。曹操吩咐兵士在兵營前挖了一條又長又深的壕溝,切斷地道的出口。袁紹的偷襲計劃又失敗了。