UEFI threw a huge moneywrench in the process, and SystemD doesn't help. Last time I made it work I had to track down a mailing list entry where someone discussed an otherwise undocumented kernel option that needed to be set to make it work. One of the key glue techs that made it work last time (rom-o-matic) went out of development and is gone.
if option arch = 00:07 { filename "uefi/shimx64.efi"; next-server X.X.X.X; } else ...
Otherwise, your going to get the wrong arch/filename.
It is similar to HTTPS, but the arch = 00:10 for x64 and it needs:
option vendor-class-identifier "HTTPClient";
Then put the URL in the filename field.
Finally just put the usual bios/pxe stub in the last "else"
Of course, your distro should provide a PXE capable grub/kernel/initrd, which you then toss on the TFTP/HTTPS (or HTTP then you don't have to deal with certs) server in the path provided.
Without that support, you have to take apart ISO files to netboot them, and your PXE environment needs to understand the various kernels and how to boot them, and how to provide modules / filesystem images.
It's a big pain.
For the serverside, there are several python projects on github which provide everything you need in one package, for example pybootd.
But I get a good bit of satisfaction of having gleaned a pretty functional understanding of setting up PXE/netboot (Ubuntu installs; with a Ubuntu PXE server via DNSMasq + nfs + tftp).
I even did some grub menu user input (and ascii art while I was at it) prompts/trickery to allow choosing the machine name shortly after boot, before the long slow Ubuntu install.
The list of things I've failed at (memtest) or not tried (Windows) is surely long, though.
Ventoy is fantastic for any lower-volume imaging needs I have, of course.