唐朝前期,军事方面上承隋及北周,实行府兵之制。为了保卫唐朝中央政府所在地的长治久安,府兵的军府多数设于关中,“举天下兵不敌关中”,形成了居重驭轻的形势。府兵由百姓中简点,轮番服役,担任宿卫及征防。有事出兵则由朝廷命将统率征行,战争结束则兵散于府,将归于朝,这样,就不会有边将拥兵自重的情况。睿宗时期,始于边境设置节度使,统领边防军镇,逐渐成为常设的地方军事长官。玄宗时期,边烽日警,为控制和防御周边少数民族,节度使数目增加到十人。此时府兵制已逐渐瓦解,朝廷宿卫不给,用招募的“骑”(长从宿卫)以代替番上的府兵。边军也由自愿长留戍边的“长征健儿”充当,不再由内地调发。节度使统领“健儿”组成的长驻边军,对外作战,对内镇抚,军权越来越重。不仅如此,节度使还往往兼管区内的支度、营田等使,集军、政、财等大权于一身。此外,节度使最初的胡族将领来担任。天宝中,宰相李林甫为了巩固自己的地位职权,“志欲杜出将入相之源”,进一步造成胡族武人长期专兵的情况。天宝后期,朝廷政治日益腐败,中央军备日益松弛,外重内轻、尾大不掉的局面也因此形成。安禄山便在这样的形势下起兵叛唐。
安禄山和史思明都是营州(治今辽宁朝阳)一带的杂种胡人。均通晓边境少数民族语言,而且骁勇多机智。做过互市牙郎,后都成为幽州节度张守张珪手下的捉生将。安禄山升任平卢兵马使时,以贿赂结交唐廷派往河北的使臣,博得玄宗的称许。以后又因善于谄媚逢迎,骗得玄宗和杨贵妃等人对他的信任支持。唐朝河朔一带由于贞观以后东突厥的败亡迁徙,在开元天宝年间逐渐成为一个诸种民族杂居的复杂“胡化”区域。出身胡人,熟悉民族风俗习惯而又多权术智计的安禄山,便被唐朝廷看作羁糜统治这一复杂地区和抚绥周围少数民族,安顿边境的最合适人选。为此安禄山于天宝元年(742年)从营州都督被升为平卢(今辽宁朝阳)节度使;天宝三载,兼范阳(今北京)节度使,河北采访使;十载,又兼河东(今山西太原西南)节度使。一人而身兼三镇,掌握了今河北、辽宁西部、山西一带的军事、民政及财政大权。天宝十一载,史思明也由于他的推荐被任命为平卢兵马使。
安禄山利用唐朝廷对他的信任,不断扩充实力。他曾利用征战和欺诈的手法镇压契丹、奚等少数民族,并借北机会将同罗、奚、契丹降人八千收至麾下,养为假子,称“曳落河”(胡语,意为壮士),皆骁勇善战。又贮备战以数万匹,多聚兵仗,分遣胡商至各处经商致财。天宝十四载,又请以蕃将32人代汉将,组成一个以少数族武人为骨干有汉族失意文人参加,并为其出谋划策的武装军事集团。
安禄山在经过长期的准备之后,兵力雄厚。他深知长安朝廷腐朽、兵力虚弱的内情,又因与宰相杨国忠争权,于是在天宝十四载(755年)十一月,以讨杨国忠为借口,发所部兵汉、同罗、奚、契丹、室韦共15万众,号称20万人,在范阳起兵。
安禄山起兵后,河北州县,望风瓦解,守令或逃或降,或被擒杀,没有敢抵抗的。叛军军锋迅速指向洛阳(今河南洛阳东)。消息传到朝廷,唐玄宗相信杨国忠的话,以为叛乱很快就会平息。于是派大将封常清至洛阳,开府库募兵,旬日间即募得六万人。但常清所募兵皆市井白徒,没经过训练,在与安禄山的军队激战中,很快就被打败,洛阳失陷。安禄山纵兵杀掠,封常清与驻屯陕州(今河南三门峡西)的大将高仙芝一起退守潼关(今陕西潼关东北)。玄宗听信监军宦官边令诚的诬告,杀死高、封两人,起用病废在家的大将哥舒翰统兵赴潼关。第二年(756年)正月,安禄山在洛阳称大燕皇帝,命令部将史思明经略河北。
洛阳失陷后,常山(今河北正定)太守颜杲卿与平原(今山东陵县)太守颜真卿起兵征讨安禄山,并号召诸郡响应。河北人民不堪忍受叛军的残暴行为。纷纷自发组织队伍,多则二万,少则万人,抗敌自保。这时玄宗已下诏欲亲征,令朔方、河西、陇石等镇节度使率兵勤王。于是唐朝大将郭子仪、李光弼率朔方军步骑一万东征河北。李光弼分兵先出井陉(今河北陉北),与史思明的军队在常山相持不下常山。后与郭子仪合兵,趁史思明军疲惫懈怠之机,大破之于嘉山(在常山郡东),斩首四万级,捕虏千余人,史思明狼狈逃奔于博陵(今河北高阳西南)。战争的胜利鼓舞了唐军的士气,河北民众也参加到郭、李军中,河北十余郡多杀叛军守将,重归朝廷,切断了安禄山军队前后方的联络,使家在范阳的叛军将士军心动摇,安禄山甚至想放弃洛阳逃还老巢,唐朝很有讨平叛乱的希望。但杨国忠疑心驻防潼关的哥舒翰,不采纳他据险坚守以待敌内变和由郭子仪、李光弼引兵北取范阳,覆敌巢穴的建议,怂恿玄宗促令哥舒翰出兵收复陕洛。是年六月,哥舒翰被迫出兵,与敌将崔乾佑战于灵宝(在今河南省西部)西原,结果被打得大败,唐20万大军一战覆没,潼关失守,哥舒翰也被擒,投降了安禄山。
潼关陷落后,长安震动,玄宗仓皇逃往成都,行至马嵬驿(今陕西兴平西),军士兵变,杀杨国忠,玄宗被迫缢杀宠幸的杨贵妃。马嵬民众遮道留玄宗,玄宗不没答应。太子李亨留下,遂即奔往朔方节度使所在的灵武(今宁夏灵武西南),依倚朔方军。同年七月,太子即皇帝位于灵武,这就是灵宗,入元至德,遥遵在成都的玄宗为上皇天帝。
安禄山派部将孙孝哲进入长安自已仍留洛阳。叛军在长安,搜捕、屠杀皇亲国戚,百官扈从都的家属及安禄山的政敌等,对投降的官僚则授以官爵,送至洛阳。又大肆搜刮坊市民财,搞得民间怨愤不安。百姓日夜盼望唐军的到来。他们时常杀叛军官吏,使叛军穷于应付,连长安西门以外都控制不住。叛军此时声势虽炽,“西胁河陇,南侵江汉,北割河东这半”几乎占领了北半部中国。但安史将领都粗猛没有远略。只知道日夜饮酒,且专以声色财贿为事,已无再进取之意,使唐军得到了重新整备、调集兵力的机会。
在此前后,唐将领鲁炅守南阳,与叛军相持一年之久(至德元载五月到二载五月),后退守襄阳,阻挡了叛军向江汉地区侵扰的道路。填源(今河南鹿邑)县令张巡在吏民支持下,转到雍丘(今河南杞县)坚守十个月,最后到睢阳与太守许远合兵,在矢尽粮绝与朝廷音讯不通的情况下仍苦守十个月(至德元载十二月到二载十月),保卫了江淮地区。雎阳失陷后,张巡等壮烈牺牲。鲁炅、张巡等的抗敌斗争,牵制了安史的兵力,使他们无法向南方发展,也使唐军赢得了时间,并保障了江南财赋对唐朝廷的源源不断的补给。
长安失陷后,郭子仪、李光弼奉命率步骑五万自河北至灵武,壮大了朝廷的声势。河西、北庭、安西等道的兵也前来会合。唐廷又得到回纥、于阗及西域各族的援助。至德二载(757)正月,安禄山被他的儿子安庆绪杀死。李光弼坚守太原(今山西太原),史思明攻之不克,屡为所败。郭子仪也收复了河东(今山西记济蒲州镇)郡。这时大臣李泌提出了先取范阳,覆叛军巢穴,以免叛军势焰复帜的建议。但肃宗急于收复两京,未能接受他的意见。这年九月,肃宗使广平王李俶(后为唐代宗)与郭子仪统朔方军及借来的回纥、西域兵共十五万自凤翔(今陕西凤翔)出发,攻克长安,十月收复洛阳,安庆绪逃往邺郡(相州,今河南安阳)。留在范阳的史思明收复残兵,为安庆绪所忌,率领所统十三郡及兵八万降唐,唐封他为归义王,任范阳节度使。但唐廷对他不放心,策划消灭他。事泄,史思明遂反,与安庆绪遥相呼应,战事又起。
乾元元年(758年)九月,唐朝派郭子仪,李光弼等九节度使统兵20余万(后增至60万)讨伐安庆绪,声势虽大,但无统一指挥,肃宗以宦寂鱼朝恩为观军容宣慰处置使以统辖之。初期还有进展,包围了邺城,次年三月,史思明率兵来援,焚夺唐军粮草,唐军缺乏粮草。不久接战,唐军60万众溃于城下,各归还本镇。史思明杀安庆绪,因到范阳,称大燕皇帝,九朋复攻占洛阳,上元二年(761年)二月,李光弼攻洛阳失败,三月,史思明为其子史朝义所杀,叛将士离心,多次为唐军所败。宝应元年(762年)十月,唐使仆固怀思再借回纥兵收复洛阳,并乘胜追击。史朝义奔莫州(今河北任丘北),次年正月,史朝义想亲自到幽州发兵救援,至范阳,为部下所拒,欲北奔奚、契丹,为部将李怀仙追及,穷迫自杀,历时七年零两个月的安史之乱,此时才宣告结束。
安史之乱是唐朝由盛而衰的转折点。在这次动乱中,中国北方地区的人民遭受了一场空前浩劫,社会经济也受到严重破坏。同时战乱虽然平定,但安史降将田承嗣、薛嵩、李怀仙等却均被朝廷安置于河朔一带任节度使,藩镇割据的局面开始形成。此后内地也相继设立节度使,与中央相抗衡,造成中央与藩镇及藩镇及藩镇之间连绵不断的战争。此外由于战乱中,朝廷曾内调河西、陇右的边防军队以讨安史,因此边备空虚,吐蕃趁机入侵,唐朝不仅丧失了西域的势力,连关中也不能保证安全,使唐朝中央政府日益陷入困境。