Ensure integrity of other columns from foreign record
Here is a rough sketch of the comments:

CREATE TABLE Race
( Race_id INT NOT NULL PRIMARY KEY  -- I prefer to use the same name through out the model
);

CREATE TABLE Racer
( Racer_id INT NOT NULL PRIMARY KEY  -- See above
, Rank INT NOT NULL
,   CONSTRAINT AK1_Racer UNIQUE (Rank, Racer_id) -- Super key
);

CREATE TABLE Result  -- Is not "Result" a better name than Winner?
-- I removed id
( Race_id INT NOT NULL
, Racer_id INT NOT NULL
, Rank INT NOT NULL  -- See below
, ...   
,   CONSTRAINT PK_Result PRIMARY KEY (Race_id, Racer_id)
,   CONSTRAINT AK_Result UNIQUE (Race_id, Rank)
,   CONSTRAINT FK_Race FOREIGN KEY (Race_id)
                       REFERENCES Race (Race_id)
,   CONSTRAINT FK_Racer FOREIGN KEY (Rank, Racer_id)
                       REFERENCES Racer (Rank, Race_id)
);


EDIT:

I'm not sure why RANK is part of RACER. It seems like all kinds of possible ranks can be derived from WINNER (RESULT):

SELECT Racer_id
     , COUNT(1) as #races
     , AVG(Rank) as avg_rank
     , MIN(Rank) as lowest_rank
     , MAX(Rank) as highest_rank
     , ...
FROM Result -- Winner
GROUP BY Racer_id


If there is some other metric like score, time, etc that determines the rank per race, you may also consider storing that and derive rank from there. PostgreSQL and newer versions of MySQL have window functions like RANK() that is very useful for such calculations.