The clustering algorithm as such usually does not care any more whether your original data were nominal, ordinal or anything else. Instead, most common clustering algorithms only look at distances between data points.
Why? Because clustering attempts to group data points into groups such that all data points within a group are "similar", while data points in different groups are "dissimilar". And similarity can be operationalized via distances. If we have a notion of distance between data points, we can say that two data points are similar if the distance between them is small, and that they are dissimilar if the distance is large. In the end, talking about (dis)similarity and distances amounts to the same thing, but it is more common to discuss clustering in terms of distances.
So it seems like your key question is not so much the clustering algorithm, but defining the distance or (dis)similarity between your data points. Specifically:
For ordinal variables, you will need to decide whether, e.g., the distance between A and C is double the one between A and B... or the sum of the distances between A and B and between B and C. Or the distance between A and C could be more than either. Or less.
For nominal variables, the simplest approach usually is dummy coding, which translates into a distance of one between instances that differ on the variable. If you have additional structure on your nominals (perhaps some values are "more different" than others), you can include this.
Distances between (one-dimensional) ratio variables are usually taken to be the absolute value of the difference, but of course you can do log or power transformations to emphasize small or large absolute differences.
Next, now that you have defined distances between variables, you need to combine them into distances between data points (i.e., collections of variables). Here, you may need to scale stuff to make different dimensions comparable. You can group variables and combine them using the Manhattan, Euclidean, ... distance.
Finally, you toss your distances into k-means or DBSCAN or whatever else.