I figured out the nexus problem. For the router with public ip, do I need to change anything in the firewall or router config in order for it sending syslog to a private ip server? BTW, I cannot find the syslog of the router with public ip under solarwinds webconsole -> alerts&activity -> syslog
Yes, you will need to modify the firewall.
I assume that since you said the devices are managed in NCM and NPM any NAT/PAT translations are already being taking care.
If so, you need to specifically allow port udp/514, between the zones on the firewall where the router sits and where the SolarWinds server sits.
If you are not already managing the public device you will need to open the SNMP ports, ICMP, and possibly SSH, all depending on what you want the poller to do with the managed node.
Hope this helps.