There are a number of different way to do this, and the "right" choice depends on the exact application.
Your option 1 is probably not what you want, but a similar option is to simply return a smaller image, on which the blur is well defined. This is probably the closest you will get to something "fool proof", if you can live with the smaller image.
Your option 2 could work, and is certainly a valid option provided you redo the normalization so it still integrates to 1. I personally prefer this option
Another option is a mirroring boundary condition, so you count some of your pixels twice.
If you look at the Gaussian blur in SciPy, you will see a number of different options, all of which are quite valid from a mathematical point of view.
It really very much depends on your application.
You may want to have a look at the Signal Processing StackExchangeSignal Processing StackExchange, as this is probably more their domain.