六月里一个炎热的傍晚,所有的窗户都敞开着,大学生亚瑟·勃尔顿正在比萨神学院的图书馆里翻查一大叠讲道稿。院长蒙太尼里神甫慈爱地注视着他。亚瑟出生在意大利的一个英国富商勃尔顿家中,名义上他是勃尔顿与后妻所生,但实则是后妻与蒙太尼里的私生子。亚瑟从小在家里受异母兄嫂的歧视,又看到母亲受他们的折磨和侮辱,精神上很不愉快,却始终不知道事情的真相。亚瑟崇敬蒙太尼里神甫的渊博学识,把他当作良师慈父,以一片赤诚之心回报蒙太尼里对自己的关怀。
当时的意大利正遭到奥地利的侵略,青年意大利党争取民族独立的思想吸引着热血青年。亚瑟决定献身于这项事业。蒙太尼里发现了亚瑟的活动后十分不安,想方设法加以劝阻;但亚瑟觉得作一个虔诚的教徒和一个为意大利独立而奋斗的人是不矛盾的。在一次秘密集会上,亚瑟遇见了少年时的女友琼玛,悄悄地爱上了她。
蒙太尼里调到罗马当了主教,警方的密探卡尔狄成了新的神甫。在他的诱骗下,亚瑟在忏悔中透露了他们的行动和战友们的名字,以致他连同战友一起被捕入狱。他们的被捕,连琼玛都以为是亚瑟告的密,在愤怒之下打了他的耳光。亚瑟痛恨自己的幼稚无知,对神甫竟然会出卖自己感到震惊,同时得知蒙太尼里神甫原来是他的生身父亲,他最崇仰尊敬的人居然欺骗了他。这一连串的打击使他陷入极度痛苦之中,几乎要发狂。他一铁锤打碎了心爱的耶稣蒙难像,以示与教会决裂。然后他伪装了自杀的现场,只身流亡到南美洲。
在南美洲,亚瑟度过了人间地狱般的13年。流浪生活磨炼了亚瑟,回到意大利时,他已经是一个坚强、冷酷、老练的“牛虻”了。他受命于玛志尼党揭露教会的骗局。他用辛辣的笔一针见血地指出,以红衣主教蒙太尼里为首的自由派实际上乃是教廷的忠实走狗。牛虻赢得了大家的喜爱。此时,他又遇见了琼玛,但琼玛已认不出他了。
牛虻和他的战友们积极准备着起义。在一次偷运军火的行动中被敌人突然包围,牛虻掩护其他人突围,自己却因为蒙太尼里的突然出现而垂下了手中的枪,不幸被捕。
牛虻的战友们设法营救他,但牛虻身负重伤,晕倒在越狱途中。敌人决定迅速将他处死。前来探望的蒙太尼里企图以父子之情和放弃主教的条件劝他归降;牛虻则动情地诉说了他的悲惨经历,企图打动蒙太尼里,要他在上帝(宗教)与儿子(革命)之间作出抉择。但他们谁都不能放弃自己的信仰。蒙太尼里在牛虻的死刑判决书上签了字,自己也痛苦地发疯致死。
刑场上,牛虻从容不迫,慷慨就义。在狱中给琼玛的一封信里,他写上了他们儿时熟稔的一首小诗:
不管我活着,
还是我死掉,
我都是一只。
快乐的飞虻!
至此,琼玛才豁然领悟:牛虻就是她曾经爱过而又冤屈过的亚瑟。