Николай Николаевич был третьим сыном императора Николая I. Его первоначальное воспитание велось с 1838 г. под руководством генерала А. И. Философова. Для практического же ознакомления с обязанностями военной службы великий князь в течение нескольких лет обучался вместе с кадетами 1-го кадетского корпуса. 1 июля 1846 г. он был произведен в прапорщики. Производство в офицеры и пожалование ему в следующем году чина поручика, а в 1848 г. капитана не прекратили его занятий в корпусе, хотя к 1850 г. он уже командовал батальоном кадет. Действительную военную службу великий князь начал в следующем году командиром дивизиона лейб-гвардии Конного полка. В 1852 г. в чине генерал-майора он был зачислен в свиту и назначен генерал-инспектором по инженерной части, а также командиром бригады в 1-й легкой гвардейской кавалерийской дивизии.
С началом Крымской войны 1853–1856 гг. Николай I послал великого князя вместе с братом Михаилом его в действующую армию. Николай Николаевич прибыл под Севастополь 23 октября 1854 г., накануне Инкерманского сражения и принял в нем участие. Находясь под сильнейшим огнем неприятеля, он проявил мужество и доблесть, за что 7 ноября был награжден орденом св. Георгия 4-й степени. С января следующего года руководил инженерными работами, укреплениями и батареями северной части Севастополя.
Кончина императора Николая I заставила великого князя вернуться в Санкт-Петербург. 27 марта старший брат, император Александр II, назначил его членом Государственного совета. В этот же год он занимался инженерными и оборонительными работами у Выборга в Финляндии, в Николаеве на Черноморском побережье и в Кронштадте.
25 января 1856 г. Николай Николаевич приступил к исполнению обязанностей генерал-инспектора инженерной части и оставался на этом посту до самой смерти. В тот же день он получил звание генерал-адъютанта. 26 августа великий князь был произведен в генерал-лейтенанты и назначен начальником дивизии гвардейской кавалерии. В 1859 г. Николай Николаевич стал командующим гвардейским резервным кавалерийским корпусом, а через год в чине инженер-генерала — командиром отдельного гвардейского корпуса. Как член царствующей династии, он быстро продвигался по службе и занимал многие ключевые командные и административные посты в государстве. В 38-летнем возрасте великий князь был назначен командующим войсками гвардии и Санкт-Петербургского военного округа, генерал-инспектором кавалерии, сохраняя за собой все прежние должности и звания. В эти годы проходили реформы по коренному преобразованию армии. Коснулись они и войск под командованием великого князя, особенно положительно отразившиеся в кавалерийских частях.
Когда осенью 1876 г. стала очевидна неминуемость войны с Турцией, император Александр II назначил Николая Николаевича главнокомандующим Дунайской армией. 23 ноября великий князь прибыл в Кишинев и начал работу по сосредоточению армии и подготовке к переправе ее через Дунай. 10 июня присутствовал при переправе 14-го армейского корпуса генерала Циммермана, а 15 июня руководил переправой через Дунай у Систова, за успешное выполнение которой был награжден орденом св. Георгия 2-й степени.
Занятие Тырново отрядом генерала Гурко побудило великого князя самому идти с главными силами на Балканы, однако неудачный штурм Плевны приостановил дальнейшее наступление русской армии. 18 июля при втором штурме Плевны разрозненный фронтальный натиск русских сил с востока и юга был отбит турками, имевшими мощную систему обороны. Русские потеряли свыше 7 тысяч человек. Вторая Плевна вынудила русские войска перейти на Балканах к обороне. В начале августа турки предприняли штурм Шипки. Несмотря на большой перевес в силах, турецкая армия не смогла овладеть Шипкинским перевалом. В боях с 9 по 14 августа русские и болгары потеряли около 4 тысяч человек, турки — около 7 тысяч.
22 августа русские войска начали штурм Ловчи. Ее защищал 8-тысячный гарнизон во главе с Рифаг-пашой. Штурм крепости продолжался 12 часов. Падение Ловчи устранило угрозу южному флангу Западного отряда и позволило начать третий штурм Плевны. 25 августа в Горном Студне состоялся военный совет. Большинство старших начальников высказывалось за немедленный штурм, признавая осаду невозможной и грозившей затянуться до зимы. Великий князь Николай Николаевич стал на сторону большинства и назначил днем штурма 30 августа. Это было самое кровопролитное сражение за всю войну. Осадные войска насчитывали до 85 тысяч человек, в том числе 32 тысячи румынских войск. 30 и 31 августа продолжался кровопролитный бой. Осман-паша бросил против прорвавшихся частей все свои резервы. Русское же командование не поддержало атакующие батальоны своими резервами, и турки отбили штурм. Русские войска потеряли свыше 12 тысяч человек, союзные румынские части — еще 3 тысячи. После этой неудачи главнокомандующий Николай Николаевич предложил отойти за Дунай. Его поддержал ряд военачальников, однако император высказался резко против и решено было перейти к блокаде Плевны.
В начале сентября Сулейман-паша вновь предпринял попытку атаковать Шипку, но атака была отбита. В целом сентябрьские наступления и войск Сулеймана-паши и армии Мехмет-Али на русские позиции у Чаир-Киоя были довольно пассивными и не вызвали особых трудностей в отражении. В ноябре туркам, правда, удалось прорвать русские позиции Восточного отряда, но переброшенные подкрепления закрыли образовавшуюся брешь. Этот удар стал последним успехом турецкой армии в войне. 30 ноября ударная группировка турок пыталась атаковать у села Мечка подразделения Восточного отряда, но после яростного боя натиск был остановлен. Русские перешли в контрнаступление и отбросили турок.
Во второй половине ноября армия Османа-паши, окруженная в Плевне в четыре раза превосходящими русскими силами, стала испытывать недостаток в боеприпасах и продовольствии. На военном совете турки решили пробиваться сквозь окружение. 28 ноября турецкая армия обрушилась на гренадерский корпус, но атака была отражена по всей линии обороны, турки отошли в Плевну и сложили оружие. Падение Плевны резко изменило военную обстановку. Турки лишились 50-тысячной армии, а русские освободили 100 тысяч солдат для нового наступления.
29 ноября 1877 г. Николай Николаевич был удостоен орденов св. Георгия 1-й степени «…за овладение 28 ноября 1877 года твердынями Плевны и пленение армии Османа-паши, упорно сопротивлявшейся в течение 5 месяцев, доблестным умением находившихся под предводительством Его Высочества войск». Он стал последним кавалером этой величайшей полководческой награды России. Великий князь писал императору, что «при настоящих обстоятельствах невозможно уже теперь останавливаться и, ввиду отказа турок от условий мира, необходимо идти на Царьград и там покончить предпринятое Тобой святое дело».
Освободившиеся под Плевной русские войска позволили нанести Турции решающий удар. Армия перешла Балканские перевалы и, разбив армию Весель-паши у Шейново, открыла дорогу на Адрианополь. Последнее крупное сражение этой войны произошло у Филиппополя, где стояла 50-тысячная турецкая армия Сулеймана-паши. С 3 по 5 января 1878 г. противник потерял до 20 тысяч человек и в панике бежал в сторону Эгейского моря. В сражениях у Шейново и Филиппополя русские войска разбили главные силы турок за Балканами. 19 января 1878 г. было заключено перемирие, ставшее преддверием Сан-Стефанского мирного договора. Великий князь, хотя и был удостоен за русско-турецкую войну чина генерал-фельдмаршала, показал себя человеком неуравновешенным и не обладающим способностями военачальника, а его влияние на ход военных действий было главным образом отрицательным.
С 1880 г. Николай Николаевич был тяжело болен. Скончался 13 апреля в Крыму. Похоронен в Петропавловской крепости Санкт-Петербурга. Состоял в браке с принцессой Ольденбургской Фредерикой-Вильгельминой, принявшей в православии имя Александра Петровна, и имел двоих сыновей.