Some neat solution might be to use a token system based on the current time. You can take the current hour of the day and use it with some salt and put in the query string as a token. Than php script on the second server can check if the request hash string is the same as the hash generated for the current hour of the day with the same salt on the server side.
To make sure that the user does not hit the clock switch, you can check the previous hash.
This makes you sure that the url file will not be available for more than two hours with a guaranteed availability time of one hour.
On server 1:
<?php echo '<a href="server2.com/download.php?token='.md5(date('G')+'secret_word').'&file=file.zip">Link</a>'; ?>
On server 2:
<?php current_hour_hash = md5( date('G').'secret_word' ); previous_hour_number = ( int(date('G')) - 1 ) % 24; previous_hour_hash = md5( str(previous_hour_number).'secret_word' ); if($_GET['token']!= current_hour_hash and $_GET['token']!= previous_hour_hash){ die(); }else{ ...
source share