Astori komt uit de jeugdopleiding van AC Milan. Die club leende hem in 2006 uit aan Pergocrema en in 2007 aan Cremonese. In juli 2008 legde Cagliari ongeveer één miljoen euro op tafel om de helft van de rechten van Astori te kopen.[1] Hij maakte zijn debuut voor Cagliari op 14 september 2008 tegen Siena. Cagliari verloor met 2–0 en Astori kwam in de drieënvijftigste minuut in het veld voor Michele Canini.[2] Het verblijf van Astori bij Cagliari werd in 2009 verlengd tot medio 2010.[3] Op 31 januari 2010 maakte de verdediger zijn eerste doelpunt voor Cagliari, in een thuiswedstrijd tegen Fiorentina (2–2).[4] In de zomer van 2010 was AC Milan, de club waar Astori de jeugdopleiding doorliep, naar verluidt geïnteresseerd om de helft van de rechten terug te kopen. Zelf gaf hij aan interesse te hebben in een terugkeer naar Milaan.[5] In plaats van een terugkeer naar Milaan, werd Astori in 2011 definitief overgenomen door Cagliari.[6] Een jaar later kon de centrumverdediger naar Spartak Moskou vertrekken, maar hij koos ervoor bij zijn club te blijven.[7]
In juli 2014 verlengde hij zijn contract tot medio 2017.[8] Een dag na het verlengen van zijn verbintenis, huurde AS Roma de verdediger voor één seizoen met een optie tot koop. Bij de Romeinse club moest hij de vervanger worden van de naar Bayern München vertrokken Medhi Benatia.[9] Roma betaalde twee miljoen voor de huur en een eventuele aankoop zou zes miljoen kosten.[10] Voor Roma debuteerde hij op 30 augustus 2014, toen met 2–0 gewonnen werd van Fiorentina. De Italiaan mocht in de basis beginnen van coach Rudi García en hij vormde een duo met de Griekse Kostas Manolas.[11] Op 6 januari 2015 werd met 0–1 gewonnen op bezoek bij Udinese. Astori opende na zeventien minuten de score op aangeven van Francesco Totti. Hiermee tekende hij dus ook voor het enige doelpunt. Na afloop van de wedstrijd was er ophef over het doelpunt; videobeelden zouden tonen dat de bal niet geheel de doellijn had gepasseerd.[12] Astori speelde dertig officiële wedstrijden voor AS Roma. De Romeinse club besloot de verdediger niet definitief over te nemen.[13]
Na zijn terugkeer bij Cagliari, verhuurde de club Astori in augustus 2015 opnieuw; nu nam Fiorentina hem over voor de duur van één seizoen. Ook verplichtte de Florentijnse club zich om hem daarna definitief in te lijven.[14] Na een seizoen op huurbasis in Florence te spelen, zou hij voor drieënhalf miljoen overgenomen worden en daarbij tekende hij een contract tot medio 2019.[15] Zijn eerste wedstrijd voor La Viola speelde hij op 23 augustus 2015, toen Fiorentina in het eigen stadion met 2–0 te sterk was voor AC Milan. Astori begon op de reservebank, maar coach Paulo Sousa liet hem in de negenenvijftigste minuut invallen voor Facundo Roncaglia. De rest van de tweede helft vormde hij een duo centraal achterin met Nenad Tomović.[16]
Astori werd op 4 maart 2018 dood aangetroffen in zijn hotelkamer in Udine. Fiorentina maakte op 6 maart 2018 – net als Cagliari – bekend dat er als eerbetoon aan Astori nooit meer iemand anders met rugnummer 13 zou spelen voor de club.
In augustus 2010 werd Astori door bondscoach Cesare Prandelli voor het eerst opgeroepen voor het Italiaans voetbalelftal, voor een oefenwedstrijd tegen Ivoorkust.[18] Tijdens die wedstrijd kwam de verdediger niet in actie, maar op 29 maart 2011 kwam hij wel tot zijn debuut. Op die dag werd met 0–2 gewonnen van Oekraïne door doelpunten van Giuseppe Rossi en Alessandro Matri. In de zeventiende minuut mocht hij invallen voor Giorgio Chiellini. Al binnen één minuut toonde scheidsrechter Aleksej Nikolajev hem een gele kaart. In de vierenzeventigste minuut kreeg Astori zijn tweede gele kaart. Naast de centrumverdediger maakten ook Matri (Juventus), Daniele Gastaldello (Sampdoria) en Marco Parolo (Cesena) hun debuut.[19]
Op 15 augustus 2012 speelde hij zijn tweede interland voor Italië. In een met 1–2 verloren oefenduel met Engeland speelde hij de volledige negentig minuten mee. Gedurende deze wedstrijd vormde Astori een duo centraal achterin met Angelo Ogbonna.[20] In 2013 werd hij opgenomen in de selectie voor de FIFA Confederations Cup in Brazilië. Hij speelde in één wedstrijd, waarin hij tevens zijn eerste interlanddoelpunt maakte: in de 24e minuut schoot hij Italië op een 0–1-voorsprong tegen Uruguay. Hij werd in de zesennegentigste minuut vervangen voor Leonardo Bonucci. Uiteindelijk werd het 2–2 en Italië won de strafschoppenreeks.[21]