If you want to rotate around x=5, you must do glTranslatebefore x=5and regardless of your y coordinate, then do glRotate, and then glTranslateback to the beginning.
So something like
glTranslate(5, 0, 0);
glRotatef(...);
glTranslate(-5, 0, 0);
For the first question, I include @genpfault's answer for completeness. This is due to the vector normalization performed glRotatef()on the vector you pass into.
source
share