Virtuoso Web Server has the capability to create extra listeners
using the Conductor interface .
At install time you have your HTTP Server port in your
virtuoso.ini set to 8890, which you want to keep in your local
network as this contains ALL the endpoints that you have registered
in Virtuoso. So as long as you do not open this port in your
firewall, you can only get at it from the local machine.
Next you should create a new vhost entry using the EXTERNAL name
of your machine and use port 80 (or a higher port if you do not
want to run as root) for ex.:
Next you add a "New directory to this line", click on "Type"
radio button and choose "Sparql access point" from the drop-down
list and press Next button. Set "Path" to /sparql and press the
"Save Changes" button to store.
At this point you have created:
http://my.example.com:8080/sparql which functions exactly the same
as your internal http://example.com/sparql. You can now open your
firewall and allow outside machines to connect to port 8080 so
people can use your SPARQL endpoint without access to any other
endpoint on your Virtuoso installation.
You should probably also change your virtuoso.ini so:
DefaultHost = my.example.com:8080
If you use port 80, you do not have to add :80 at the end of
this setting, although it should not make any difference.
You can now add other directories / endpoints to the new
interface you just created e.g. a nice / directory that points
to a index.html which describes your site etc.